fleet/website/api/controllers/webhooks/receive-usage-analytics.js
Eric b7a85fba48
Website: Update usage analytics sent to Datadog (#16572)
Related to: #16458

Changes:
- Updated the receive-usage-analytics webhook not to send metrics to
Datadog.
- Updated the send-aggregated-metrics-to-datadog script to build
aggregated metrics from the JSON values reported by Fleet instances
(stored errors, host count by orbit version, host count by osquery
version, host count by operating system), and updated the script to not
report metrics from Fleet instances using the development premium
license key.
2024-02-02 17:23:33 -06:00

52 lines
2.9 KiB
JavaScript
Vendored

module.exports = {
friendlyName: 'Receive usage analytics',
description: 'Receive anonymous usage analytics from deployments of Fleet running in production. (Not fleetctl preview or dev-mode deployments.)',
inputs: {
anonymousIdentifier: { required: true, type: 'string', example: '9pnzNmrES3mQG66UQtd29cYTiX2+fZ4CYxDvh495720=', description: 'An anonymous identifier telling us which Fleet deployment this is.', },
fleetVersion: { required: true, type: 'string', example: 'x.x.x' },
licenseTier: { type: 'string', isIn: ['free', 'premium', 'unknown'], defaultsTo: 'unknown' },
numHostsEnrolled: { required: true, type: 'number', min: 0, custom: (num) => Math.floor(num) === num },
numUsers: { type: 'number', defaultsTo: 0 },
numTeams: { type: 'number', defaultsTo: 0 },
numPolicies: { type: 'number', defaultsTo: 0 },
numLabels: { type: 'number', defaultsTo: 0 },
softwareInventoryEnabled: { type: 'boolean', defaultsTo: false },
vulnDetectionEnabled: { type: 'boolean', defaultsTo: false },
systemUsersEnabled: { type: 'boolean', defaultsTo: false },
hostsStatusWebHookEnabled: { type: 'boolean', defaultsTo: false },
numWeeklyActiveUsers: { type: 'number', defaultsTo: 0 },
numWeeklyPolicyViolationDaysActual: { type: 'number', defaultsTo: 0 },
numWeeklyPolicyViolationDaysPossible: { type: 'number', defaultsTo: 0 },
hostsEnrolledByOperatingSystem: { type: {}, defaultsTo: {} },
hostsEnrolledByOrbitVersion: { type: [{orbitVersion: 'string', numHosts: 'number'}], defaultsTo: [] }, // TODO: The name of this parameter does not match naming conventions.
hostsEnrolledByOsqueryVersion: { type: [{osqueryVersion: 'string', numHosts: 'number'}], defaultsTo: [] }, // TODO: The name of this parameter does not match naming conventions.
storedErrors: { type: [{}], defaultsTo: [] }, // TODO migrate all rows that have "[]" to {}
numHostsNotResponding: { type: 'number', defaultsTo: 0, description: 'The number of hosts per deployment that have not submitted results for distibuted queries. A host is counted as not responding if Fleet hasn\'t received a distributed write to requested distibuted queries for the host during the 2-hour interval since the host was last seen. Hosts that have not been seen for 7 days or more are not counted.', },
organization: { type: 'string', defaultsTo: 'unknown', description: 'For Fleet Premium deployments, the organization registered with the license.', },
mdmMacOsEnabled: {type: 'boolean', defaultsTo: false},
mdmWindowsEnabled: {type: 'boolean', defaultsTo: false},
liveQueryDisabled: {type: 'boolean', defaultsTo: false},
hostExpiryEnabled: {type: 'boolean', defaultsTo: false},
},
exits: {
success: { description: 'Analytics data was stored successfully.' },
},
fn: async function (inputs) {
// Create a database record for these usage statistics.
await HistoricalUsageSnapshot.create(Object.assign({}, inputs));
}
};