Skip to content

Commit d80161a

Browse files
authored
Added statistics for number of saved queries. (#24043)
Added statistics for number of saved queries.
1 parent 9de98d8 commit d80161a

File tree

7 files changed

+26
-1
lines changed

7 files changed

+26
-1
lines changed

articles/fleet-usage-statistics.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ Below is the JSON payload that is sent to Fleet Device Management Inc:
1818
"numUsers": 999,
1919
"numTeams": 999,
2020
"numPolicies": 999,
21+
"numQueries": 999,
2122
"numLabels": 999,
2223
"softwareInventoryEnabled": true,
2324
"vulnDetectionEnabled": true,

changes/23458-additional-stats

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
- Added additional statistics item for number of saved queries

cmd/fleet/serve_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ func TestMaybeSendStatistics(t *testing.T) {
100100
NumSoftwareCVEs: 105,
101101
NumTeams: 9,
102102
NumPolicies: 0,
103+
NumQueries: 200,
103104
NumLabels: 3,
104105
SoftwareInventoryEnabled: true,
105106
VulnDetectionEnabled: true,
@@ -139,7 +140,7 @@ func TestMaybeSendStatistics(t *testing.T) {
139140
require.NoError(t, err)
140141
assert.True(t, recorded)
141142
require.True(t, cleanedup)
142-
assert.Equal(t, `{"anonymousIdentifier":"ident","fleetVersion":"1.2.3","licenseTier":"premium","organization":"Fleet","numHostsEnrolled":999,"numUsers":99,"numSoftwareVersions":100,"numHostSoftwares":101,"numSoftwareTitles":102,"numHostSoftwareInstalledPaths":103,"numSoftwareCPEs":104,"numSoftwareCVEs":105,"numTeams":9,"numPolicies":0,"numLabels":3,"softwareInventoryEnabled":true,"vulnDetectionEnabled":true,"systemUsersEnabled":true,"hostsStatusWebHookEnabled":true,"mdmMacOsEnabled":false,"hostExpiryEnabled":false,"mdmWindowsEnabled":false,"liveQueryDisabled":false,"numWeeklyActiveUsers":111,"numWeeklyPolicyViolationDaysActual":0,"numWeeklyPolicyViolationDaysPossible":0,"hostsEnrolledByOperatingSystem":{"linux":[{"version":"1.2.3","numEnrolled":22}]},"hostsEnrolledByOrbitVersion":[],"hostsEnrolledByOsqueryVersion":[],"storedErrors":[],"numHostsNotResponding":0,"aiFeaturesDisabled":true,"maintenanceWindowsEnabled":true,"maintenanceWindowsConfigured":true,"numHostsFleetDesktopEnabled":1984}`, requestBody)
143+
assert.Equal(t, `{"anonymousIdentifier":"ident","fleetVersion":"1.2.3","licenseTier":"premium","organization":"Fleet","numHostsEnrolled":999,"numUsers":99,"numSoftwareVersions":100,"numHostSoftwares":101,"numSoftwareTitles":102,"numHostSoftwareInstalledPaths":103,"numSoftwareCPEs":104,"numSoftwareCVEs":105,"numTeams":9,"numPolicies":0,"numQueries":200,"numLabels":3,"softwareInventoryEnabled":true,"vulnDetectionEnabled":true,"systemUsersEnabled":true,"hostsStatusWebHookEnabled":true,"mdmMacOsEnabled":false,"hostExpiryEnabled":false,"mdmWindowsEnabled":false,"liveQueryDisabled":false,"numWeeklyActiveUsers":111,"numWeeklyPolicyViolationDaysActual":0,"numWeeklyPolicyViolationDaysPossible":0,"hostsEnrolledByOperatingSystem":{"linux":[{"version":"1.2.3","numEnrolled":22}]},"hostsEnrolledByOrbitVersion":[],"hostsEnrolledByOsqueryVersion":[],"storedErrors":[],"numHostsNotResponding":0,"aiFeaturesDisabled":true,"maintenanceWindowsEnabled":true,"maintenanceWindowsConfigured":true,"numHostsFleetDesktopEnabled":1984}`, requestBody)
143144
}
144145

145146
func TestMaybeSendStatisticsSkipsSendingIfNotNeeded(t *testing.T) {

server/datastore/mysql/queries.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -714,3 +714,15 @@ func (ds *Datastore) UpdateLiveQueryStats(ctx context.Context, queryID uint, sta
714714
}
715715
return nil
716716
}
717+
718+
func numSavedQueriesDB(ctx context.Context, db sqlx.QueryerContext) (int, error) {
719+
var count int
720+
const stmt = `
721+
SELECT count(*) FROM queries WHERE saved
722+
`
723+
if err := sqlx.GetContext(ctx, db, &count, stmt); err != nil {
724+
return 0, err
725+
}
726+
727+
return count, nil
728+
}

server/datastore/mysql/statistics.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,10 @@ func (ds *Datastore) ShouldSendStatistics(ctx context.Context, frequency time.Du
103103
if err != nil {
104104
return ctxerr.Wrap(ctx, err, "number of hosts with Fleet desktop installed")
105105
}
106+
numQueries, err := numSavedQueriesDB(ctx, ds.reader(ctx))
107+
if err != nil {
108+
return ctxerr.Wrap(ctx, err, "number of saved queries in DB")
109+
}
106110

107111
stats.NumHostsEnrolled = amountEnrolledHosts
108112
stats.NumUsers = amountUsers
@@ -152,6 +156,7 @@ func (ds *Datastore) ShouldSendStatistics(ctx context.Context, frequency time.Du
152156
}
153157
}
154158
stats.NumHostsFleetDesktopEnabled = numHostsFleetDesktopEnabled
159+
stats.NumQueries = numQueries
155160
return nil
156161
}
157162

server/datastore/mysql/statistics_test.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ func testStatisticsShouldSend(t *testing.T, ds *Datastore) {
7272
assert.Equal(t, 0, stats.NumSoftwareCVEs)
7373
assert.Equal(t, 0, stats.NumTeams)
7474
assert.Equal(t, 0, stats.NumPolicies)
75+
assert.Equal(t, 0, stats.NumQueries)
7576
assert.Equal(t, builtinLabels, stats.NumLabels)
7677
assert.Equal(t, false, stats.SoftwareInventoryEnabled)
7778
assert.Equal(t, true, stats.SystemUsersEnabled)
@@ -220,6 +221,7 @@ func testStatisticsShouldSend(t *testing.T, ds *Datastore) {
220221
assert.Equal(t, 0, stats.NumSoftwareCVEs)
221222
assert.Equal(t, 1, stats.NumTeams)
222223
assert.Equal(t, 1, stats.NumPolicies)
224+
assert.Equal(t, 0, stats.NumQueries)
223225
assert.Equal(t, builtinLabels+1, stats.NumLabels)
224226
assert.Equal(t, false, stats.SoftwareInventoryEnabled)
225227
assert.Equal(t, false, stats.SystemUsersEnabled)
@@ -320,6 +322,7 @@ func testStatisticsShouldSend(t *testing.T, ds *Datastore) {
320322
assert.Equal(t, "Fleet", stats.Organization)
321323
assert.Equal(t, 5, stats.NumHostsEnrolled)
322324
assert.Equal(t, 2, stats.NumUsers)
325+
assert.Equal(t, 0, stats.NumQueries)
323326
assert.Equal(t, 0, stats.NumSoftwareVersions)
324327
assert.Equal(t, 0, stats.NumHostSoftwares)
325328
assert.Equal(t, 0, stats.NumSoftwareTitles)
@@ -368,6 +371,7 @@ func testStatisticsShouldSend(t *testing.T, ds *Datastore) {
368371
assert.Equal(t, "Fleet", stats.Organization)
369372
assert.Equal(t, 5, stats.NumHostsEnrolled)
370373
assert.Equal(t, 2, stats.NumUsers)
374+
assert.Equal(t, 0, stats.NumQueries)
371375
assert.Equal(t, 0, stats.NumSoftwareVersions)
372376
assert.Equal(t, 0, stats.NumHostSoftwares)
373377
assert.Equal(t, 0, stats.NumSoftwareTitles)

server/fleet/statistics.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ type StatisticsPayload struct {
2020
NumSoftwareCVEs int `json:"numSoftwareCVEs"`
2121
NumTeams int `json:"numTeams"`
2222
NumPolicies int `json:"numPolicies"`
23+
NumQueries int `json:"numQueries"`
2324
NumLabels int `json:"numLabels"`
2425
SoftwareInventoryEnabled bool `json:"softwareInventoryEnabled"`
2526
VulnDetectionEnabled bool `json:"vulnDetectionEnabled"`

0 commit comments

Comments
 (0)