github.com/vmware/govmomi@v0.51.0/cli/alarm/info.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 alarm
     6  
     7  import (
     8  	"context"
     9  	"flag"
    10  	"fmt"
    11  	"io"
    12  	"text/tabwriter"
    13  
    14  	"github.com/vmware/govmomi/alarm"
    15  	"github.com/vmware/govmomi/cli"
    16  	"github.com/vmware/govmomi/cli/flags"
    17  	"github.com/vmware/govmomi/vim25/mo"
    18  )
    19  
    20  type info struct {
    21  	*flags.DatacenterFlag
    22  
    23  	name flags.StringList
    24  }
    25  
    26  func init() {
    27  	cli.Register("alarm.info", &info{})
    28  }
    29  
    30  func (cmd *info) Register(ctx context.Context, f *flag.FlagSet) {
    31  	cmd.DatacenterFlag, ctx = flags.NewDatacenterFlag(ctx)
    32  	cmd.DatacenterFlag.Register(ctx, f)
    33  
    34  	f.Var(&cmd.name, "n", "Alarm name")
    35  }
    36  
    37  func (cmd *info) Usage() string {
    38  	return "PATH"
    39  }
    40  
    41  func (cmd *info) Description() string {
    42  	return `Alarm definition info.
    43  
    44  Examples:
    45    govc alarm.info
    46    govc alarm.info /dc1/host/cluster1
    47    govc alarm.info -n alarm.WCPRegisterVMFailedAlarm`
    48  }
    49  
    50  type infoResult []mo.Alarm
    51  
    52  func (r infoResult) Dump() any {
    53  	return []mo.Alarm(r)
    54  }
    55  
    56  func (r infoResult) Write(w io.Writer) error {
    57  	tw := tabwriter.NewWriter(w, 2, 0, 2, ' ', 0)
    58  	for _, a := range r {
    59  		fmt.Fprintf(tw, "Name:\t%s\n", a.Info.Name)
    60  		fmt.Fprintf(tw, "  SystemName:\t%s\n", a.Info.SystemName)
    61  		fmt.Fprintf(tw, "  Description:\t%s\n", a.Info.Description)
    62  		fmt.Fprintf(tw, "  Enabled:\t%t\n", a.Info.Enabled)
    63  	}
    64  	return tw.Flush()
    65  }
    66  
    67  func (cmd *info) findAlarm(alarms []mo.Alarm) []mo.Alarm {
    68  	if len(cmd.name) == 0 {
    69  		return alarms
    70  	}
    71  	var match []mo.Alarm
    72  	for _, alarm := range alarms {
    73  		for _, name := range cmd.name {
    74  			if alarm.Info.SystemName == name || alarm.Info.Name == name {
    75  				match = append(match, alarm)
    76  			}
    77  		}
    78  	}
    79  	return match
    80  }
    81  
    82  func (cmd *info) Run(ctx context.Context, f *flag.FlagSet) error {
    83  	c, err := cmd.Client()
    84  	if err != nil {
    85  		return err
    86  	}
    87  
    88  	obj := c.ServiceContent.RootFolder
    89  	if f.NArg() == 1 {
    90  		obj, err = cmd.ManagedObject(ctx, f.Arg(0))
    91  		if err != nil {
    92  			return err
    93  		}
    94  	}
    95  
    96  	m, err := alarm.GetManager(c)
    97  	if err != nil {
    98  		return err
    99  	}
   100  
   101  	alarms, err := m.GetAlarm(ctx, obj)
   102  	if err != nil {
   103  		return err
   104  	}
   105  
   106  	return cmd.WriteResult(infoResult(cmd.findAlarm(alarms)))
   107  }