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 }