search for host HA events starting 5 minutes before VM restart
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
18
main.go
18
main.go
@@ -278,6 +278,9 @@ func main() {
|
|||||||
var possibleHosts []types.Event
|
var possibleHosts []types.Event
|
||||||
event := vmFailures[i]
|
event := vmFailures[i]
|
||||||
vmRestartTime := event.CreatedTime.In(location)
|
vmRestartTime := event.CreatedTime.In(location)
|
||||||
|
|
||||||
|
// Sometimes host HA events can come through a few minutes after a VM restart event, so create a "fuzzy" starting time to search for host HA events
|
||||||
|
fuzzyTime := vmRestartTime.Add(-5 * time.Minute)
|
||||||
log.Printf("Failure event for VM '%s' restarted in cluster '%s'\n", event.Vm.Name, event.ComputeResource.Name)
|
log.Printf("Failure event for VM '%s' restarted in cluster '%s'\n", event.Vm.Name, event.ComputeResource.Name)
|
||||||
|
|
||||||
// Get a reference to the cluster mentioned
|
// Get a reference to the cluster mentioned
|
||||||
@@ -302,9 +305,10 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Search for any disconnected messages prior to restart time
|
// Search for any disconnected messages prior to restart time
|
||||||
log.Printf("Filtering VmDisconnectedEvent list based on VM restart time %s\n", vmRestartTime)
|
|
||||||
|
log.Printf("Filtering VmDisconnectedEvent list based on fuzzy VM restart time %s\n", fuzzyTime)
|
||||||
for _, e := range disconnectedEvents {
|
for _, e := range disconnectedEvents {
|
||||||
if e.CreatedTime.In(location).Before(vmRestartTime) || e.CreatedTime.In(location).Equal(vmRestartTime) {
|
if e.CreatedTime.In(location).Before(fuzzyTime) || e.CreatedTime.In(location).Equal(fuzzyTime) {
|
||||||
log.Printf("VM disconnected event on host %s at time %s is applicable\n", e.Host.Name, e.CreatedTime.In(location))
|
log.Printf("VM disconnected event on host %s at time %s is applicable\n", e.Host.Name, e.CreatedTime.In(location))
|
||||||
possibleHosts = append(possibleHosts, e)
|
possibleHosts = append(possibleHosts, e)
|
||||||
}
|
}
|
||||||
@@ -317,7 +321,7 @@ func main() {
|
|||||||
log.Printf("No corresponding VM disconnected messages, falling back to any applicable host that experienced a HA event.\n")
|
log.Printf("No corresponding VM disconnected messages, falling back to any applicable host that experienced a HA event.\n")
|
||||||
// Search for host failures
|
// Search for host failures
|
||||||
for _, hostEvent := range hostFailures {
|
for _, hostEvent := range hostFailures {
|
||||||
if hostEvent.CreatedTime.In(location).Before(vmRestartTime) || hostEvent.CreatedTime.In(location).Equal(vmRestartTime) {
|
if hostEvent.CreatedTime.In(location).Before(fuzzyTime) || hostEvent.CreatedTime.In(location).Equal(fuzzyTime) {
|
||||||
possibleHosts = append(possibleHosts, hostEvent)
|
possibleHosts = append(possibleHosts, hostEvent)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -325,16 +329,16 @@ func main() {
|
|||||||
log.Printf("Based on event times there were %d possible hosts this VM was running on\n", len(possibleHosts))
|
log.Printf("Based on event times there were %d possible hosts this VM was running on\n", len(possibleHosts))
|
||||||
|
|
||||||
if len(possibleHosts) == 0 {
|
if len(possibleHosts) == 0 {
|
||||||
log.Printf("No ESXi outage events happened before VM %s restart event at %s, skipping this event.\n", event.Vm.Name, vmRestartTime)
|
log.Printf("No ESXi outage events happened before VM %s fuzzy restart event at %s, skipping this event.\n", event.Vm.Name, fuzzyTime)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else { // Didn't find any VM disconnected events
|
} else { // Didn't find any VM disconnected events
|
||||||
log.Printf("could not determine previous host for this VM. Filtering all host failures for events prior to VM restart time '%s'\n", vmRestartTime)
|
log.Printf("could not determine previous host for this VM. Filtering all host failures for events prior to fuzzy VM restart time '%s'\n", fuzzyTime)
|
||||||
|
|
||||||
// Search for host failures
|
// Search for host failures
|
||||||
for _, hostEvent := range hostFailures {
|
for _, hostEvent := range hostFailures {
|
||||||
if hostEvent.CreatedTime.In(location).Before(vmRestartTime) || hostEvent.CreatedTime.In(location).Equal(vmRestartTime) {
|
if hostEvent.CreatedTime.In(location).Before(fuzzyTime) || hostEvent.CreatedTime.In(location).Equal(fuzzyTime) {
|
||||||
possibleHosts = append(possibleHosts, hostEvent)
|
possibleHosts = append(possibleHosts, hostEvent)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -342,7 +346,7 @@ func main() {
|
|||||||
log.Printf("Based on event times there were %d possible hosts this VM was running on\n", len(possibleHosts))
|
log.Printf("Based on event times there were %d possible hosts this VM was running on\n", len(possibleHosts))
|
||||||
|
|
||||||
if len(possibleHosts) == 0 {
|
if len(possibleHosts) == 0 {
|
||||||
log.Printf("No ESXi outage events happened before VM %s restart event at %s, skipping this event.\n", event.Vm.Name, vmRestartTime)
|
log.Printf("No ESXi outage events happened before VM %s fuzzy restart event at %s, skipping this event.\n", event.Vm.Name, fuzzyTime)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user