/// <summary>
        /// Serializes the object to JSON.
        /// </summary>
        /// <param name="writer">The <see cref="T: Newtonsoft.Json.JsonWriter" /> to write to.</param>
        /// <param name="obj">The object to serialize to JSON.</param>
        internal static void Serialize(JsonWriter writer, ClusterHealthChunkQueryDescription obj)
        {
            // Required properties are always serialized, optional properties are serialized when not null.
            writer.WriteStartObject();
            if (obj.NodeFilters != null)
            {
                writer.WriteEnumerableProperty(obj.NodeFilters, "NodeFilters", NodeHealthStateFilterConverter.Serialize);
            }

            if (obj.ApplicationFilters != null)
            {
                writer.WriteEnumerableProperty(obj.ApplicationFilters, "ApplicationFilters", ApplicationHealthStateFilterConverter.Serialize);
            }

            if (obj.ClusterHealthPolicy != null)
            {
                writer.WriteProperty(obj.ClusterHealthPolicy, "ClusterHealthPolicy", ClusterHealthPolicyConverter.Serialize);
            }

            if (obj.ApplicationHealthPolicies != null)
            {
                writer.WriteProperty(obj.ApplicationHealthPolicies, "ApplicationHealthPolicies", ApplicationHealthPoliciesConverter.Serialize);
            }

            writer.WriteEndObject();
        }
        /// <inheritdoc/>
        protected override void ProcessRecordInternal()
        {
            var clusterHealthPolicy = new ClusterHealthPolicy(
                considerWarningAsError: this.ConsiderWarningAsError,
                maxPercentUnhealthyNodes: this.MaxPercentUnhealthyNodes,
                maxPercentUnhealthyApplications: this.MaxPercentUnhealthyApplications,
                applicationTypeHealthPolicyMap: this.ApplicationTypeHealthPolicyMap,
                nodeTypeHealthPolicyMap: this.NodeTypeHealthPolicyMap);

            var applicationHealthPolicies = new ApplicationHealthPolicies(
                applicationHealthPolicyMap: this.ApplicationHealthPolicyMap);

            var clusterHealthChunkQueryDescription = new ClusterHealthChunkQueryDescription(
                nodeFilters: this.NodeFilters,
                applicationFilters: this.ApplicationFilters,
                clusterHealthPolicy: clusterHealthPolicy,
                applicationHealthPolicies: applicationHealthPolicies);

            var result = this.ServiceFabricClient.Cluster.GetClusterHealthChunkUsingPolicyAndAdvancedFiltersAsync(
                clusterHealthChunkQueryDescription: clusterHealthChunkQueryDescription,
                serverTimeout: this.ServerTimeout,
                cancellationToken: this.CancellationToken).GetAwaiter().GetResult();

            if (result != null)
            {
                this.WriteObject(this.FormatOutput(result));
            }
        }
        /// <inheritdoc />
        public Task <ClusterHealthChunk> GetClusterHealthChunkUsingPolicyAndAdvancedFiltersAsync(
            ClusterHealthChunkQueryDescription clusterHealthChunkQueryDescription = default(ClusterHealthChunkQueryDescription),
            long?serverTimeout = 60,
            CancellationToken cancellationToken = default(CancellationToken))
        {
            serverTimeout?.ThrowIfOutOfInclusiveRange("serverTimeout", 1, 4294967295);
            var requestId   = Guid.NewGuid().ToString();
            var url         = "$/GetClusterHealthChunk";
            var queryParams = new List <string>();

            // Append to queryParams if not null.
            serverTimeout?.AddToQueryParameters(queryParams, $"timeout={serverTimeout}");
            queryParams.Add("api-version=6.0");
            url += "?" + string.Join("&", queryParams);

            string content;

            using (var sw = new StringWriter())
            {
                if (clusterHealthChunkQueryDescription != default(ClusterHealthChunkQueryDescription))
                {
                    ClusterHealthChunkQueryDescriptionConverter.Serialize(new JsonTextWriter(sw), clusterHealthChunkQueryDescription);
                }

                content = sw.ToString();
            }

            HttpRequestMessage RequestFunc()
            {
                var request = new HttpRequestMessage()
                {
                    Method  = HttpMethod.Post,
                    Content = new StringContent(content, Encoding.UTF8),
                };

                request.Content.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json; charset=utf-8");
                return(request);
            }

            return(this.httpClient.SendAsyncGetResponse(RequestFunc, url, ClusterHealthChunkConverter.Deserialize, requestId, cancellationToken));
        }
        public void Init()
        {
            var random = new Random((int)DateTime.Now.Ticks);

            // Basic types
            FABRIC_HEALTH_STATE_ = random.CreateRandom <HealthState>();
            FABRIC_HEALTH_EVENT_ = random.CreateRandom <HealthEvent>();

            // HealthEvaluation
            FABRIC_EVENT_HEALTH_EVALUATION_ = random.CreateRandom <EventHealthEvaluation>();
            FABRIC_HEALTH_EVALUATION_       = random.CreateRandom <HealthEvaluation>();

            FABRIC_REPLICA_HEALTH_EVALUATION_  = random.CreateRandom <ReplicaHealthEvaluation>();
            FABRIC_REPLICAS_HEALTH_EVALUATION_ = random.CreateRandom <ReplicasHealthEvaluation>();

            FABRIC_PARTITION_HEALTH_EVALUATION_  = random.CreateRandom <PartitionHealthEvaluation>();
            FABRIC_PARTITIONS_HEALTH_EVALUATION_ = random.CreateRandom <PartitionsHealthEvaluation>();

            FABRIC_SERVICE_HEALTH_EVALUATION_  = random.CreateRandom <ServiceHealthEvaluation>();
            FABRIC_SERVICES_HEALTH_EVALUATION_ = random.CreateRandom <ServicesHealthEvaluation>();
            FABRIC_DEPLOYED_SERVICE_PACKAGE_HEALTH_EVALUATION_  = random.CreateRandom <DeployedServicePackageHealthEvaluation>();
            FABRIC_DEPLOYED_SERVICE_PACKAGES_HEALTH_EVALUATION_ = random.CreateRandom <NodeHealthEvaluation>();

            FABRIC_APPLICATION_HEALTH_EVALUATION_                          = random.CreateRandom <ApplicationHealthEvaluation>();
            FABRIC_SYSTEM_APPLICATION_HEALTH_EVALUATION_                   = random.CreateRandom <SystemApplicationHealthEvaluation>();
            FABRIC_APPLICATIONS_HEALTH_EVALUATION_                         = random.CreateRandom <ApplicationsHealthEvaluation>();
            FABRIC_APPLICATION_TYPE_APPLICATIONS_HEALTH_EVALUATION_        = random.CreateRandom <ApplicationTypeApplicationsHealthEvaluation>();
            FABRIC_DEPLOYED_APPLICATION_HEALTH_EVALUATION_                 = random.CreateRandom <DeployedApplicationHealthEvaluation>();
            FABRIC_DEPLOYED_APPLICATIONS_HEALTH_EVALUATION_                = random.CreateRandom <DeployedApplicationsHealthEvaluation>();
            FABRIC_UPGRADE_DOMAIN_DEPLOYED_APPLICATIONS_HEALTH_EVALUATION_ = random.CreateRandom <UpgradeDomainDeployedApplicationsHealthEvaluation>();

            FABRIC_NODE_HEALTH_EVALUATION_                             = random.CreateRandom <NodeHealthEvaluation>();
            FABRIC_NODES_HEALTH_EVALUATION_                            = random.CreateRandom <NodesHealthEvaluation>();
            FABRIC_DELTA_NODES_CHECK_HEALTH_EVALUATION_                = random.CreateRandom <DeltaNodesCheckHealthEvaluation>();
            FABRIC_UPGRADE_DOMAIN_NODES_HEALTH_EVALUATION_             = random.CreateRandom <UpgradeDomainNodesHealthEvaluation>();
            FABRIC_UPGRADE_DOMAIN_DELTA_NODES_CHECK_HEALTH_EVALUATION_ = random.CreateRandom <UpgradeDomainDeltaNodesCheckHealthEvaluation>();

            // Health
            FABRIC_REPLICA_HEALTH_   = random.CreateRandom <ReplicaHealth>();
            FABRIC_PARTITION_HEALTH_ = random.CreateRandom <PartitionHealth>();
            FABRIC_SERVICE_HEALTH_   = random.CreateRandom <ServiceHealth>();
            FABRIC_DEPLOYED_SERVICE_PACKAGE_HEALTH_ = random.CreateRandom <DeployedServicePackageHealth>();

            FABRIC_APPLICATION_HEALTH_          = random.CreateRandom <ApplicationHealth>();
            FABRIC_NODE_HEALTH_                 = random.CreateRandom <NodeHealth>();
            FABRIC_CLUSTER_HEALTH_              = random.CreateRandom <ClusterHealth>();
            FABRIC_DEPLOYED_APPLICATION_HEALTH_ = random.CreateRandom <DeployedApplicationHealth>();

            FABRIC_CLUSTER_HEALTH_POLICY_ = random.CreateRandom <ClusterHealthPolicy>();

            FABRIC_CLUSTER_HEALTH_POLICY_NO_APP_TYPE_ = random.CreateRandom <ClusterHealthPolicy>();
            FABRIC_CLUSTER_HEALTH_POLICY_NO_APP_TYPE_.ApplicationTypeHealthPolicyMap.Clear();

            FABRIC_APPLICATION_HEALTH_POLICY_ = random.CreateRandom <ApplicationHealthPolicy>();

            FABRIC_REPLICA_HEALTH_STATE_CHUNK_ = this.random.CreateRandom <ReplicaHealthStateChunk>();

            FABRIC_PARTITION_HEALTH_STATE_CHUNK_ = this.random.CreateRandom <PartitionHealthStateChunk>();
            FABRIC_PARTITION_HEALTH_STATE_CHUNK_.ReplicaHealthStateChunks = new ReplicaHealthStateChunkList()
            {
                FABRIC_REPLICA_HEALTH_STATE_CHUNK_
            };

            FABRIC_SERVICE_HEALTH_STATE_CHUNK_ = this.random.CreateRandom <ServiceHealthStateChunk>();
            FABRIC_SERVICE_HEALTH_STATE_CHUNK_.PartitionHealthStateChunks = new PartitionHealthStateChunkList()
            {
                FABRIC_PARTITION_HEALTH_STATE_CHUNK_
            };

            FABRIC_DEPLOYED_SERVICE_PACKAGE_HEALTH_STATE_CHUNK_ = this.random.CreateRandom <DeployedServicePackageHealthStateChunk>();

            FABRIC_DEPLOYED_APPLICATION_HEALTH_STATE_CHUNK_ = this.random.CreateRandom <DeployedApplicationHealthStateChunk>();
            FABRIC_DEPLOYED_APPLICATION_HEALTH_STATE_CHUNK_.DeployedServicePackageHealthStateChunks = new DeployedServicePackageHealthStateChunkList()
            {
                FABRIC_DEPLOYED_SERVICE_PACKAGE_HEALTH_STATE_CHUNK_
            };

            FABRIC_APPLICATION_HEALTH_STATE_CHUNK_ = this.random.CreateRandom <ApplicationHealthStateChunk>();
            FABRIC_APPLICATION_HEALTH_STATE_CHUNK_.ServiceHealthStateChunks = new ServiceHealthStateChunkList()
            {
                FABRIC_SERVICE_HEALTH_STATE_CHUNK_
            };
            FABRIC_APPLICATION_HEALTH_STATE_CHUNK_.DeployedApplicationHealthStateChunks = new DeployedApplicationHealthStateChunkList()
            {
                FABRIC_DEPLOYED_APPLICATION_HEALTH_STATE_CHUNK_
            };

            FABRIC_NODE_HEALTH_STATE_CHUNK_ = this.random.CreateRandom <NodeHealthStateChunk>();

            FABRIC_CLUSTER_HEALTH_CHUNK_ = this.random.CreateRandom <ClusterHealthChunk>();
            FABRIC_CLUSTER_HEALTH_CHUNK_.ApplicationHealthStateChunks = new ApplicationHealthStateChunkList()
            {
                FABRIC_APPLICATION_HEALTH_STATE_CHUNK_
            };
            FABRIC_CLUSTER_HEALTH_CHUNK_.NodeHealthStateChunks = new NodeHealthStateChunkList()
            {
                FABRIC_NODE_HEALTH_STATE_CHUNK_
            };

            FABRIC_CLUSTER_HEALTH_CHUNK_ = this.random.CreateRandom <ClusterHealthChunk>();

            FABRIC_REPLICA_HEALTH_STATE_FILTER_ = this.random.CreateRandom <ReplicaHealthStateFilter>();

            FABRIC_PARTITION_HEALTH_STATE_FILTER_ = this.random.CreateRandom <PartitionHealthStateFilter>();
            FABRIC_PARTITION_HEALTH_STATE_FILTER_.ReplicaFilters.Add(FABRIC_REPLICA_HEALTH_STATE_FILTER_);

            FABRIC_SERVICE_HEALTH_STATE_FILTER_ = this.random.CreateRandom <ServiceHealthStateFilter>();
            FABRIC_SERVICE_HEALTH_STATE_FILTER_.PartitionFilters.Add(FABRIC_PARTITION_HEALTH_STATE_FILTER_);

            FABRIC_DEPLOYED_SERVICE_PACKAGE_HEALTH_STATE_FILTER_ = this.random.CreateRandom <DeployedServicePackageHealthStateFilter>();

            FABRIC_DEPLOYED_APPLICATION_HEALTH_STATE_FILTER_ = this.random.CreateRandom <DeployedApplicationHealthStateFilter>();
            FABRIC_DEPLOYED_APPLICATION_HEALTH_STATE_FILTER_.DeployedServicePackageFilters.Add(FABRIC_DEPLOYED_SERVICE_PACKAGE_HEALTH_STATE_FILTER_);

            FABRIC_APPLICATION_HEALTH_STATE_FILTER_ = this.random.CreateRandom <ApplicationHealthStateFilter>();
            FABRIC_APPLICATION_HEALTH_STATE_FILTER_.ServiceFilters.Add(FABRIC_SERVICE_HEALTH_STATE_FILTER_);
            FABRIC_APPLICATION_HEALTH_STATE_FILTER_.DeployedApplicationFilters.Add(FABRIC_DEPLOYED_APPLICATION_HEALTH_STATE_FILTER_);

            FABRIC_NODE_HEALTH_STATE_FILTER_ = this.random.CreateRandom <NodeHealthStateFilter>();

            FABRIC_CLUSTER_HEALTH_CHUNK_QUERY_DESCRIPTION_ = this.random.CreateRandom <ClusterHealthChunkQueryDescription>();
            FABRIC_CLUSTER_HEALTH_CHUNK_QUERY_DESCRIPTION_.ApplicationFilters.Add(FABRIC_APPLICATION_HEALTH_STATE_FILTER_);
            FABRIC_CLUSTER_HEALTH_CHUNK_QUERY_DESCRIPTION_.NodeFilters.Add(FABRIC_NODE_HEALTH_STATE_FILTER_);
        }
 public GetClusterHealthChunkRequest(ClusterHealthChunkQueryDescription queryDescription, IFabricClient fabricClient, TimeSpan timeout)
     : base(fabricClient, timeout)
 {
     ThrowIf.Null(queryDescription, "queryDescription");
     this.QueryDescription = queryDescription;
 }
