master
go 63 lines 3.03 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 package vsphere
4
5 import (
6 "github.com/netdata/netdata/go/plugins/pkg/metrix"
7 rs "github.com/netdata/netdata/go/plugins/plugin/go.d/collector/vsphere/resources"
8 "github.com/netdata/netdata/go/plugins/plugin/go.d/pkg/oldmetrix"
9 )
10
11 const (
12 datastoreClusterSpaceUsageCapacityMetric = "datastore_cluster_space_usage_capacity"
13 datastoreClusterSpaceUsageFreeMetric = "datastore_cluster_space_usage_free"
14 datastoreClusterSpaceUsageUsedMetric = "datastore_cluster_space_usage_used"
15 datastoreClusterSpaceUtilizationUsedMetric = "datastore_cluster_space_utilization_used"
16 datastoreClusterStorageDRSEnabledMetric = "datastore_cluster_storage_drs_status_enabled"
17 datastoreClusterStorageDRSDisabledMetric = "datastore_cluster_storage_drs_status_disabled"
18 datastoreClusterOverallStatusGreenMetric = "datastore_cluster_overall_status_green"
19 datastoreClusterOverallStatusRedMetric = "datastore_cluster_overall_status_red"
20 datastoreClusterOverallStatusYellowMetric = "datastore_cluster_overall_status_yellow"
21 datastoreClusterOverallStatusGrayMetric = "datastore_cluster_overall_status_gray"
22 datastoreClusterNameLabel = "datastore_cluster"
23 )
24
25 func (c *Collector) writeDatastoreClusterMetrics() {
26 if !c.CollectDatastoreClusters || c.resources == nil {
27 return
28 }
29
30 for _, pod := range sortedStoragePods(c.resources.StoragePods) {
31 labels := c.labelSet(c.datastoreClusterLabels(pod))
32 c.observeGauge(datastoreClusterSpaceUsageCapacityMetric, pod.Capacity, labels)
33 c.observeGauge(datastoreClusterSpaceUsageFreeMetric, pod.FreeSpace, labels)
34 used := max(pod.Capacity-pod.FreeSpace, 0)
35 c.observeGauge(datastoreClusterSpaceUsageUsedMetric, used, labels)
36 if pod.Capacity > 0 {
37 c.observeGauge(datastoreClusterSpaceUtilizationUsedMetric, int64(float64(used)/float64(pod.Capacity)*scaledPercent), labels)
38 } else {
39 c.observeGauge(datastoreClusterSpaceUtilizationUsedMetric, 0, labels)
40 }
41 c.observeGauge(datastoreClusterStorageDRSEnabledMetric, oldmetrix.Bool(pod.StorageDRSEnabled != nil && *pod.StorageDRSEnabled), labels)
42 c.observeGauge(datastoreClusterStorageDRSDisabledMetric, oldmetrix.Bool(pod.StorageDRSEnabled != nil && !*pod.StorageDRSEnabled), labels)
43 status := pod.OverallStatus
44 if status == "" {
45 status = "gray"
46 }
47 c.observeGauge(datastoreClusterOverallStatusGreenMetric, oldmetrix.Bool(status == "green"), labels)
48 c.observeGauge(datastoreClusterOverallStatusRedMetric, oldmetrix.Bool(status == "red"), labels)
49 c.observeGauge(datastoreClusterOverallStatusYellowMetric, oldmetrix.Bool(status == "yellow"), labels)
50 c.observeGauge(datastoreClusterOverallStatusGrayMetric, oldmetrix.Bool(status == "gray"), labels)
51 }
52 }
53
54 func (c *Collector) datastoreClusterLabels(pod *rs.StoragePod) []metrix.Label {
55 return c.v2MetricLabels(pod.ID, datastoreClusterLabels(pod), pod.Labels)
56 }
57
58 func datastoreClusterLabels(pod *rs.StoragePod) []metrix.Label {
59 return []metrix.Label{
60 {Key: "datacenter", Value: pod.Hier.DC.Name},
61 {Key: datastoreClusterNameLabel, Value: pod.Name},
62 }
63 }