Esempio n. 1
0
        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);
 }
Esempio n. 3
0
        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);
                            }
                        }
                    }
                }
            }
        }