github.com/vmware/govmomi@v0.51.0/examples/events/main.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 main 6 7 import ( 8 "context" 9 "flag" 10 "fmt" 11 "reflect" 12 "time" 13 14 "github.com/vmware/govmomi/event" 15 "github.com/vmware/govmomi/examples" 16 "github.com/vmware/govmomi/vim25" 17 "github.com/vmware/govmomi/vim25/methods" 18 "github.com/vmware/govmomi/vim25/types" 19 ) 20 21 func main() { 22 // example use against simulator: go run main.go -b 8h -f 23 // example use against vCenter with optional event filters: 24 // go run main.go -url $GOVMOMI_URL -insecure $GOVMOMI_INSECURE -b 8h -f VmEvent UserLoginSessionEvent 25 begin := flag.Duration("b", 10*time.Minute, "Begin time") // default BeginTime is 10min ago 26 end := flag.Duration("e", 0, "End time") 27 follow := flag.Bool("f", false, "Follow event stream") 28 29 examples.Run(func(ctx context.Context, c *vim25.Client) error { 30 m := event.NewManager(c) 31 32 ref := c.ServiceContent.RootFolder 33 34 now, err := methods.GetCurrentTime(ctx, c) // vCenter server time (UTC) 35 if err != nil { 36 return err 37 } 38 39 filter := types.EventFilterSpec{ 40 EventTypeId: flag.Args(), // e.g. VmEvent 41 Entity: &types.EventFilterSpecByEntity{ 42 Entity: ref, 43 Recursion: types.EventFilterSpecRecursionOptionAll, 44 }, 45 Time: &types.EventFilterSpecByTime{ 46 BeginTime: types.NewTime(now.Add(*begin * -1)), 47 }, 48 } 49 if *end != 0 { 50 filter.Time.EndTime = types.NewTime(now.Add(*end * -1)) 51 } 52 53 collector, err := m.CreateCollectorForEvents(ctx, filter) 54 if err != nil { 55 return err 56 } 57 58 defer collector.Destroy(ctx) 59 60 for { 61 events, err := collector.ReadNextEvents(ctx, 100) 62 if err != nil { 63 return err 64 } 65 66 if len(events) == 0 { 67 if *follow { 68 time.Sleep(time.Second) 69 continue 70 } 71 break 72 } 73 74 for i := range events { 75 event := events[i].GetEvent() 76 kind := reflect.TypeOf(events[i]).Elem().Name() 77 fmt.Printf("%d [%s] [%s] %s\n", event.Key, event.CreatedTime.Format(time.ANSIC), kind, event.FullFormattedMessage) 78 } 79 } 80 81 return nil 82 }) 83 }