diff --git a/packages/cli-repl/src/cli-repl.spec.ts b/packages/cli-repl/src/cli-repl.spec.ts index 5e56aa8cfa..c3e3ce3cc2 100644 --- a/packages/cli-repl/src/cli-repl.spec.ts +++ b/packages/cli-repl/src/cli-repl.spec.ts @@ -443,6 +443,7 @@ describe('CliRepl', () => { expect(requests[0].req.headers.authorization) .to.include(Buffer.from('🔑:').toString('base64')); expect(requests[0].body).to.include('identify'); + expect(requests[0].body).to.include(process.platform); }); it('stops posting analytics data after disableTelemetry()', async() => { diff --git a/packages/cli-repl/src/setup-logger-and-telemetry.spec.ts b/packages/cli-repl/src/setup-logger-and-telemetry.spec.ts index cf2fcfc895..a85a58ce96 100644 --- a/packages/cli-repl/src/setup-logger-and-telemetry.spec.ts +++ b/packages/cli-repl/src/setup-logger-and-telemetry.spec.ts @@ -1,3 +1,4 @@ +/* eslint-disable camelcase */ import { expect } from 'chai'; import setupLoggerAndTelemetry from './setup-logger-and-telemetry'; import { EventEmitter } from 'events'; @@ -85,15 +86,18 @@ describe('setupLoggerAndTelemetry', () => { expect(logOutput[15].msg).to.match(/"original":"1\+1"/); expect(logOutput[15].msg).to.match(/"rewritten":"2"/); expect(logOutput[16].msg).to.match(/"version":"3.6.1"/); + + const mongosh_version = require('../package.json').version; expect(analyticsOutput).to.deep.equal([ - [ 'identify', { userId: '53defe995fa47e6c13102d9d' } ], - [ 'identify', { userId: '53defe995fa47e6c13102d9d' } ], + [ 'identify', { userId: '53defe995fa47e6c13102d9d', traits: { platform: process.platform } } ], + [ 'identify', { userId: '53defe995fa47e6c13102d9d', traits: { platform: process.platform } } ], [ 'track', { userId: '53defe995fa47e6c13102d9d', event: 'New Connection', properties: { + mongosh_version, session_id: '5fb3c20ee1507e894e5340f3', is_localhost: true, is_atlas: false, @@ -106,17 +110,40 @@ describe('setupLoggerAndTelemetry', () => { { userId: '53defe995fa47e6c13102d9d', event: 'Error', - properties: { name: 'MongoshInvalidInputError', code: 'CLIREPL-1005', scope: 'CLIREPL', metadata: { cause: 'x' } } + properties: { + mongosh_version, + name: 'MongoshInvalidInputError', + code: 'CLIREPL-1005', + scope: 'CLIREPL', + metadata: { cause: 'x' } + } + } + ], + [ + 'track', + { + userId: '53defe995fa47e6c13102d9d', + event: 'Help', + properties: { mongosh_version } + } + ], + [ + 'track', + { + userId: '53defe995fa47e6c13102d9d', + event: 'Use', + properties: { mongosh_version } } ], - [ 'track', { userId: '53defe995fa47e6c13102d9d', event: 'Help' } ], - [ 'track', { userId: '53defe995fa47e6c13102d9d', event: 'Use' } ], [ 'track', { userId: '53defe995fa47e6c13102d9d', event: 'Show', - properties: { method: 'dbs' } + properties: { + mongosh_version, + method: 'dbs' + } } ] ]); diff --git a/packages/cli-repl/src/setup-logger-and-telemetry.ts b/packages/cli-repl/src/setup-logger-and-telemetry.ts index f7f4fdd02b..2cb537bab1 100644 --- a/packages/cli-repl/src/setup-logger-and-telemetry.ts +++ b/packages/cli-repl/src/setup-logger-and-telemetry.ts @@ -1,3 +1,4 @@ +/* eslint-disable camelcase */ import redactInfo from 'mongodb-redact'; import { redactPassword } from '@mongosh/history'; import type { Logger } from 'pino'; @@ -11,8 +12,19 @@ import type { } from '@mongosh/types'; interface MongoshAnalytics { - identify: (info: any) => void; - track: (info: any) => void; + identify(message: { + userId: string, + traits: { platform: string } + }): void; + + track(message: { + userId: string, + event: string, + properties: { + mongosh_version: string, + [key: string]: any; + } + }): void; } // set up a noop, in case we are not able to connect to segment. @@ -27,6 +39,7 @@ export default function setupLoggerAndTelemetry( makeLogger: () => Logger, makeAnalytics: () => MongoshAnalytics): void { const log = makeLogger(); + const mongosh_version = require('../package.json').version; let userId: string; let telemetry: boolean; @@ -47,7 +60,11 @@ export default function setupLoggerAndTelemetry( analytics.track({ userId, event: 'New Connection', - properties: { session_id: logId, ...argsWithoutUri } + properties: { + mongosh_version, + session_id: logId, + ...argsWithoutUri + } }); } }); @@ -59,13 +76,13 @@ export default function setupLoggerAndTelemetry( bus.on('mongosh:new-user', function(id: string, enableTelemetry: boolean) { userId = id; telemetry = enableTelemetry; - if (telemetry) analytics.identify({ userId }); + if (telemetry) analytics.identify({ userId, traits: { platform: process.platform } }); }); bus.on('mongosh:update-user', function(id: string, enableTelemetry: boolean) { userId = id; telemetry = enableTelemetry; - if (telemetry) analytics.identify({ userId }); + if (telemetry) analytics.identify({ userId, traits: { platform: process.platform } }); log.info('mongosh:update-user', { enableTelemetry }); }); @@ -77,6 +94,7 @@ export default function setupLoggerAndTelemetry( userId, event: 'Error', properties: { + mongosh_version, name: error.name, code: error.code, scope: error.scope, @@ -92,7 +110,10 @@ export default function setupLoggerAndTelemetry( if (telemetry) { analytics.track({ userId, - event: 'Help' + event: 'Help', + properties: { + mongosh_version + } }); } }); @@ -107,7 +128,10 @@ export default function setupLoggerAndTelemetry( if (telemetry) { analytics.track({ userId, - event: 'Use' + event: 'Use', + properties: { + mongosh_version + } }); } }); @@ -119,7 +143,10 @@ export default function setupLoggerAndTelemetry( analytics.track({ userId, event: 'Show', - properties: { method: args.method } + properties: { + mongosh_version, + method: args.method + } }); } });