From 385d96adcbce1eecb5e59badc296d161698bda2f Mon Sep 17 00:00:00 2001 From: Lucas Manuel Rodriguez Date: Wed, 26 Jun 2024 11:08:56 -0300 Subject: [PATCH] Fix counts in summary for host with low disk space (#19957) #19910 - [X] Changes file added for user-visible changes in `changes/`, `orbit/changes/` or `ee/fleetd-chrome/changes`. See [Changes files](https://fleetdm.com/docs/contributing/committing-changes#changes-files) for more information. - [X] Added/updated tests - [X] Manual QA for all new/changed functionality --- changes/19910-fix-low_disk_space-counts | 1 + server/datastore/mysql/hosts.go | 2 +- server/service/integration_enterprise_test.go | 26 ++++++++++--------- 3 files changed, 16 insertions(+), 13 deletions(-) create mode 100644 changes/19910-fix-low_disk_space-counts 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 {