Пример #6
0
        protected override void ProcessRecord()
        {
            var clusterConnection = this.GetClusterConnection();

            try
            {
                var queryDescription = new ClusterHealthChunkQueryDescription();

                if (this.ConsiderWarningAsError.HasValue ||
                    this.MaxPercentUnhealthyNodes.HasValue ||
                    this.MaxPercentUnhealthyApplications.HasValue ||
                    this.ApplicationTypeHealthPolicyMap != null)
                {
                    queryDescription.ClusterHealthPolicy = new ClusterHealthPolicy()
                    {
                        ConsiderWarningAsError          = this.ConsiderWarningAsError.GetValueOrDefault(),
                        MaxPercentUnhealthyApplications = this.MaxPercentUnhealthyApplications.GetValueOrDefault(),
                        MaxPercentUnhealthyNodes        = this.MaxPercentUnhealthyNodes.GetValueOrDefault()
                    };

                    if (this.ApplicationTypeHealthPolicyMap != null)
                    {
                        foreach (var entry in this.ApplicationTypeHealthPolicyMap)
                        {
                            queryDescription.ClusterHealthPolicy.ApplicationTypeHealthPolicyMap.Add(entry.Key, entry.Value);
                        }
                    }
                }

                if (this.ApplicationFilters != null)
                {
                    foreach (var filter in this.ApplicationFilters)
                    {
                        queryDescription.ApplicationFilters.Add(filter);
                    }
                }

                if (this.NodeFilters != null)
                {
                    foreach (var filter in this.NodeFilters)
                    {
                        queryDescription.NodeFilters.Add(filter);
                    }
                }

                if (this.ApplicationHealthPolicies != null)
                {
                    foreach (var entry in this.ApplicationHealthPolicies)
                    {
                        queryDescription.ApplicationHealthPolicies.Add(entry.Key, entry.Value);
                    }
                }

                var clusterHealthChunk = clusterConnection.GetClusterHealthChunkAsync(
                    queryDescription,
                    this.GetTimeout(),
                    this.GetCancellationToken()).Result;
                this.WriteObject(this.FormatOutput(clusterHealthChunk));
            }
            catch (AggregateException aggregateException)
            {
                aggregateException.Handle((ae) =>
                {
                    this.ThrowTerminatingError(
                        ae,
                        Constants.GetClusterHealthChunkErrorId,
                        clusterConnection);
                    return(true);
                });
            }
        }