github.com/vmware/govmomi@v0.51.0/performance/example_test.go (about)

     1  // © Broadcom. All Rights Reserved.
     2  // The term “Broadcom” refers to Broadcom Inc. and/or its subsidiaries.
     3  // SPDX-License-Identifier: Apache-2.0
     4  
     5  package performance_test
     6  
     7  import (
     8  	"context"
     9  	"fmt"
    10  
    11  	"github.com/vmware/govmomi/object"
    12  	"github.com/vmware/govmomi/performance"
    13  	"github.com/vmware/govmomi/simulator"
    14  	"github.com/vmware/govmomi/view"
    15  	"github.com/vmware/govmomi/vim25"
    16  	"github.com/vmware/govmomi/vim25/types"
    17  )
    18  
    19  func ExampleManager_ToMetricSeries() {
    20  	simulator.Run(func(ctx context.Context, c *vim25.Client) error {
    21  		// Get virtual machines references
    22  		m := view.NewManager(c)
    23  
    24  		v, err := m.CreateContainerView(ctx, c.ServiceContent.RootFolder, nil, true)
    25  		if err != nil {
    26  			return err
    27  		}
    28  
    29  		defer v.Destroy(ctx)
    30  
    31  		vmsRefs, err := v.Find(ctx, []string{"VirtualMachine"}, nil)
    32  		if err != nil {
    33  			return err
    34  		}
    35  
    36  		// Create a PerfManager
    37  		perfManager := performance.NewManager(c)
    38  
    39  		// Retrieve counters name list
    40  		counters, err := perfManager.CounterInfoByName(ctx)
    41  		if err != nil {
    42  			return err
    43  		}
    44  
    45  		var names []string
    46  		for name := range counters {
    47  			names = append(names, name)
    48  		}
    49  
    50  		// Create PerfQuerySpec
    51  		spec := types.PerfQuerySpec{
    52  			MaxSample:  1,
    53  			MetricId:   []types.PerfMetricId{{Instance: "*"}},
    54  			IntervalId: 300,
    55  		}
    56  
    57  		// Query metrics
    58  		sample, err := perfManager.SampleByName(ctx, spec, names, vmsRefs)
    59  		if err != nil {
    60  			return err
    61  		}
    62  
    63  		result, err := perfManager.ToMetricSeries(ctx, sample)
    64  		if err != nil {
    65  			return err
    66  		}
    67  
    68  		// Read result
    69  		for _, metric := range result {
    70  			vm := object.NewVirtualMachine(c, metric.Entity)
    71  			name, err := vm.ObjectName(ctx)
    72  			if err != nil {
    73  				return err
    74  			}
    75  
    76  			for _, v := range metric.Value {
    77  				counter := counters[v.Name]
    78  				units := counter.UnitInfo.GetElementDescription().Label
    79  
    80  				instance := v.Instance
    81  				if instance == "" {
    82  					instance = "-"
    83  				}
    84  
    85  				if len(v.Value) != 0 && v.Name == "sys.uptime.latest" {
    86  					fmt.Printf("%s\t%s\t%s\t%s\n", name, instance, v.Name, units)
    87  					break
    88  				}
    89  			}
    90  		}
    91  		return nil
    92  	})
    93  
    94  	// Output:
    95  	// DC0_H0_VM0	*	sys.uptime.latest	s
    96  	// DC0_H0_VM1	*	sys.uptime.latest	s
    97  	// DC0_C0_RP0_VM0	*	sys.uptime.latest	s
    98  	// DC0_C0_RP0_VM1	*	sys.uptime.latest	s
    99  }