public async Task <IEnumerable <NodeLoadMetricInformation> > GetNodeLoadAsync(string nodeName) { long replicaCount = await this.GetNodeReplicaCountAsync(nodeName); NodeLoadInformation loadInfo = await this.fabricClient.QueryManager.GetNodeLoadInformationAsync(nodeName); foreach (string systemService in systemMetrics) { NodeLoadMetricInformation item = loadInfo.NodeLoadMetricInformationList.FirstOrDefault(x => String.Equals(x.Name, systemService, StringComparison.OrdinalIgnoreCase)); if (item != null) { loadInfo.NodeLoadMetricInformationList.Remove(item); } } Type t = typeof(NodeLoadMetricInformation); NodeLoadMetricInformation countMetric = new NodeLoadMetricInformation(); t.GetProperty("Name").SetValue(countMetric, CountMetricName); t.GetProperty("IsCapacityViolation").SetValue(countMetric, false); t.GetProperty("NodeBufferedCapacity").SetValue(countMetric, 0); t.GetProperty("NodeCapacity").SetValue(countMetric, 0); t.GetProperty("NodeLoad").SetValue(countMetric, replicaCount); t.GetProperty("NodeRemainingBufferedCapacity").SetValue(countMetric, -1); t.GetProperty("NodeRemainingCapacity").SetValue(countMetric, -1); IList <NodeLoadMetricInformation> metrics = loadInfo.NodeLoadMetricInformationList; metrics.Add(countMetric); return(metrics); }
protected override async Task OnEnumChildren(bool deep) { LoadInformation = await _fabricClient.QueryManager.GetNodeLoadInformationAsync(_node.NodeName); }
private static async Task DumpClusterAsync(FabricClient fc) { var qm = fc.QueryManager; ClusterLoadInformation info = await qm.GetClusterLoadInformationAsync(); WriteLine($"LB StartTime={info.LastBalancingStartTimeUtc}, LB EndTime={info.LastBalancingEndTimeUtc}"); foreach (LoadMetricInformation lmi in info.LoadMetricInformationList) { WriteLine($"Name={lmi.Name}"); } foreach (ProvisionedFabricCodeVersion pfcv in await qm.GetProvisionedFabricCodeVersionListAsync()) { WriteLine($"SF CodeVersion={pfcv.CodeVersion}"); } foreach (ProvisionedFabricConfigVersion pfcv in await qm.GetProvisionedFabricConfigVersionListAsync()) { WriteLine($"SF Config version={pfcv.ConfigVersion}"); } foreach (ApplicationType at in await qm.GetApplicationTypeListAsync()) { WriteLine($"Name={at.ApplicationTypeName}, Ver={at.ApplicationTypeVersion}"); foreach (ServiceType st in await qm.GetServiceTypeListAsync(at.ApplicationTypeName, at.ApplicationTypeVersion)) { WriteLine($" Name={st.ServiceManifestName}, Ver={st.ServiceManifestVersion}"); } } foreach (Node n in await qm.GetNodeListAsync()) { WriteLine($"Name={n.NodeName}, Health={n.HealthState}, FD={n.FaultDomain}, UD={n.UpgradeDomain}, IP={n.IpAddressOrFQDN}"); NodeLoadInformation nli = await qm.GetNodeLoadInformationAsync(n.NodeName); foreach (NodeLoadMetricInformation nlmi in nli.NodeLoadMetricInformationList) { WriteLine($"Name={nlmi.Name}, Remaining={nlmi.NodeRemainingCapacity}"); } foreach (DeployedApplication da in await qm.GetDeployedApplicationListAsync(n.NodeName)) { WriteLine(da.ApplicationName); foreach (DeployedCodePackage dcp in await qm.GetDeployedCodePackageListAsync(n.NodeName, da.ApplicationName)) { WriteLine(dcp.EntryPoint.EntryPointLocation); } foreach (DeployedServiceType dst in await qm.GetDeployedServiceTypeListAsync(n.NodeName, da.ApplicationName)) { WriteLine(dst.ServiceTypeName); } foreach (DeployedServiceReplica dsr in await qm.GetDeployedReplicaListAsync(n.NodeName, da.ApplicationName)) { long?id = (dsr as DeployedStatefulServiceReplica)?.ReplicaId; if (id == null) { id = (dsr as DeployedStatelessServiceInstance)?.InstanceId; } WriteLine($"ServiceName={dsr.ServiceName}, PartitionId={dsr.Partitionid}, ReplicaId={id}, Status={dsr.ReplicaStatus}"); DeployedServiceReplicaDetail drd = await qm.GetDeployedReplicaDetailAsync(n.NodeName, dsr.Partitionid, id.Value); } foreach (DeployedServicePackage dsp in await qm.GetDeployedServicePackageListAsync(n.NodeName, da.ApplicationName)) { WriteLine($"ManifestName={dsp.ServiceManifestName}, Status={dsp.DeployedServicePackageStatus}"); } } } foreach (Application a in await qm.GetApplicationListAsync()) { WriteLine($"App={a.ApplicationName}, Status={a.ApplicationStatus}, Health={a.HealthState}"); foreach (Service s in await qm.GetServiceListAsync(a.ApplicationName)) { WriteLine($" Service={s.ServiceName}, Status={s.ServiceStatus}, Health={s.HealthState}"); foreach (Partition p in await qm.GetPartitionListAsync(s.ServiceName)) { WriteLine($" Partition={p.PartitionInformation.Id}, Status={p.PartitionStatus}, Health={p.HealthState}"); PartitionLoadInformation pli = await qm.GetPartitionLoadInformationAsync(p.PartitionInformation.Id); foreach (Replica r in await qm.GetReplicaListAsync(p.PartitionInformation.Id)) { WriteLine($" Replica={r.Id}, Status={r.ReplicaStatus}, Health={r.HealthState}"); ReplicaLoadInformation rli = await qm.GetReplicaLoadInformationAsync(p.PartitionInformation.Id, r.Id); } UnplacedReplicaInformation ur = await qm.GetUnplacedReplicaInformationAsync(s.ServiceName.ToString(), p.PartitionInformation.Id, false); if (ur.UnplacedReplicaReasons.Count > 0) { WriteLine("Unplaced partition replicas"); foreach (var reason in ur.UnplacedReplicaReasons) { WriteLine(reason); } } } } } }