/
metricDatastore.go
111 lines (98 loc) · 4.07 KB
/
metricDatastore.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
package application
import (
"strconv"
"github.com/Sirupsen/logrus"
)
type MetricDatastore struct {
DatastoreID string
DatastoreType string
DatastoreName string
DatastoreVirtualName string
DatastoreCapacity int64
DatastoreNumMirrors int
DatastoreCreationTime int64
DatastoreFreeCapacity int64
DatastoreUnsharedBytes int64
DatastoreUncompressedBytes int64
DatastoreVirtualMountSummary bool
DatastoreVirtualAccessibleSummary bool
DatastoreReplicationDatastorePaired bool
}
type MetricDatastores struct {
DS *[]MetricDatastore
DatastoreCount int
TotalCapacity int64
TotalFreeCapacuty int64
TotalMounted int
TotalAccessible int
TotalReplicated int
}
func (a *Application) metricGetDatastores() *MetricDatastores {
err := a.HX.ClusterDatastores()
if err != nil {
a.Logger.Debug("We were unable to collect the Datastore information from HX Connect API.")
a.LastError = err
return &MetricDatastores{}
}
if a.HX.GetResponseOK() {
if a.HX.GetResponseCode() == 200 {
a.Logger.Debug("Querying HX Connect for Datastore information.")
var metric MetricDatastores
var dss []MetricDatastore
metric.DatastoreCount = a.HX.GetResponseItemInt("#")
for i := 0; i < metric.DatastoreCount; i++ {
var ds MetricDatastore
ds.DatastoreID = a.HX.GetResponseItemString(strconv.Itoa(i) + ".stPlatDatastore.entityRef.id")
ds.DatastoreType = a.HX.GetResponseItemString(strconv.Itoa(i) + ".stPlatDatastore.entityRef.type")
ds.DatastoreName = a.HX.GetResponseItemString(strconv.Itoa(i) + ".stPlatDatastore.entityRef.name")
ds.DatastoreVirtualName = a.HX.GetResponseItemString(strconv.Itoa(i) + ".stPlatDatastore.virtDatastore.id")
ds.DatastoreCapacity = a.HX.GetResponseItemInt64(strconv.Itoa(i) + ".stPlatDatastore.config.capacity")
ds.DatastoreNumMirrors = a.HX.GetResponseItemInt(strconv.Itoa(i) + ".stPlatDatastore.config.numMirrors")
ds.DatastoreCreationTime = a.HX.GetResponseItemInt64(strconv.Itoa(i) + ".stPlatDatastore.creationTime")
ds.DatastoreFreeCapacity = a.HX.GetResponseItemInt64(strconv.Itoa(i) + ".stPlatDatastore.freeCapacity")
ds.DatastoreUnsharedBytes = a.HX.GetResponseItemInt64(strconv.Itoa(i) + ".stPlatDatastore.unsharedUsedBytes")
ds.DatastoreUncompressedBytes = a.HX.GetResponseItemInt64(strconv.Itoa(i) + ".stPlatDatastore.unCompressedUsedBytes")
ds.DatastoreVirtualMountSummary = getDatastoreMountSummary(a.HX.GetResponseItemString(strconv.Itoa(i) + ".virtDatastore.mountSummary"))
ds.DatastoreVirtualAccessibleSummary = getDatastoreAccessible(a.HX.GetResponseItemString(strconv.Itoa(i) + ".virtDatastore.accessibilitySummary"))
ds.DatastoreReplicationDatastorePaired = getDatastoreReplication(a.HX.GetResponseItemString(strconv.Itoa(i) + ".replDatastore.paired"))
dss = append(dss, ds)
metric.TotalCapacity += ds.DatastoreCapacity
metric.TotalFreeCapacuty += ds.DatastoreFreeCapacity
if ds.DatastoreVirtualMountSummary {
metric.TotalMounted++
}
if ds.DatastoreVirtualAccessibleSummary {
metric.TotalAccessible++
}
if ds.DatastoreReplicationDatastorePaired {
metric.TotalReplicated++
}
}
metric.DS = &dss
a.Logger.WithFields(logrus.Fields{}).Debug("Querying HX Connect for Datastore information complete.")
return &metric
}
a.Logger.WithFields(logrus.Fields{"ResponseCode": a.HX.GetResponseCode()}).Warning("An unexpected response code was received for Datastore information.")
} else {
a.Logger.WithFields(logrus.Fields{"ResponseOK": false}).Warning("We received a failed attempt at connecting to the Datastore endpoint.")
}
return &MetricDatastores{}
}
func getDatastoreReplication(state string) bool {
if state == "true" {
return true
}
return false
}
func getDatastoreMountSummary(state string) bool {
if state == "MOUNTED" {
return true
}
return false
}
func getDatastoreAccessible(state string) bool {
if state == "ACCESSIBLE" {
return true
}
return false
}