From 05ba38ce2fd99446c6f51f13b28a6401d3e518fc Mon Sep 17 00:00:00 2001 From: Tomas Touceda Date: Fri, 2 Jul 2021 12:59:42 -0300 Subject: [PATCH] Fetch all data for a host when listing it (#1293) --- server/datastore/datastore_hosts.go | 21 ++++++++++++++++ server/datastore/mysql/hosts.go | 37 +--------------------------- server/service/service_hosts_test.go | 5 ++++ 3 files changed, 27 insertions(+), 36 deletions(-) diff --git a/server/datastore/datastore_hosts.go b/server/datastore/datastore_hosts.go index 251eae09c5..3a6b089f57 100644 --- a/server/datastore/datastore_hosts.go +++ b/server/datastore/datastore_hosts.go @@ -255,6 +255,13 @@ func testListHosts(t *testing.T, ds fleet.Datastore) { require.Nil(t, err) assert.Equal(t, len(hosts), len(hosts2)) + for _, host := range hosts2 { + i, err := strconv.Atoi(host.UUID) + assert.Nil(t, err) + assert.True(t, i >= 0) + assert.True(t, strings.HasPrefix(host.Hostname, "foo.local")) + } + // Test with logic for only a few hosts hosts2, err = ds.ListHosts(filter, fleet.HostListOptions{ListOptions: fleet.ListOptions{PerPage: 4, Page: 0}}) require.Nil(t, err) @@ -422,6 +429,13 @@ func testEnrollHost(t *testing.T, ds fleet.Datastore) { team, err := ds.NewTeam(&fleet.Team{Name: "team1"}) require.NoError(t, err) + filter := fleet.TeamFilter{User: test.UserAdmin} + hosts, err := ds.ListHosts(filter, fleet.HostListOptions{}) + require.Nil(t, err) + for _, host := range hosts { + assert.Zero(t, host.LastEnrolledAt) + } + for _, tt := range enrollTests { h, err := ds.EnrollHost(tt.uuid, tt.nodeKey, &team.ID, 0) require.Nil(t, err) @@ -437,6 +451,13 @@ func testEnrollHost(t *testing.T, ds fleet.Datastore) { _, err = ds.EnrollHost(tt.uuid, tt.nodeKey+"new", nil, 10*time.Second) require.Error(t, err) } + + hosts, err = ds.ListHosts(filter, fleet.HostListOptions{}) + + require.Nil(t, err) + for _, host := range hosts { + assert.NotZero(t, host.LastEnrolledAt) + } } func testAuthenticateHost(t *testing.T, ds fleet.Datastore) { diff --git a/server/datastore/mysql/hosts.go b/server/datastore/mysql/hosts.go index dc8ad20bbc..09ae2e2d3c 100644 --- a/server/datastore/mysql/hosts.go +++ b/server/datastore/mysql/hosts.go @@ -283,42 +283,7 @@ func (d *Datastore) Host(id uint) (*fleet.Host, error) { func (d *Datastore) ListHosts(filter fleet.TeamFilter, opt fleet.HostListOptions) ([]*fleet.Host, error) { sql := `SELECT - h.id, - h.osquery_host_id, - h.created_at, - h.updated_at, - h.detail_updated_at, - h.node_key, - h.hostname, - h.uuid, - h.platform, - h.osquery_version, - h.os_version, - h.build, - h.platform_like, - h.code_name, - h.uptime, - h.memory, - h.cpu_type, - h.cpu_subtype, - h.cpu_brand, - h.cpu_physical_cores, - h.cpu_logical_cores, - h.hardware_vendor, - h.hardware_model, - h.hardware_version, - h.hardware_serial, - h.computer_name, - h.primary_ip_id, - h.seen_time, - h.distributed_interval, - h.logger_tls_period, - h.config_tls_refresh, - h.primary_ip, - h.primary_mac, - h.label_updated_at, - h.team_id, - h.refetch_requested, + h.*, t.name AS team_name ` diff --git a/server/service/service_hosts_test.go b/server/service/service_hosts_test.go index d37a26980f..0fd26b58e3 100644 --- a/server/service/service_hosts_test.go +++ b/server/service/service_hosts_test.go @@ -2,6 +2,7 @@ package service import ( "testing" + "time" "github.com/fleetdm/fleet/v4/server/config" "github.com/fleetdm/fleet/v4/server/datastore/inmem" @@ -23,14 +24,18 @@ func TestListHosts(t *testing.T) { assert.Nil(t, err) assert.Len(t, hosts, 0) + storedTime := time.Now() + _, err = ds.NewHost(&fleet.Host{ Hostname: "foo", + LastEnrolledAt: storedTime, }) assert.Nil(t, err) hosts, err = svc.ListHosts(test.UserContext(test.UserAdmin), fleet.HostListOptions{}) assert.Nil(t, err) assert.Len(t, hosts, 1) + assert.Equal(t, storedTime, hosts[0].LastEnrolledAt) } func TestDeleteHost(t *testing.T) {