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 }