diff --git a/changes/19910-fix-low_disk_space-counts b/changes/19910-fix-low_disk_space-counts new file mode 100644 index 0000000000..249945b546 --- /dev/null +++ b/changes/19910-fix-low_disk_space-counts @@ -0,0 +1 @@ +* Fixed counts for hosts with with low disk space in summary page. diff --git a/server/datastore/mysql/hosts.go b/server/datastore/mysql/hosts.go index 17c8462c4b..f6d0ae21d1 100644 --- a/server/datastore/mysql/hosts.go +++ b/server/datastore/mysql/hosts.go @@ -1673,7 +1673,7 @@ func (ds *Datastore) GenerateHostStatusStatistics(ctx context.Context, filter fl lowDiskSelect := `0 low_disk_space` if lowDiskSpace != nil { hostDisksJoin = `LEFT JOIN host_disks hd ON (h.id = hd.host_id)` - lowDiskSelect = `COALESCE(SUM(CASE WHEN hd.gigs_disk_space_available <= ? THEN 1 ELSE 0 END), 0) low_disk_space` + lowDiskSelect = `COALESCE(SUM(CASE WHEN hd.gigs_disk_space_available < ? THEN 1 ELSE 0 END), 0) low_disk_space` args = append(args, *lowDiskSpace) } diff --git a/server/service/integration_enterprise_test.go b/server/service/integration_enterprise_test.go index 26a2402d39..39e632d5b5 100644 --- a/server/service/integration_enterprise_test.go +++ b/server/service/integration_enterprise_test.go @@ -3334,12 +3334,25 @@ func (s *integrationEnterpriseTestSuite) TestListHosts() { // set disk space information for some hosts (none provided for host3) require.NoError(t, s.ds.SetOrUpdateHostDisksSpace(context.Background(), host1.ID, 10.0, 2.0, 500.0)) - require.NoError(t, s.ds.SetOrUpdateHostDisksSpace(context.Background(), host2.ID, 40.0, 4.0, 1000.0)) + require.NoError(t, s.ds.SetOrUpdateHostDisksSpace(context.Background(), host2.ID, 32.0, 4.0, 1000.0)) var resp listHostsResponse s.DoJSON("GET", "/api/latest/fleet/hosts", nil, http.StatusOK, &resp) require.Len(t, resp.Hosts, 3) + allHostsLabel, err := s.ds.GetLabelSpec(context.Background(), "All hosts") + require.NoError(t, err) + for _, h := range resp.Hosts { + err = s.ds.RecordLabelQueryExecutions( + context.Background(), h.Host, map[uint]*bool{allHostsLabel.ID: ptr.Bool(true)}, time.Now(), false, + ) + require.NoError(t, err) + } + + resp = listHostsResponse{} + s.DoJSON("GET", fmt.Sprintf("/api/latest/fleet/labels/%d/hosts", allHostsLabel.ID), nil, http.StatusOK, &resp, "low_disk_space", "32") + require.Len(t, resp.Hosts, 1) + resp = listHostsResponse{} s.DoJSON("GET", "/api/latest/fleet/hosts", nil, http.StatusOK, &resp, "low_disk_space", "32") require.Len(t, resp.Hosts, 1) @@ -3480,17 +3493,6 @@ func (s *integrationEnterpriseTestSuite) TestListHosts() { require.Empty(t, h.Software) } - // Test host list from labels endpoint - // First assign label to hosts - allHostsLabel, err := s.ds.GetLabelSpec(ctx, "All hosts") - require.NoError(t, err) - for _, h := range resp.Hosts { - err = s.ds.RecordLabelQueryExecutions( - context.Background(), h.Host, map[uint]*bool{allHostsLabel.ID: ptr.Bool(true)}, time.Now(), false, - ) - require.NoError(t, err) - } - s.DoJSON("GET", fmt.Sprintf("/api/latest/fleet/labels/%d/hosts", allHostsLabel.ID), nil, http.StatusOK, &resp) assert.Len(t, resp.Hosts, 3) for _, h := range resp.Hosts {