summaryrefslogtreecommitdiffstats
path: root/src/go/collectors/go.d.plugin/modules/vsphere/discover/hierarchy.go
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/go/collectors/go.d.plugin/modules/vsphere/discover/hierarchy.go100
1 files changed, 100 insertions, 0 deletions
diff --git a/src/go/collectors/go.d.plugin/modules/vsphere/discover/hierarchy.go b/src/go/collectors/go.d.plugin/modules/vsphere/discover/hierarchy.go
new file mode 100644
index 000000000..4cea75dcd
--- /dev/null
+++ b/src/go/collectors/go.d.plugin/modules/vsphere/discover/hierarchy.go
@@ -0,0 +1,100 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+package discover
+
+import (
+ "time"
+
+ rs "github.com/netdata/netdata/go/go.d.plugin/modules/vsphere/resources"
+)
+
+func (d Discoverer) setHierarchy(res *rs.Resources) error {
+ d.Debug("discovering : hierarchy : start setting resources hierarchy process")
+ t := time.Now()
+
+ c := d.setClustersHierarchy(res)
+ h := d.setHostsHierarchy(res)
+ v := d.setVMsHierarchy(res)
+
+ // notSet := len(res.Clusters) + len(res.Hosts) + len(res.VMs) - (c + h + v)
+ d.Infof("discovering : hierarchy : set %d/%d clusters, %d/%d hosts, %d/%d vms, process took %s",
+ c, len(res.Clusters),
+ h, len(res.Hosts),
+ v, len(res.VMs),
+ time.Since(t),
+ )
+
+ return nil
+}
+
+func (d Discoverer) setClustersHierarchy(res *rs.Resources) (set int) {
+ for _, cluster := range res.Clusters {
+ if setClusterHierarchy(cluster, res) {
+ set++
+ }
+ }
+ return set
+}
+
+func (d Discoverer) setHostsHierarchy(res *rs.Resources) (set int) {
+ for _, host := range res.Hosts {
+ if setHostHierarchy(host, res) {
+ set++
+ }
+ }
+ return set
+}
+
+func (d Discoverer) setVMsHierarchy(res *rs.Resources) (set int) {
+ for _, vm := range res.VMs {
+ if setVMHierarchy(vm, res) {
+ set++
+ }
+ }
+ return set
+}
+
+func setClusterHierarchy(cluster *rs.Cluster, res *rs.Resources) bool {
+ dc := res.DataCenters.Get(cluster.ParentID)
+ if dc == nil {
+ return false
+ }
+ cluster.Hier.DC.Set(dc.ID, dc.Name)
+ return cluster.Hier.IsSet()
+}
+
+func setHostHierarchy(host *rs.Host, res *rs.Resources) bool {
+ cr := res.Clusters.Get(host.ParentID)
+ if cr == nil {
+ return false
+ }
+ host.Hier.Cluster.Set(cr.ID, cr.Name)
+
+ dc := res.DataCenters.Get(cr.ParentID)
+ if dc == nil {
+ return false
+ }
+ host.Hier.DC.Set(dc.ID, dc.Name)
+ return host.Hier.IsSet()
+}
+
+func setVMHierarchy(vm *rs.VM, res *rs.Resources) bool {
+ h := res.Hosts.Get(vm.ParentID)
+ if h == nil {
+ return false
+ }
+ vm.Hier.Host.Set(h.ID, h.Name)
+
+ cr := res.Clusters.Get(h.ParentID)
+ if cr == nil {
+ return false
+ }
+ vm.Hier.Cluster.Set(cr.ID, cr.Name)
+
+ dc := res.DataCenters.Get(cr.ParentID)
+ if dc == nil {
+ return false
+ }
+ vm.Hier.DC.Set(dc.ID, dc.Name)
+ return vm.Hier.IsSet()
+}