github.com/vmware/govmomi@v0.37.2/govc/metric/interval/change.go (about)

     1  /*
     2  Copyright (c) 2017 VMware, Inc. All Rights Reserved.
     3  
     4  Licensed under the Apache License, Version 2.0 (the "License");
     5  you may not use this file except in compliance with the License.
     6  You may obtain a copy of the License at
     7  
     8      http://www.apache.org/licenses/LICENSE-2.0
     9  
    10  Unless required by applicable law or agreed to in writing, software
    11  distributed under the License is distributed on an "AS IS" BASIS,
    12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  See the License for the specific language governing permissions and
    14  limitations under the License.
    15  */
    16  
    17  package interval
    18  
    19  import (
    20  	"context"
    21  	"flag"
    22  	"fmt"
    23  
    24  	"github.com/vmware/govmomi/govc/cli"
    25  	"github.com/vmware/govmomi/govc/flags"
    26  	"github.com/vmware/govmomi/govc/metric"
    27  	"github.com/vmware/govmomi/vim25/methods"
    28  	"github.com/vmware/govmomi/vim25/types"
    29  )
    30  
    31  type change struct {
    32  	*metric.PerformanceFlag
    33  
    34  	enabled *bool
    35  	level   int
    36  }
    37  
    38  func init() {
    39  	cli.Register("metric.interval.change", &change{})
    40  }
    41  
    42  func (cmd *change) Register(ctx context.Context, f *flag.FlagSet) {
    43  	cmd.PerformanceFlag, ctx = metric.NewPerformanceFlag(ctx)
    44  	cmd.PerformanceFlag.Register(ctx, f)
    45  
    46  	f.Var(flags.NewOptionalBool(&cmd.enabled), "enabled", "Enable or disable")
    47  	f.IntVar(&cmd.level, "level", 0, "Level")
    48  }
    49  
    50  func (cmd *change) Description() string {
    51  	return `Change historical metric intervals.
    52  
    53  Examples:
    54    govc metric.interval.change -i 300 -level 2
    55    govc metric.interval.change -i 86400 -enabled=false`
    56  }
    57  
    58  func (cmd *change) Process(ctx context.Context) error {
    59  	if err := cmd.PerformanceFlag.Process(ctx); err != nil {
    60  		return err
    61  	}
    62  	return nil
    63  }
    64  
    65  func (cmd *change) Run(ctx context.Context, f *flag.FlagSet) error {
    66  	m, err := cmd.Manager(ctx)
    67  	if err != nil {
    68  		return err
    69  	}
    70  
    71  	intervals, err := m.HistoricalInterval(ctx)
    72  	if err != nil {
    73  		return err
    74  	}
    75  
    76  	interval := cmd.Interval(0)
    77  	if interval == 0 {
    78  		return flag.ErrHelp
    79  	}
    80  
    81  	var current *types.PerfInterval
    82  
    83  	for _, i := range intervals {
    84  		if i.SamplingPeriod == interval {
    85  			current = &i
    86  			break
    87  		}
    88  	}
    89  
    90  	if current == nil {
    91  		return fmt.Errorf("%d interval ID not found", interval)
    92  	}
    93  
    94  	if cmd.level != 0 {
    95  		if cmd.level > 4 {
    96  			return flag.ErrHelp
    97  		}
    98  		current.Level = int32(cmd.level)
    99  	}
   100  
   101  	if cmd.enabled != nil {
   102  		current.Enabled = *cmd.enabled
   103  	}
   104  
   105  	_, err = methods.UpdatePerfInterval(ctx, m.Client(), &types.UpdatePerfInterval{
   106  		This:     m.Reference(),
   107  		Interval: *current,
   108  	})
   109  
   110  	return err
   111  }