package collector import ( "github.com/prometheus/client_golang/prometheus" "github.com/yusufpapurcu/wmi" ) func init() { registerCollector("mscluster_cluster", newMSCluster_ClusterCollector) } // A MSCluster_ClusterCollector is a Prometheus collector for WMI MSCluster_Cluster metrics type MSCluster_ClusterCollector struct { AddEvictDelay *prometheus.Desc AdminAccessPoint *prometheus.Desc AutoAssignNodeSite *prometheus.Desc AutoBalancerLevel *prometheus.Desc AutoBalancerMode *prometheus.Desc BackupInProgress *prometheus.Desc BlockCacheSize *prometheus.Desc ClusSvcHangTimeout *prometheus.Desc ClusSvcRegroupOpeningTimeout *prometheus.Desc ClusSvcRegroupPruningTimeout *prometheus.Desc ClusSvcRegroupStageTimeout *prometheus.Desc ClusSvcRegroupTickInMilliseconds *prometheus.Desc ClusterEnforcedAntiAffinity *prometheus.Desc ClusterFunctionalLevel *prometheus.Desc ClusterGroupWaitDelay *prometheus.Desc ClusterLogLevel *prometheus.Desc ClusterLogSize *prometheus.Desc ClusterUpgradeVersion *prometheus.Desc CrossSiteDelay *prometheus.Desc CrossSiteThreshold *prometheus.Desc CrossSubnetDelay *prometheus.Desc CrossSubnetThreshold *prometheus.Desc CsvBalancer *prometheus.Desc DatabaseReadWriteMode *prometheus.Desc DefaultNetworkRole *prometheus.Desc DetectedCloudPlatform *prometheus.Desc DetectManagedEvents *prometheus.Desc DetectManagedEventsThreshold *prometheus.Desc DisableGroupPreferredOwnerRandomization *prometheus.Desc DrainOnShutdown *prometheus.Desc DynamicQuorumEnabled *prometheus.Desc EnableSharedVolumes *prometheus.Desc FixQuorum *prometheus.Desc GracePeriodEnabled *prometheus.Desc GracePeriodTimeout *prometheus.Desc GroupDependencyTimeout *prometheus.Desc HangRecoveryAction *prometheus.Desc IgnorePersistentStateOnStartup *prometheus.Desc LogResourceControls *prometheus.Desc LowerQuorumPriorityNodeId *prometheus.Desc MaxNumberOfNodes *prometheus.Desc MessageBufferLength *prometheus.Desc MinimumNeverPreemptPriority *prometheus.Desc MinimumPreemptorPriority *prometheus.Desc NetftIPSecEnabled *prometheus.Desc PlacementOptions *prometheus.Desc PlumbAllCrossSubnetRoutes *prometheus.Desc PreventQuorum *prometheus.Desc QuarantineDuration *prometheus.Desc QuarantineThreshold *prometheus.Desc QuorumArbitrationTimeMax *prometheus.Desc QuorumArbitrationTimeMin *prometheus.Desc QuorumLogFileSize *prometheus.Desc QuorumTypeValue *prometheus.Desc RequestReplyTimeout *prometheus.Desc ResiliencyDefaultPeriod *prometheus.Desc ResiliencyLevel *prometheus.Desc ResourceDllDeadlockPeriod *prometheus.Desc RootMemoryReserved *prometheus.Desc RouteHistoryLength *prometheus.Desc S2DBusTypes *prometheus.Desc S2DCacheDesiredState *prometheus.Desc S2DCacheFlashReservePercent *prometheus.Desc S2DCachePageSizeKBytes *prometheus.Desc S2DEnabled *prometheus.Desc S2DIOLatencyThreshold *prometheus.Desc S2DOptimizations *prometheus.Desc SameSubnetDelay *prometheus.Desc SameSubnetThreshold *prometheus.Desc SecurityLevel *prometheus.Desc SecurityLevelForStorage *prometheus.Desc SharedVolumeVssWriterOperationTimeout *prometheus.Desc ShutdownTimeoutInMinutes *prometheus.Desc UseClientAccessNetworksForSharedVolumes *prometheus.Desc WitnessDatabaseWriteTimeout *prometheus.Desc WitnessDynamicWeight *prometheus.Desc WitnessRestartInterval *prometheus.Desc } func newMSCluster_ClusterCollector() (Collector, error) { const subsystem = "mscluster_cluster" return &MSCluster_ClusterCollector{ AddEvictDelay: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "add_evict_delay"), "Provides access to the cluster's AddEvictDelay property, which is the number a seconds that a new node is delayed after an eviction of another node.", []string{"name"}, nil, ), AdminAccessPoint: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "admin_access_point"), "The type of the cluster administrative access point.", []string{"name"}, nil, ), AutoAssignNodeSite: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "auto_assign_node_site"), "Determines whether or not the cluster will attempt to automatically assign nodes to sites based on networks and Active Directory Site information.", []string{"name"}, nil, ), AutoBalancerLevel: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "auto_balancer_level"), "Determines the level of aggressiveness of AutoBalancer.", []string{"name"}, nil, ), AutoBalancerMode: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "auto_balancer_mode"), "Determines whether or not the auto balancer is enabled.", []string{"name"}, nil, ), BackupInProgress: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "backup_in_progress"), "Indicates whether a backup is in progress.", []string{"name"}, nil, ), BlockCacheSize: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "block_cache_size"), "CSV BlockCache Size in MB.", []string{"name"}, nil, ), ClusSvcHangTimeout: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "clus_svc_hang_timeout"), "Controls how long the cluster network driver waits between Failover Cluster Service heartbeats before it determines that the Failover Cluster Service has stopped responding.", []string{"name"}, nil, ), ClusSvcRegroupOpeningTimeout: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "clus_svc_regroup_opening_timeout"), "Controls how long a node will wait on other nodes in the opening stage before deciding that they failed.", []string{"name"}, nil, ), ClusSvcRegroupPruningTimeout: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "clus_svc_regroup_pruning_timeout"), "Controls how long the membership leader will wait to reach full connectivity between cluster nodes.", []string{"name"}, nil, ), ClusSvcRegroupStageTimeout: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "clus_svc_regroup_stage_timeout"), "Controls how long a node will wait on other nodes in a membership stage before deciding that they failed.", []string{"name"}, nil, ), ClusSvcRegroupTickInMilliseconds: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "clus_svc_regroup_tick_in_milliseconds"), "Controls how frequently the membership algorithm is sending periodic membership messages.", []string{"name"}, nil, ), ClusterEnforcedAntiAffinity: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "cluster_enforced_anti_affinity"), "Enables or disables hard enforcement of group anti-affinity classes.", []string{"name"}, nil, ), ClusterFunctionalLevel: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "cluster_functional_level"), "The functional level the cluster is currently running in.", []string{"name"}, nil, ), ClusterGroupWaitDelay: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "cluster_group_wait_delay"), "Maximum time in seconds that a group waits for its preferred node to come online during cluster startup before coming online on a different node.", []string{"name"}, nil, ), ClusterLogLevel: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "cluster_log_level"), "Controls the level of cluster logging.", []string{"name"}, nil, ), ClusterLogSize: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "cluster_log_size"), "Controls the maximum size of the cluster log files on each of the nodes.", []string{"name"}, nil, ), ClusterUpgradeVersion: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "cluster_upgrade_version"), "Specifies the upgrade version the cluster is currently running in.", []string{"name"}, nil, ), CrossSiteDelay: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "cross_site_delay"), "Controls how long the cluster network driver waits in milliseconds between sending Cluster Service heartbeats across sites.", []string{"name"}, nil, ), CrossSiteThreshold: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "cross_site_threshold"), "Controls how many Cluster Service heartbeats can be missed across sites before it determines that Cluster Service has stopped responding.", []string{"name"}, nil, ), CrossSubnetDelay: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "cross_subnet_delay"), "Controls how long the cluster network driver waits in milliseconds between sending Cluster Service heartbeats across subnets.", []string{"name"}, nil, ), CrossSubnetThreshold: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "cross_subnet_threshold"), "Controls how many Cluster Service heartbeats can be missed across subnets before it determines that Cluster Service has stopped responding.", []string{"name"}, nil, ), CsvBalancer: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "csv_balancer"), "Whether automatic balancing for CSV is enabled.", []string{"name"}, nil, ), DatabaseReadWriteMode: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "database_read_write_mode"), "Sets the database read and write mode.", []string{"name"}, nil, ), DefaultNetworkRole: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "default_network_role"), "Provides access to the cluster's DefaultNetworkRole property.", []string{"name"}, nil, ), DetectedCloudPlatform: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "detected_cloud_platform"), "(DetectedCloudPlatform)", []string{"name"}, nil, ), DetectManagedEvents: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "detect_managed_events"), "(DetectManagedEvents)", []string{"name"}, nil, ), DetectManagedEventsThreshold: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "detect_managed_events_threshold"), "(DetectManagedEventsThreshold)", []string{"name"}, nil, ), DisableGroupPreferredOwnerRandomization: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "disable_group_preferred_owner_randomization"), "(DisableGroupPreferredOwnerRandomization)", []string{"name"}, nil, ), DrainOnShutdown: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "drain_on_shutdown"), "Whether to drain the node when cluster service is being stopped.", []string{"name"}, nil, ), DynamicQuorumEnabled: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "dynamic_quorum_enabled"), "Allows cluster service to adjust node weights as needed to increase availability.", []string{"name"}, nil, ), EnableSharedVolumes: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "enable_shared_volumes"), "Enables or disables cluster shared volumes on this cluster.", []string{"name"}, nil, ), FixQuorum: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "fix_quorum"), "Provides access to the cluster's FixQuorum property, which specifies if the cluster is in a fix quorum state.", []string{"name"}, nil, ), GracePeriodEnabled: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "grace_period_enabled"), "Whether the node grace period feature of this cluster is enabled.", []string{"name"}, nil, ), GracePeriodTimeout: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "grace_period_timeout"), "The grace period timeout in milliseconds.", []string{"name"}, nil, ), GroupDependencyTimeout: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "group_dependency_timeout"), "The timeout after which a group will be brought online despite unsatisfied dependencies", []string{"name"}, nil, ), HangRecoveryAction: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "hang_recovery_action"), "Controls the action to take if the user-mode processes have stopped responding.", []string{"name"}, nil, ), IgnorePersistentStateOnStartup: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "ignore_persistent_state_on_startup"), "Provides access to the cluster's IgnorePersistentStateOnStartup property, which specifies whether the cluster will bring online groups that were online when the cluster was shut down.", []string{"name"}, nil, ), LogResourceControls: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "log_resource_controls"), "Controls the logging of resource controls.", []string{"name"}, nil, ), LowerQuorumPriorityNodeId: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "lower_quorum_priority_node_id"), "Specifies the Node ID that has a lower priority when voting for quorum is performed. If the quorum vote is split 50/50%, the specified node's vote would be ignored to break the tie. If this is not set then the cluster will pick a node at random to break the tie.", []string{"name"}, nil, ), MaxNumberOfNodes: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "max_number_of_nodes"), "Indicates the maximum number of nodes that may participate in the Cluster.", []string{"name"}, nil, ), MessageBufferLength: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "message_buffer_length"), "The maximum unacknowledged message count for GEM.", []string{"name"}, nil, ), MinimumNeverPreemptPriority: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "minimum_never_preempt_priority"), "Groups with this priority or higher cannot be preempted.", []string{"name"}, nil, ), MinimumPreemptorPriority: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "minimum_preemptor_priority"), "Minimum priority a cluster group must have to be able to preempt another group.", []string{"name"}, nil, ), NetftIPSecEnabled: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "netft_ip_sec_enabled"), "Whether IPSec is enabled for cluster internal traffic.", []string{"name"}, nil, ), PlacementOptions: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "placement_options"), "Various option flags to modify default placement behavior.", []string{"name"}, nil, ), PlumbAllCrossSubnetRoutes: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "plumb_all_cross_subnet_routes"), "Plumbs all possible cross subnet routes to all nodes.", []string{"name"}, nil, ), PreventQuorum: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "prevent_quorum"), "Whether the cluster will ignore group persistent state on startup.", []string{"name"}, nil, ), QuarantineDuration: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "quarantine_duration"), "The quarantine period timeout in milliseconds.", []string{"name"}, nil, ), QuarantineThreshold: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "quarantine_threshold"), "Number of node failures before it will be quarantined.", []string{"name"}, nil, ), QuorumArbitrationTimeMax: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "quorum_arbitration_time_max"), "Controls the maximum time necessary to decide the Quorum owner node.", []string{"name"}, nil, ), QuorumArbitrationTimeMin: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "quorum_arbitration_time_min"), "Controls the minimum time necessary to decide the Quorum owner node.", []string{"name"}, nil, ), QuorumLogFileSize: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "quorum_log_file_size"), "This property is obsolete.", []string{"name"}, nil, ), QuorumTypeValue: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "quorum_type_value"), "Get the current quorum type value. -1: Unknown; 1: Node; 2: FileShareWitness; 3: Storage; 4: None", []string{"name"}, nil, ), RequestReplyTimeout: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "request_reply_timeout"), "Controls the request reply time-out period.", []string{"name"}, nil, ), ResiliencyDefaultPeriod: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "resiliency_default_period"), "The default resiliency period, in seconds, for the cluster.", []string{"name"}, nil, ), ResiliencyLevel: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "resiliency_level"), "The resiliency level for the cluster.", []string{"name"}, nil, ), ResourceDllDeadlockPeriod: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "resource_dll_deadlock_period"), "This property is obsolete.", []string{"name"}, nil, ), RootMemoryReserved: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "root_memory_reserved"), "Controls the amount of memory reserved for the parent partition on all cluster nodes.", []string{"name"}, nil, ), RouteHistoryLength: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "route_history_length"), "The history length for routes to help finding network issues.", []string{"name"}, nil, ), S2DBusTypes: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "s2d_bus_types"), "Bus types for storage spaces direct.", []string{"name"}, nil, ), S2DCacheDesiredState: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "s2d_cache_desired_state"), "Desired state of the storage spaces direct cache.", []string{"name"}, nil, ), S2DCacheFlashReservePercent: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "s2d_cache_flash_reserve_percent"), "Percentage of allocated flash space to utilize when caching.", []string{"name"}, nil, ), S2DCachePageSizeKBytes: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "s2d_cache_page_size_k_bytes"), "Page size in KB used by S2D cache.", []string{"name"}, nil, ), S2DEnabled: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "s2d_enabled"), "Whether direct attached storage (DAS) is enabled.", []string{"name"}, nil, ), S2DIOLatencyThreshold: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "s2dio_latency_threshold"), "The I/O latency threshold for storage spaces direct.", []string{"name"}, nil, ), S2DOptimizations: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "s2d_optimizations"), "Optimization flags for storage spaces direct.", []string{"name"}, nil, ), SameSubnetDelay: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "same_subnet_delay"), "Controls how long the cluster network driver waits in milliseconds between sending Cluster Service heartbeats on the same subnet.", []string{"name"}, nil, ), SameSubnetThreshold: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "same_subnet_threshold"), "Controls how many Cluster Service heartbeats can be missed on the same subnet before it determines that Cluster Service has stopped responding.", []string{"name"}, nil, ), SecurityLevel: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "security_level"), "Controls the level of security that should apply to intracluster messages. 0: Clear Text; 1: Sign; 2: Encrypt ", []string{"name"}, nil, ), SecurityLevelForStorage: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "security_level_for_storage"), "(SecurityLevelForStorage)", []string{"name"}, nil, ), SharedVolumeVssWriterOperationTimeout: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "shared_volume_vss_writer_operation_timeout"), "CSV VSS Writer operation timeout in seconds.", []string{"name"}, nil, ), ShutdownTimeoutInMinutes: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "shutdown_timeout_in_minutes"), "The maximum time in minutes allowed for cluster resources to come offline during cluster service shutdown.", []string{"name"}, nil, ), UseClientAccessNetworksForSharedVolumes: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "use_client_access_networks_for_shared_volumes"), "Whether the use of client access networks for cluster shared volumes feature of this cluster is enabled. 0: Disabled; 1: Enabled; 2: Auto", []string{"name"}, nil, ), WitnessDatabaseWriteTimeout: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "witness_database_write_timeout"), "Controls the maximum time in seconds that a cluster database write to a witness can take before the write is abandoned.", []string{"name"}, nil, ), WitnessDynamicWeight: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "witness_dynamic_weight"), "The weight of the configured witness.", []string{"name"}, nil, ), WitnessRestartInterval: prometheus.NewDesc( prometheus.BuildFQName(Namespace, subsystem, "witness_restart_interval"), "Controls the witness restart interval.", []string{"name"}, nil, ), }, nil } // MSCluster_Cluster docs: // - https://docs.microsoft.com/en-us/previous-versions/windows/desktop/cluswmi/mscluster-cluster type MSCluster_Cluster struct { Name string AddEvictDelay uint AdminAccessPoint uint AutoAssignNodeSite uint AutoBalancerLevel uint AutoBalancerMode uint BackupInProgress uint BlockCacheSize uint ClusSvcHangTimeout uint ClusSvcRegroupOpeningTimeout uint ClusSvcRegroupPruningTimeout uint ClusSvcRegroupStageTimeout uint ClusSvcRegroupTickInMilliseconds uint ClusterEnforcedAntiAffinity uint ClusterFunctionalLevel uint ClusterGroupWaitDelay uint ClusterLogLevel uint ClusterLogSize uint ClusterUpgradeVersion uint CrossSiteDelay uint CrossSiteThreshold uint CrossSubnetDelay uint CrossSubnetThreshold uint CsvBalancer uint DatabaseReadWriteMode uint DefaultNetworkRole uint DetectedCloudPlatform uint DetectManagedEvents uint DetectManagedEventsThreshold uint DisableGroupPreferredOwnerRandomization uint DrainOnShutdown uint DynamicQuorumEnabled uint EnableSharedVolumes uint FixQuorum uint GracePeriodEnabled uint GracePeriodTimeout uint GroupDependencyTimeout uint HangRecoveryAction uint IgnorePersistentStateOnStartup uint LogResourceControls uint LowerQuorumPriorityNodeId uint MaxNumberOfNodes uint MessageBufferLength uint MinimumNeverPreemptPriority uint MinimumPreemptorPriority uint NetftIPSecEnabled uint PlacementOptions uint PlumbAllCrossSubnetRoutes uint PreventQuorum uint QuarantineDuration uint QuarantineThreshold uint QuorumArbitrationTimeMax uint QuorumArbitrationTimeMin uint QuorumLogFileSize uint QuorumTypeValue uint RequestReplyTimeout uint ResiliencyDefaultPeriod uint ResiliencyLevel uint ResourceDllDeadlockPeriod uint RootMemoryReserved uint RouteHistoryLength uint S2DBusTypes uint S2DCacheDesiredState uint S2DCacheFlashReservePercent uint S2DCachePageSizeKBytes uint S2DEnabled uint S2DIOLatencyThreshold uint S2DOptimizations uint SameSubnetDelay uint SameSubnetThreshold uint SecurityLevel uint SecurityLevelForStorage uint SharedVolumeVssWriterOperationTimeout uint ShutdownTimeoutInMinutes uint UseClientAccessNetworksForSharedVolumes uint WitnessDatabaseWriteTimeout uint WitnessDynamicWeight uint WitnessRestartInterval uint } // Collect sends the metric values for each metric // to the provided prometheus Metric channel. func (c *MSCluster_ClusterCollector) Collect(ctx *ScrapeContext, ch chan<- prometheus.Metric) error { var dst []MSCluster_Cluster q := queryAll(&dst) if err := wmi.QueryNamespace(q, &dst, "root/MSCluster"); err != nil { return err } for _, v := range dst { ch <- prometheus.MustNewConstMetric( c.AddEvictDelay, prometheus.GaugeValue, float64(v.AddEvictDelay), v.Name, ) ch <- prometheus.MustNewConstMetric( c.AdminAccessPoint, prometheus.GaugeValue, float64(v.AdminAccessPoint), v.Name, ) ch <- prometheus.MustNewConstMetric( c.AutoAssignNodeSite, prometheus.GaugeValue, float64(v.AutoAssignNodeSite), v.Name, ) ch <- prometheus.MustNewConstMetric( c.AutoBalancerLevel, prometheus.GaugeValue, float64(v.AutoBalancerLevel), v.Name, ) ch <- prometheus.MustNewConstMetric( c.AutoBalancerMode, prometheus.GaugeValue, float64(v.AutoBalancerMode), v.Name, ) ch <- prometheus.MustNewConstMetric( c.BackupInProgress, prometheus.GaugeValue, float64(v.BackupInProgress), v.Name, ) ch <- prometheus.MustNewConstMetric( c.BlockCacheSize, prometheus.GaugeValue, float64(v.BlockCacheSize), v.Name, ) ch <- prometheus.MustNewConstMetric( c.ClusSvcHangTimeout, prometheus.GaugeValue, float64(v.ClusSvcHangTimeout), v.Name, ) ch <- prometheus.MustNewConstMetric( c.ClusSvcRegroupOpeningTimeout, prometheus.GaugeValue, float64(v.ClusSvcRegroupOpeningTimeout), v.Name, ) ch <- prometheus.MustNewConstMetric( c.ClusSvcRegroupPruningTimeout, prometheus.GaugeValue, float64(v.ClusSvcRegroupPruningTimeout), v.Name, ) ch <- prometheus.MustNewConstMetric( c.ClusSvcRegroupStageTimeout, prometheus.GaugeValue, float64(v.ClusSvcRegroupStageTimeout), v.Name, ) ch <- prometheus.MustNewConstMetric( c.ClusSvcRegroupTickInMilliseconds, prometheus.GaugeValue, float64(v.ClusSvcRegroupTickInMilliseconds), v.Name, ) ch <- prometheus.MustNewConstMetric( c.ClusterEnforcedAntiAffinity, prometheus.GaugeValue, float64(v.ClusterEnforcedAntiAffinity), v.Name, ) ch <- prometheus.MustNewConstMetric( c.ClusterFunctionalLevel, prometheus.GaugeValue, float64(v.ClusterFunctionalLevel), v.Name, ) ch <- prometheus.MustNewConstMetric( c.ClusterGroupWaitDelay, prometheus.GaugeValue, float64(v.ClusterGroupWaitDelay), v.Name, ) ch <- prometheus.MustNewConstMetric( c.ClusterLogLevel, prometheus.GaugeValue, float64(v.ClusterLogLevel), v.Name, ) ch <- prometheus.MustNewConstMetric( c.ClusterLogSize, prometheus.GaugeValue, float64(v.ClusterLogSize), v.Name, ) ch <- prometheus.MustNewConstMetric( c.ClusterUpgradeVersion, prometheus.GaugeValue, float64(v.ClusterUpgradeVersion), v.Name, ) ch <- prometheus.MustNewConstMetric( c.CrossSiteDelay, prometheus.GaugeValue, float64(v.CrossSiteDelay), v.Name, ) ch <- prometheus.MustNewConstMetric( c.CrossSiteThreshold, prometheus.GaugeValue, float64(v.CrossSiteThreshold), v.Name, ) ch <- prometheus.MustNewConstMetric( c.CrossSubnetDelay, prometheus.GaugeValue, float64(v.CrossSubnetDelay), v.Name, ) ch <- prometheus.MustNewConstMetric( c.CrossSubnetThreshold, prometheus.GaugeValue, float64(v.CrossSubnetThreshold), v.Name, ) ch <- prometheus.MustNewConstMetric( c.CsvBalancer, prometheus.GaugeValue, float64(v.CsvBalancer), v.Name, ) ch <- prometheus.MustNewConstMetric( c.DatabaseReadWriteMode, prometheus.GaugeValue, float64(v.DatabaseReadWriteMode), v.Name, ) ch <- prometheus.MustNewConstMetric( c.DefaultNetworkRole, prometheus.GaugeValue, float64(v.DefaultNetworkRole), v.Name, ) ch <- prometheus.MustNewConstMetric( c.DetectedCloudPlatform, prometheus.GaugeValue, float64(v.DetectedCloudPlatform), v.Name, ) ch <- prometheus.MustNewConstMetric( c.DetectManagedEvents, prometheus.GaugeValue, float64(v.DetectManagedEvents), v.Name, ) ch <- prometheus.MustNewConstMetric( c.DetectManagedEventsThreshold, prometheus.GaugeValue, float64(v.DetectManagedEventsThreshold), v.Name, ) ch <- prometheus.MustNewConstMetric( c.DisableGroupPreferredOwnerRandomization, prometheus.GaugeValue, float64(v.DisableGroupPreferredOwnerRandomization), v.Name, ) ch <- prometheus.MustNewConstMetric( c.DrainOnShutdown, prometheus.GaugeValue, float64(v.DrainOnShutdown), v.Name, ) ch <- prometheus.MustNewConstMetric( c.DynamicQuorumEnabled, prometheus.GaugeValue, float64(v.DynamicQuorumEnabled), v.Name, ) ch <- prometheus.MustNewConstMetric( c.EnableSharedVolumes, prometheus.GaugeValue, float64(v.EnableSharedVolumes), v.Name, ) ch <- prometheus.MustNewConstMetric( c.FixQuorum, prometheus.GaugeValue, float64(v.FixQuorum), v.Name, ) ch <- prometheus.MustNewConstMetric( c.GracePeriodEnabled, prometheus.GaugeValue, float64(v.GracePeriodEnabled), v.Name, ) ch <- prometheus.MustNewConstMetric( c.GracePeriodTimeout, prometheus.GaugeValue, float64(v.GracePeriodTimeout), v.Name, ) ch <- prometheus.MustNewConstMetric( c.GroupDependencyTimeout, prometheus.GaugeValue, float64(v.GroupDependencyTimeout), v.Name, ) ch <- prometheus.MustNewConstMetric( c.HangRecoveryAction, prometheus.GaugeValue, float64(v.HangRecoveryAction), v.Name, ) ch <- prometheus.MustNewConstMetric( c.IgnorePersistentStateOnStartup, prometheus.GaugeValue, float64(v.IgnorePersistentStateOnStartup), v.Name, ) ch <- prometheus.MustNewConstMetric( c.LogResourceControls, prometheus.GaugeValue, float64(v.LogResourceControls), v.Name, ) ch <- prometheus.MustNewConstMetric( c.LowerQuorumPriorityNodeId, prometheus.GaugeValue, float64(v.LowerQuorumPriorityNodeId), v.Name, ) ch <- prometheus.MustNewConstMetric( c.MaxNumberOfNodes, prometheus.GaugeValue, float64(v.MaxNumberOfNodes), v.Name, ) ch <- prometheus.MustNewConstMetric( c.MessageBufferLength, prometheus.GaugeValue, float64(v.MessageBufferLength), v.Name, ) ch <- prometheus.MustNewConstMetric( c.MinimumNeverPreemptPriority, prometheus.GaugeValue, float64(v.MinimumNeverPreemptPriority), v.Name, ) ch <- prometheus.MustNewConstMetric( c.MinimumPreemptorPriority, prometheus.GaugeValue, float64(v.MinimumPreemptorPriority), v.Name, ) ch <- prometheus.MustNewConstMetric( c.NetftIPSecEnabled, prometheus.GaugeValue, float64(v.NetftIPSecEnabled), v.Name, ) ch <- prometheus.MustNewConstMetric( c.PlacementOptions, prometheus.GaugeValue, float64(v.PlacementOptions), v.Name, ) ch <- prometheus.MustNewConstMetric( c.PlumbAllCrossSubnetRoutes, prometheus.GaugeValue, float64(v.PlumbAllCrossSubnetRoutes), v.Name, ) ch <- prometheus.MustNewConstMetric( c.PreventQuorum, prometheus.GaugeValue, float64(v.PreventQuorum), v.Name, ) ch <- prometheus.MustNewConstMetric( c.QuarantineDuration, prometheus.GaugeValue, float64(v.QuarantineDuration), v.Name, ) ch <- prometheus.MustNewConstMetric( c.QuarantineThreshold, prometheus.GaugeValue, float64(v.QuarantineThreshold), v.Name, ) ch <- prometheus.MustNewConstMetric( c.QuorumArbitrationTimeMax, prometheus.GaugeValue, float64(v.QuorumArbitrationTimeMax), v.Name, ) ch <- prometheus.MustNewConstMetric( c.QuorumArbitrationTimeMin, prometheus.GaugeValue, float64(v.QuorumArbitrationTimeMin), v.Name, ) ch <- prometheus.MustNewConstMetric( c.QuorumLogFileSize, prometheus.GaugeValue, float64(v.QuorumLogFileSize), v.Name, ) ch <- prometheus.MustNewConstMetric( c.QuorumTypeValue, prometheus.GaugeValue, float64(v.QuorumTypeValue), v.Name, ) ch <- prometheus.MustNewConstMetric( c.RequestReplyTimeout, prometheus.GaugeValue, float64(v.RequestReplyTimeout), v.Name, ) ch <- prometheus.MustNewConstMetric( c.ResiliencyDefaultPeriod, prometheus.GaugeValue, float64(v.ResiliencyDefaultPeriod), v.Name, ) ch <- prometheus.MustNewConstMetric( c.ResiliencyLevel, prometheus.GaugeValue, float64(v.ResiliencyLevel), v.Name, ) ch <- prometheus.MustNewConstMetric( c.ResourceDllDeadlockPeriod, prometheus.GaugeValue, float64(v.ResourceDllDeadlockPeriod), v.Name, ) ch <- prometheus.MustNewConstMetric( c.RootMemoryReserved, prometheus.GaugeValue, float64(v.RootMemoryReserved), v.Name, ) ch <- prometheus.MustNewConstMetric( c.RouteHistoryLength, prometheus.GaugeValue, float64(v.RouteHistoryLength), v.Name, ) ch <- prometheus.MustNewConstMetric( c.S2DBusTypes, prometheus.GaugeValue, float64(v.S2DBusTypes), v.Name, ) ch <- prometheus.MustNewConstMetric( c.S2DCacheDesiredState, prometheus.GaugeValue, float64(v.S2DCacheDesiredState), v.Name, ) ch <- prometheus.MustNewConstMetric( c.S2DCacheFlashReservePercent, prometheus.GaugeValue, float64(v.S2DCacheFlashReservePercent), v.Name, ) ch <- prometheus.MustNewConstMetric( c.S2DCachePageSizeKBytes, prometheus.GaugeValue, float64(v.S2DCachePageSizeKBytes), v.Name, ) ch <- prometheus.MustNewConstMetric( c.S2DEnabled, prometheus.GaugeValue, float64(v.S2DEnabled), v.Name, ) ch <- prometheus.MustNewConstMetric( c.S2DIOLatencyThreshold, prometheus.GaugeValue, float64(v.S2DIOLatencyThreshold), v.Name, ) ch <- prometheus.MustNewConstMetric( c.S2DOptimizations, prometheus.GaugeValue, float64(v.S2DOptimizations), v.Name, ) ch <- prometheus.MustNewConstMetric( c.SameSubnetDelay, prometheus.GaugeValue, float64(v.SameSubnetDelay), v.Name, ) ch <- prometheus.MustNewConstMetric( c.SameSubnetThreshold, prometheus.GaugeValue, float64(v.SameSubnetThreshold), v.Name, ) ch <- prometheus.MustNewConstMetric( c.SecurityLevel, prometheus.GaugeValue, float64(v.SecurityLevel), v.Name, ) ch <- prometheus.MustNewConstMetric( c.SecurityLevelForStorage, prometheus.GaugeValue, float64(v.SecurityLevelForStorage), v.Name, ) ch <- prometheus.MustNewConstMetric( c.SharedVolumeVssWriterOperationTimeout, prometheus.GaugeValue, float64(v.SharedVolumeVssWriterOperationTimeout), v.Name, ) ch <- prometheus.MustNewConstMetric( c.ShutdownTimeoutInMinutes, prometheus.GaugeValue, float64(v.ShutdownTimeoutInMinutes), v.Name, ) ch <- prometheus.MustNewConstMetric( c.UseClientAccessNetworksForSharedVolumes, prometheus.GaugeValue, float64(v.UseClientAccessNetworksForSharedVolumes), v.Name, ) ch <- prometheus.MustNewConstMetric( c.WitnessDatabaseWriteTimeout, prometheus.GaugeValue, float64(v.WitnessDatabaseWriteTimeout), v.Name, ) ch <- prometheus.MustNewConstMetric( c.WitnessDynamicWeight, prometheus.GaugeValue, float64(v.WitnessDynamicWeight), v.Name, ) ch <- prometheus.MustNewConstMetric( c.WitnessRestartInterval, prometheus.GaugeValue, float64(v.WitnessRestartInterval), v.Name, ) } return nil }