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  }