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  }