public Task GetNodeInfo() { using (ServerStore.ContextPool.AllocateOperationContext(out TransactionOperationContext context)) using (var writer = new BlittableJsonTextWriter(context, ResponseBodyStream())) { var json = new DynamicJsonValue(); using (context.OpenReadTransaction()) { json[nameof(NodeInfo.NodeTag)] = ServerStore.NodeTag; json[nameof(NodeInfo.TopologyId)] = ServerStore.GetClusterTopology(context).TopologyId; json[nameof(NodeInfo.Certificate)] = ServerStore.Server.Certificate.CertificateForClients; json[nameof(ServerStore.Engine.LastStateChangeReason)] = ServerStore.LastStateChangeReason(); json[nameof(NodeInfo.NumberOfCores)] = ProcessorInfo.ProcessorCount; var memoryInformation = MemoryInformation.GetMemoryInfo(); json[nameof(NodeInfo.InstalledMemoryInGb)] = memoryInformation.InstalledMemory.GetDoubleValue(SizeUnit.Gigabytes); json[nameof(NodeInfo.UsableMemoryInGb)] = memoryInformation.TotalPhysicalMemory.GetDoubleValue(SizeUnit.Gigabytes); json[nameof(NodeInfo.BuildInfo)] = LicenseManager.BuildInfo; json[nameof(NodeInfo.ServerId)] = ServerStore.GetServerId().ToString(); json[nameof(NodeInfo.CurrentState)] = ServerStore.CurrentRachisState; } context.Write(writer, json); writer.Flush(); } return(Task.CompletedTask); }
public Task GetClusterTopology() { using (ServerStore.ContextPool.AllocateOperationContext(out TransactionOperationContext context)) using (context.OpenReadTransaction()) { var topology = ServerStore.GetClusterTopology(context); var nodeTag = ServerStore.NodeTag; if (topology.Members.Count == 0) { var tag = ServerStore.NodeTag ?? "A"; var serverUrl = ServerStore.NodeHttpServerUrl; topology = new ClusterTopology( "dummy", new Dictionary <string, string> { [tag] = serverUrl }, new Dictionary <string, string>(), new Dictionary <string, string>(), tag ); nodeTag = tag; } HttpContext.Response.StatusCode = (int)HttpStatusCode.OK; using (var writer = new BlittableJsonTextWriter(context, ResponseBodyStream())) { var loadLicenseLimits = ServerStore.LoadLicenseLimits(); var nodeLicenseDetails = loadLicenseLimits == null ? null : DynamicJsonValue.Convert(loadLicenseLimits.NodeLicenseDetails); var json = new DynamicJsonValue { ["Topology"] = topology.ToSortedJson(), ["Leader"] = ServerStore.LeaderTag, ["CurrentState"] = ServerStore.CurrentRachisState, ["NodeTag"] = nodeTag, ["CurrentTerm"] = ServerStore.Engine.CurrentTerm, ["NodeLicenseDetails"] = nodeLicenseDetails, [nameof(ServerStore.Engine.LastStateChangeReason)] = ServerStore.LastStateChangeReason() }; var clusterErrors = ServerStore.GetClusterErrors(); if (clusterErrors.Count > 0) { json["Errors"] = clusterErrors; } var nodesStatues = ServerStore.GetNodesStatuses(); json["Status"] = DynamicJsonValue.Convert(nodesStatues); context.Write(writer, json); writer.Flush(); } } return(Task.CompletedTask); }
public async Task GetNodeInfo() { using (ServerStore.ContextPool.AllocateOperationContext(out TransactionOperationContext context)) await using (var writer = new AsyncBlittableJsonTextWriter(context, ResponseBodyStream())) { var nodeInfo = ServerStore.GetNodeInfo(); var json = nodeInfo.ToJson(); json[nameof(ServerStore.Engine.LastStateChangeReason)] = ServerStore.LastStateChangeReason(); context.Write(writer, json); } }
public Task GetNodeInfo() { using (ServerStore.ContextPool.AllocateOperationContext(out TransactionOperationContext context)) using (var writer = new BlittableJsonTextWriter(context, ResponseBodyStream())) { var json = new DynamicJsonValue(); using (context.OpenReadTransaction()) { json[nameof(NodeInfo.NodeTag)] = ServerStore.NodeTag; json[nameof(NodeInfo.TopologyId)] = ServerStore.GetClusterTopology(context).TopologyId; json[nameof(NodeInfo.Certificate)] = ServerStore.RavenServer.ClusterCertificateHolder.CertificateForClients; json[nameof(ServerStore.Engine.LastStateChangeReason)] = ServerStore.LastStateChangeReason(); } context.Write(writer, json); writer.Flush(); } return(Task.CompletedTask); }
public Task GetClusterTopology() { using (ServerStore.ContextPool.AllocateOperationContext(out TransactionOperationContext context)) using (context.OpenReadTransaction()) { var topology = ServerStore.GetClusterTopology(context); var nodeTag = ServerStore.NodeTag; if (topology.AllNodes.Count == 0) { var tag = ServerStore.NodeTag ?? "A"; var serverUrl = ServerStore.GetNodeHttpServerUrl(HttpContext.Request.GetClientRequestedNodeUrl()); topology = new ClusterTopology( topology.TopologyId ?? "dummy", new Dictionary <string, string> { [tag] = serverUrl }, new Dictionary <string, string>(), new Dictionary <string, string>(), tag, -1L ); nodeTag = tag; } else { var isClientIndependent = GetBoolValueQueryString("clientIndependent", false) ?? false; if (isClientIndependent == false && HttpContext.Items.TryGetValue(nameof(LocalEndpointClient.DebugPackage), out var _) == false) { topology.ReplaceCurrentNodeUrlWithClientRequestedNodeUrlIfNecessary(ServerStore, HttpContext); } } HttpContext.Response.StatusCode = (int)HttpStatusCode.OK; using (var writer = new BlittableJsonTextWriter(context, ResponseBodyStream())) { var loadLicenseLimits = ServerStore.LoadLicenseLimits(); var nodeLicenseDetails = loadLicenseLimits == null ? null : DynamicJsonValue.Convert(loadLicenseLimits.NodeLicenseDetails); var json = new DynamicJsonValue { [nameof(ClusterTopologyResponse.Topology)] = topology.ToSortedJson(), [nameof(ClusterTopologyResponse.Etag)] = topology.Etag, [nameof(ClusterTopologyResponse.Leader)] = ServerStore.LeaderTag, ["LeaderShipDuration"] = ServerStore.Engine.CurrentLeader?.LeaderShipDuration, ["CurrentState"] = ServerStore.CurrentRachisState, [nameof(ClusterTopologyResponse.NodeTag)] = nodeTag, ["CurrentTerm"] = ServerStore.Engine.CurrentTerm, ["NodeLicenseDetails"] = nodeLicenseDetails, [nameof(ServerStore.Engine.LastStateChangeReason)] = ServerStore.LastStateChangeReason() }; var clusterErrors = ServerStore.GetClusterErrors(); if (clusterErrors.Count > 0) { json["Errors"] = clusterErrors; } var nodesStatues = ServerStore.GetNodesStatuses(); json["Status"] = DynamicJsonValue.Convert(nodesStatues); context.Write(writer, json); writer.Flush(); } } return(Task.CompletedTask); }