diff options
Diffstat (limited to 'src/go/collectors/go.d.plugin/modules/vsphere/discover/hierarchy.go')
-rw-r--r-- | src/go/collectors/go.d.plugin/modules/vsphere/discover/hierarchy.go | 100 |
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() +} |