diff --git a/changes/increase-host-status-grace-period b/changes/increase-host-status-grace-period new file mode 100644 index 0000000000..faccbf61ba --- /dev/null +++ b/changes/increase-host-status-grace-period @@ -0,0 +1 @@ +* Increase the grace period for host status to 1 min to prevent flapping of status from hosts diff --git a/server/datastore/mysql/targets_test.go b/server/datastore/mysql/targets_test.go index 4be38d3589..6bb42a3bfe 100644 --- a/server/datastore/mysql/targets_test.go +++ b/server/datastore/mysql/targets_test.go @@ -69,7 +69,7 @@ func testTargetsCountHosts(t *testing.T, ds *Datastore) { h1 := initHost(mockClock.Now().Add(-1*time.Second), 10, 60, &team1.ID) h2 := initHost(mockClock.Now().Add(-1*time.Hour), 30, 7200, &team2.ID) h3 := initHost(mockClock.Now().Add(-5*time.Second), 20, 20, &team2.ID) - h4 := initHost(mockClock.Now().Add(-47*time.Second), 10, 10, &team2.ID) + h4 := initHost(mockClock.Now().Add(-127*time.Second), 10, 10, &team2.ID) h5 := initHost(mockClock.Now(), 5, 5, nil) const thirtyDaysAndAMinuteAgo = -1 * (30*24*60 + 1) h6 := initHost(mockClock.Now().Add(thirtyDaysAndAMinuteAgo*time.Minute), 3600, 3600, nil) @@ -235,20 +235,20 @@ func testTargetsHostStatus(t *testing.T, ds *Datastore) { metrics fleet.TargetMetrics }{ {mockClock.Now().Add(-30 * time.Second), 10, 3600, expectOnline}, - {mockClock.Now().Add(-45 * time.Second), 10, 3600, expectOffline}, + {mockClock.Now().Add(-125 * time.Second), 10, 3600, expectOffline}, {mockClock.Now().Add(-30 * time.Second), 3600, 10, expectOnline}, - {mockClock.Now().Add(-45 * time.Second), 3600, 10, expectOffline}, + {mockClock.Now().Add(-125 * time.Second), 3600, 10, expectOffline}, {mockClock.Now().Add(-70 * time.Second), 60, 60, expectOnline}, - {mockClock.Now().Add(-91 * time.Second), 60, 60, expectOffline}, + {mockClock.Now().Add(-121 * time.Second), 60, 60, expectOffline}, {mockClock.Now().Add(-1 * time.Second), 10, 10, expectOnline}, - {mockClock.Now().Add(-1 * time.Minute), 10, 10, expectOffline}, + {mockClock.Now().Add(-2 * time.Minute), 10, 10, expectOffline}, {mockClock.Now().Add(-31 * 24 * time.Hour), 10, 10, expectMIA}, // Ensure behavior is reasonable if we don't have the values {mockClock.Now().Add(-1 * time.Second), 0, 0, expectOnline}, - {mockClock.Now().Add(-1 * time.Minute), 0, 0, expectOffline}, + {mockClock.Now().Add(-2 * time.Minute), 0, 0, expectOffline}, {mockClock.Now().Add(-31 * 24 * time.Hour), 0, 0, expectMIA}, } diff --git a/server/fleet/hosts.go b/server/fleet/hosts.go index 0303c1c4fd..3134ab1305 100644 --- a/server/fleet/hosts.go +++ b/server/fleet/hosts.go @@ -29,7 +29,7 @@ const ( // OnlineIntervalBuffer is the additional time in seconds to add to the // online interval to avoid flapping of hosts that check in a bit later // than their expected checkin interval. - OnlineIntervalBuffer = 30 + OnlineIntervalBuffer = 60 ) type HostListOptions struct { diff --git a/server/fleet/hosts_test.go b/server/fleet/hosts_test.go index 23043f3cce..45865a5fdb 100644 --- a/server/fleet/hosts_test.go +++ b/server/fleet/hosts_test.go @@ -18,20 +18,20 @@ func TestHostStatus(t *testing.T) { status HostStatus }{ {mockClock.Now().Add(-30 * time.Second), 10, 3600, StatusOnline}, - {mockClock.Now().Add(-45 * time.Second), 10, 3600, StatusOffline}, + {mockClock.Now().Add(-75 * time.Second), 10, 3600, StatusOffline}, {mockClock.Now().Add(-30 * time.Second), 3600, 10, StatusOnline}, - {mockClock.Now().Add(-45 * time.Second), 3600, 10, StatusOffline}, + {mockClock.Now().Add(-75 * time.Second), 3600, 10, StatusOffline}, - {mockClock.Now().Add(-70 * time.Second), 60, 60, StatusOnline}, - {mockClock.Now().Add(-91 * time.Second), 60, 60, StatusOffline}, + {mockClock.Now().Add(-60 * time.Second), 60, 60, StatusOnline}, + {mockClock.Now().Add(-121 * time.Second), 60, 60, StatusOffline}, {mockClock.Now().Add(-1 * time.Second), 10, 10, StatusOnline}, - {mockClock.Now().Add(-1 * time.Minute), 10, 10, StatusOffline}, + {mockClock.Now().Add(-2 * time.Minute), 10, 10, StatusOffline}, {mockClock.Now().Add(-31 * 24 * time.Hour), 10, 10, StatusMIA}, // Ensure behavior is reasonable if we don't have the values {mockClock.Now().Add(-1 * time.Second), 0, 0, StatusOnline}, - {mockClock.Now().Add(-1 * time.Minute), 0, 0, StatusOffline}, + {mockClock.Now().Add(-2 * time.Minute), 0, 0, StatusOffline}, {mockClock.Now().Add(-31 * 24 * time.Hour), 0, 0, StatusMIA}, }