firehol/netdata

View on GitHub
src/go/plugin/go.d/modules/vsphere/resources/resources.go

Summary

Maintainability
A
0 mins
Test Coverage
// SPDX-License-Identifier: GPL-3.0-or-later

package resources

import (
    "github.com/vmware/govmomi/performance"
    "github.com/vmware/govmomi/vim25/types"
)

/*

```
Virtual Datacenter Architecture Representation (partial).

<root>
+-DC0 # Virtual datacenter
   +-datastore # Datastore folder (created by system)
   | +-Datastore1
   |
   +-host # Host folder (created by system)
   | +-Folder1 # Host and Cluster folder
   | | +-NestedFolder1
   | | | +-Cluster1
   | | | | +-Host1
   | +-Cluster2
   | | +-Host2
   | | | +-VM1
   | | | +-VM2
   | | | +-hadoop1
   | +-Host3 # Dummy folder for non-clustered host (created by system)
   | | +-Host3
   | | | +-VM3
   | | | +-VM4
   | | |
   +-vm # VM folder (created by system)
   | +-VM1
   | +-VM2
   | +-Folder2 # VM and Template folder
   | | +-hadoop1
   | | +-NestedFolder1
   | | | +-VM3
   | | | +-VM4
```
*/

type Resources struct {
    DataCenters DataCenters
    Folders     Folders
    Clusters    Clusters
    Hosts       Hosts
    VMs         VMs
}

type (
    Datacenter struct {
        Name string
        ID   string
    }

    Folder struct {
        Name     string
        ID       string
        ParentID string
    }

    HierarchyValue struct {
        ID, Name string
    }

    ClusterHierarchy struct {
        DC HierarchyValue
    }
    Cluster struct {
        Name     string
        ID       string
        ParentID string
        Hier     ClusterHierarchy
    }

    HostHierarchy struct {
        DC      HierarchyValue
        Cluster HierarchyValue
    }
    Host struct {
        Name          string
        ID            string
        ParentID      string
        Hier          HostHierarchy
        OverallStatus string
        MetricList    performance.MetricList
        Ref           types.ManagedObjectReference
    }

    VMHierarchy struct {
        DC      HierarchyValue
        Cluster HierarchyValue
        Host    HierarchyValue
    }

    VM struct {
        Name          string
        ID            string
        ParentID      string
        Hier          VMHierarchy
        OverallStatus string
        MetricList    performance.MetricList
        Ref           types.ManagedObjectReference
    }
)

func (v *HierarchyValue) IsSet() bool         { return v.ID != "" && v.Name != "" }
func (v *HierarchyValue) Set(id, name string) { v.ID = id; v.Name = name }

func (h ClusterHierarchy) IsSet() bool { return h.DC.IsSet() }
func (h HostHierarchy) IsSet() bool    { return h.DC.IsSet() && h.Cluster.IsSet() }
func (h VMHierarchy) IsSet() bool      { return h.DC.IsSet() && h.Cluster.IsSet() && h.Host.IsSet() }

type (
    DataCenters map[string]*Datacenter
    Folders     map[string]*Folder
    Clusters    map[string]*Cluster
    Hosts       map[string]*Host
    VMs         map[string]*VM
)

func (dcs DataCenters) Put(dc *Datacenter)        { dcs[dc.ID] = dc }
func (dcs DataCenters) Get(id string) *Datacenter { return dcs[id] }
func (fs Folders) Put(folder *Folder)             { fs[folder.ID] = folder }
func (fs Folders) Get(id string) *Folder          { return fs[id] }
func (cs Clusters) Put(cluster *Cluster)          { cs[cluster.ID] = cluster }
func (cs Clusters) Get(id string) *Cluster        { return cs[id] }
func (hs Hosts) Put(host *Host)                   { hs[host.ID] = host }
func (hs Hosts) Remove(id string)                 { delete(hs, id) }
func (hs Hosts) Get(id string) *Host              { return hs[id] }
func (vs VMs) Put(vm *VM)                         { vs[vm.ID] = vm }
func (vs VMs) Remove(id string)                   { delete(vs, id) }
func (vs VMs) Get(id string) *VM                  { return vs[id] }