refactor slightly to handle multiple entities
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2023-05-24 10:18:17 +10:00
parent 6c4beb1f8f
commit 97ea2be284

98
main.go
View File

@@ -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
}