github.com/netdata/go.d.plugin@v0.58.1/modules/vsphere/discover/hierarchy.go (about) 1 // SPDX-License-Identifier: GPL-3.0-or-later 2 3 package discover 4 5 import ( 6 "time" 7 8 rs "github.com/netdata/go.d.plugin/modules/vsphere/resources" 9 ) 10 11 func (d Discoverer) setHierarchy(res *rs.Resources) error { 12 d.Debug("discovering : hierarchy : start setting resources hierarchy process") 13 t := time.Now() 14 15 c := d.setClustersHierarchy(res) 16 h := d.setHostsHierarchy(res) 17 v := d.setVMsHierarchy(res) 18 19 // notSet := len(res.Clusters) + len(res.Hosts) + len(res.VMs) - (c + h + v) 20 d.Infof("discovering : hierarchy : set %d/%d clusters, %d/%d hosts, %d/%d vms, process took %s", 21 c, len(res.Clusters), 22 h, len(res.Hosts), 23 v, len(res.VMs), 24 time.Since(t), 25 ) 26 27 return nil 28 } 29 30 func (d Discoverer) setClustersHierarchy(res *rs.Resources) (set int) { 31 for _, cluster := range res.Clusters { 32 if setClusterHierarchy(cluster, res) { 33 set++ 34 } 35 } 36 return set 37 } 38 39 func (d Discoverer) setHostsHierarchy(res *rs.Resources) (set int) { 40 for _, host := range res.Hosts { 41 if setHostHierarchy(host, res) { 42 set++ 43 } 44 } 45 return set 46 } 47 48 func (d Discoverer) setVMsHierarchy(res *rs.Resources) (set int) { 49 for _, vm := range res.VMs { 50 if setVMHierarchy(vm, res) { 51 set++ 52 } 53 } 54 return set 55 } 56 57 func setClusterHierarchy(cluster *rs.Cluster, res *rs.Resources) bool { 58 dc := res.DataCenters.Get(cluster.ParentID) 59 if dc == nil { 60 return false 61 } 62 cluster.Hier.DC.Set(dc.ID, dc.Name) 63 return cluster.Hier.IsSet() 64 } 65 66 func setHostHierarchy(host *rs.Host, res *rs.Resources) bool { 67 cr := res.Clusters.Get(host.ParentID) 68 if cr == nil { 69 return false 70 } 71 host.Hier.Cluster.Set(cr.ID, cr.Name) 72 73 dc := res.DataCenters.Get(cr.ParentID) 74 if dc == nil { 75 return false 76 } 77 host.Hier.DC.Set(dc.ID, dc.Name) 78 return host.Hier.IsSet() 79 } 80 81 func setVMHierarchy(vm *rs.VM, res *rs.Resources) bool { 82 h := res.Hosts.Get(vm.ParentID) 83 if h == nil { 84 return false 85 } 86 vm.Hier.Host.Set(h.ID, h.Name) 87 88 cr := res.Clusters.Get(h.ParentID) 89 if cr == nil { 90 return false 91 } 92 vm.Hier.Cluster.Set(cr.ID, cr.Name) 93 94 dc := res.DataCenters.Get(cr.ParentID) 95 if dc == nil { 96 return false 97 } 98 vm.Hier.DC.Set(dc.ID, dc.Name) 99 return vm.Hier.IsSet() 100 }