From 97ea2be2844321a33a772b2b9fcfe228277f37fc Mon Sep 17 00:00:00 2001 From: Nathan Coad Date: Wed, 24 May 2023 10:18:17 +1000 Subject: [PATCH] refactor slightly to handle multiple entities --- main.go | 98 ++++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 73 insertions(+), 25 deletions(-) diff --git a/main.go b/main.go index b81d02e..d307b27 100644 --- a/main.go +++ b/main.go @@ -51,6 +51,9 @@ var ( hostResults []HostFailureResults ) +// This function optionally filters events by a single MoRef, any additonal MoRefs are ignored +// See https://golang.hotexamples.com/site/file?hash=0x7414a58898f22f77b81f05c04e2e2a2280e018ba9a71a2f4efb2bda7c55c35ac&fullName=govc/command.go&project=kristinn/govmomi +// for an example of how to deal with multiple entities func getEvents(eventTypes []string, entities []types.ManagedObjectReference, begin time.Duration, end time.Duration) []types.Event { var returnEvents []types.Event // Refer https://github.com/vmware/govmomi/blob/main/examples/events/main.go @@ -59,7 +62,7 @@ func getEvents(eventTypes []string, entities []types.ManagedObjectReference, beg fmt.Fprintf(os.Stderr, "Error getting vCenter time: %s\n", err) os.Exit(1) } else { - log.Printf("vCenter time is '%v'\n", now) + //log.Printf("vCenter time is '%v'\n", now) } m := event.NewManager(c.Client) @@ -76,44 +79,89 @@ func getEvents(eventTypes []string, entities []types.ManagedObjectReference, beg BeginTime: types.NewTime(now.Add(begin * -1)), }, } - if len(entities) > 0 { - log.Printf("getEvents setting entity '%v' to filter\n", entities[0]) - filter.Entity = &types.EventFilterSpecByEntity{ - Entity: entities[0], - Recursion: types.EventFilterSpecRecursionOptionAll, - } - } + if end != 0 { filter.Time.EndTime = types.NewTime(now.Add(end * -1)) } - collector, err := m.CreateCollectorForEvents(ctx, filter) - if err != nil { - fmt.Fprintf(os.Stderr, "Error creating event collector: %s\n", err) - os.Exit(1) + if len(entities) == 0 { + entities = append(entities, root) } - defer collector.Destroy(ctx) + for _, e := range entities { + log.Printf("getEvents setting entity '%v' to filter\n", entities[0]) + filter.Entity = &types.EventFilterSpecByEntity{ + Entity: e, + Recursion: types.EventFilterSpecRecursionOptionAll, + } - for { - events, err := collector.ReadNextEvents(ctx, 100) + collector, err := m.CreateCollectorForEvents(ctx, filter) if err != nil { - fmt.Fprintf(os.Stderr, "Error reading events: %s\n", err) + fmt.Fprintf(os.Stderr, "Error creating event collector: %s\n", err) + os.Exit(1) } - if len(events) == 0 { - break + defer collector.Destroy(ctx) + + for { + events, err := collector.ReadNextEvents(ctx, 100) + if err != nil { + fmt.Fprintf(os.Stderr, "Error reading events: %s\n", err) + } + + if len(events) == 0 { + break + } + + for i := range events { + event := events[i].GetEvent() + returnEvents = append(returnEvents, *event) + //kind := reflect.TypeOf(events[i]).Elem().Name() + //log.Printf("%d [%s] [%s] %s\n", event.Key, event.CreatedTime.In(location).Format(time.ANSIC), kind, event.FullFormattedMessage) + log.Printf("%d [%s] %s\n", event.Key, event.CreatedTime.Format(time.ANSIC), event.FullFormattedMessage) + } } - for i := range events { - event := events[i].GetEvent() - returnEvents = append(returnEvents, *event) - //kind := reflect.TypeOf(events[i]).Elem().Name() - //log.Printf("%d [%s] [%s] %s\n", event.Key, event.CreatedTime.In(location).Format(time.ANSIC), kind, event.FullFormattedMessage) - log.Printf("%d [%s] %s\n", event.Key, event.CreatedTime.Format(time.ANSIC), event.FullFormattedMessage) - } } + /* + if len(entities) > 0 { + log.Printf("getEvents setting entity '%v' to filter\n", entities[0]) + filter.Entity = &types.EventFilterSpecByEntity{ + Entity: entities[0], + Recursion: types.EventFilterSpecRecursionOptionAll, + } + } + + + collector, err := m.CreateCollectorForEvents(ctx, filter) + if err != nil { + fmt.Fprintf(os.Stderr, "Error creating event collector: %s\n", err) + os.Exit(1) + } + + defer collector.Destroy(ctx) + + for { + events, err := collector.ReadNextEvents(ctx, 100) + if err != nil { + fmt.Fprintf(os.Stderr, "Error reading events: %s\n", err) + } + + if len(events) == 0 { + break + } + + for i := range events { + event := events[i].GetEvent() + returnEvents = append(returnEvents, *event) + //kind := reflect.TypeOf(events[i]).Elem().Name() + //log.Printf("%d [%s] [%s] %s\n", event.Key, event.CreatedTime.In(location).Format(time.ANSIC), kind, event.FullFormattedMessage) + log.Printf("%d [%s] %s\n", event.Key, event.CreatedTime.Format(time.ANSIC), event.FullFormattedMessage) + } + } + */ + return returnEvents }