github.com/vmware/govmomi@v0.51.0/cli/metric/change.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 metric 6 7 import ( 8 "context" 9 "flag" 10 11 "github.com/vmware/govmomi/cli" 12 "github.com/vmware/govmomi/vim25/methods" 13 "github.com/vmware/govmomi/vim25/types" 14 ) 15 16 type change struct { 17 *PerformanceFlag 18 19 level int 20 device int 21 } 22 23 func init() { 24 cli.Register("metric.change", &change{}) 25 } 26 27 func (cmd *change) Register(ctx context.Context, f *flag.FlagSet) { 28 cmd.PerformanceFlag, ctx = NewPerformanceFlag(ctx) 29 cmd.PerformanceFlag.Register(ctx, f) 30 31 f.IntVar(&cmd.level, "level", 0, "Level for the aggregate counter") 32 f.IntVar(&cmd.device, "device-level", 0, "Level for the per device counter") 33 } 34 35 func (cmd *change) Usage() string { 36 return "NAME..." 37 } 38 39 func (cmd *change) Description() string { 40 return `Change counter NAME levels. 41 42 Examples: 43 govc metric.change -level 1 net.bytesRx.average net.bytesTx.average` 44 } 45 46 func (cmd *change) Process(ctx context.Context) error { 47 if err := cmd.PerformanceFlag.Process(ctx); err != nil { 48 return err 49 } 50 return nil 51 } 52 53 func (cmd *change) Run(ctx context.Context, f *flag.FlagSet) error { 54 if f.NArg() == 0 || (cmd.level == 0 && cmd.device == 0) { 55 return flag.ErrHelp 56 } 57 58 m, err := cmd.Manager(ctx) 59 if err != nil { 60 return err 61 } 62 63 counters, err := m.CounterInfoByName(ctx) 64 if err != nil { 65 return err 66 } 67 68 var mapping []types.PerformanceManagerCounterLevelMapping 69 70 for _, name := range f.Args() { 71 counter, ok := counters[name] 72 if !ok { 73 return cmd.ErrNotFound(name) 74 } 75 76 mapping = append(mapping, types.PerformanceManagerCounterLevelMapping{ 77 CounterId: counter.Key, 78 AggregateLevel: int32(cmd.level), 79 PerDeviceLevel: int32(cmd.device), 80 }) 81 } 82 83 _, err = methods.UpdateCounterLevelMapping(ctx, m.Client(), &types.UpdateCounterLevelMapping{ 84 This: m.Reference(), 85 CounterLevelMap: mapping, 86 }) 87 88 return err 89 }