From e39bf4b616fb8a4b7b9d1b626e2baf11afbb21bc Mon Sep 17 00:00:00 2001 From: Irina Shestak Date: Thu, 4 Jun 2020 11:40:41 +0200 Subject: [PATCH 1/7] identify user when running mongosh:update-user --- packages/cli-repl/src/logger.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/cli-repl/src/logger.ts b/packages/cli-repl/src/logger.ts index ba1e6d2068..cb6ce360e7 100644 --- a/packages/cli-repl/src/logger.ts +++ b/packages/cli-repl/src/logger.ts @@ -97,6 +97,7 @@ export default function logger(bus: any, logDir: string): void { bus.on('mongosh:update-user', function(id, enableTelemetry) { userId = id; telemetry = enableTelemetry; + if (telemetry) analytics.identify({ userId }); log.info('mongosh:update-user', { enableTelemetry }); }); From 0daa0f53c7bbac6990b40ca821f9b61ad13e476e Mon Sep 17 00:00:00 2001 From: Irina Shestak Date: Thu, 4 Jun 2020 11:41:18 +0200 Subject: [PATCH 2/7] do not log segment api key anymore --- packages/cli-repl/src/logger.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/cli-repl/src/logger.ts b/packages/cli-repl/src/logger.ts index cb6ce360e7..7107b00291 100644 --- a/packages/cli-repl/src/logger.ts +++ b/packages/cli-repl/src/logger.ts @@ -67,7 +67,6 @@ export default function logger(bus: any, logDir: string): void { let analytics = new NoopAnalytics(); try { // this file gets written as a part of a release - log.warn(require('./analytics-config.js').SEGMENT_API_KEY); analytics = new Analytics(require('./analytics-config.js').SEGMENT_API_KEY); } catch (e) { bus.emit('mongosh:error', e); From 1bee30813b8328f1f7a459f7df947c5522d77dfe Mon Sep 17 00:00:00 2001 From: Irina Shestak Date: Thu, 4 Jun 2020 12:15:26 +0200 Subject: [PATCH 3/7] toString on both ObjectID creations to make sure it's always a string --- packages/cli-repl/package-lock.json | 5 +++++ packages/cli-repl/package.json | 1 + packages/cli-repl/src/cli-repl.ts | 21 ++++++++++++++------- packages/cli-repl/src/logger.ts | 2 +- packages/java-shell/package-lock.json | 6 +++--- 5 files changed, 24 insertions(+), 11 deletions(-) diff --git a/packages/cli-repl/package-lock.json b/packages/cli-repl/package-lock.json index 3068f83d09..3034afff5b 100644 --- a/packages/cli-repl/package-lock.json +++ b/packages/cli-repl/package-lock.json @@ -309,6 +309,11 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, + "fast-json-parse": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fast-json-parse/-/fast-json-parse-1.0.3.tgz", + "integrity": "sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw==" + }, "fast-redact": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-2.0.0.tgz", diff --git a/packages/cli-repl/package.json b/packages/cli-repl/package.json index 5f6a136390..e2a5ad2fff 100644 --- a/packages/cli-repl/package.json +++ b/packages/cli-repl/package.json @@ -49,6 +49,7 @@ "analytics-node": "^3.4.0-beta.1", "ansi-escape-sequences": "^5.1.2", "bson": "^4.0.4", + "fast-json-parse": "^1.0.3", "is-recoverable-error": "^1.0.0", "lodash.set": "^4.3.2", "minimist": "^1.2.5", diff --git a/packages/cli-repl/src/cli-repl.ts b/packages/cli-repl/src/cli-repl.ts index b03f9aab19..0e6df3db0d 100644 --- a/packages/cli-repl/src/cli-repl.ts +++ b/packages/cli-repl/src/cli-repl.ts @@ -2,19 +2,22 @@ import { CliServiceProvider, NodeOptions } from '@mongosh/service-provider-server'; import formatOutput, { formatError } from './format-output'; +import { LineByLineInput } from './line-by-line-input'; +import { TELEMETRY, MONGOSH_WIKI } from './constants'; import ShellEvaluator from '@mongosh/shell-evaluator'; import isRecoverableError from 'is-recoverable-error'; import { MongoshWarning } from '@mongosh/errors'; import { changeHistory } from '@mongosh/history'; import { REPLServer, Recoverable } from 'repl'; import getConnectInfo from './connect-info'; -import { TELEMETRY, MONGOSH_WIKI } from './constants'; +import jsonParse from 'fast-json-parse'; import CliOptions from './cli-options'; import completer from './completer'; import i18n from '@mongosh/i18n'; import { ObjectId } from 'bson'; import repl from 'pretty-repl'; import Nanobus from 'nanobus'; +import { redactPwd } from '.'; import logger from './logger'; import mkdirp from 'mkdirp'; import clr from './clr'; @@ -23,8 +26,6 @@ import util from 'util'; import read from 'read'; import os from 'os'; import fs from 'fs'; -import { redactPwd } from '.'; -import { LineByLineInput } from './line-by-line-input'; /** * Connecting text key. @@ -243,17 +244,23 @@ class CliRepl { try { fd = fs.openSync(configPath, 'wx'); - this.userId = new ObjectId(Date.now()); + this.userId = new ObjectId(Date.now()).toString(); this.enableTelemetry = true; this.disableGreetingMessage = false; this.bus.emit('mongosh:new-user', this.userId, this.enableTelemetry); this.writeConfigFileSync(configPath); } catch (err) { if (err.code === 'EEXIST') { - const config = JSON.parse(fs.readFileSync(configPath, 'utf8')); - this.userId = config.userId; + const config = jsonParse(fs.readFileSync(configPath, 'utf8')); + + if (config.err) { + this.bus.emit('mongosh:error', 'Unable to parse user config', err) + return; + } + + this.userId = config.value.userId; this.disableGreetingMessage = true; - this.enableTelemetry = config.enableTelemetry; + this.enableTelemetry = config.value.enableTelemetry; this.bus.emit('mongosh:update-user', this.userId, this.enableTelemetry); return; } diff --git a/packages/cli-repl/src/logger.ts b/packages/cli-repl/src/logger.ts index 7107b00291..6561d74a8b 100644 --- a/packages/cli-repl/src/logger.ts +++ b/packages/cli-repl/src/logger.ts @@ -57,7 +57,7 @@ NoopAnalytics.prototype.identify = function(): void {}; NoopAnalytics.prototype.track = function(): void {}; export default function logger(bus: any, logDir: string): void { - const session_id = new ObjectId(Date.now()); + const session_id = new ObjectId(Date.now()).toString(); const logDest = path.join(logDir, `${session_id}_log`); const log = pino({ name: 'monogsh' }, pino.destination(logDest)); console.log(`Current sessionID: ${session_id}`); diff --git a/packages/java-shell/package-lock.json b/packages/java-shell/package-lock.json index 2a95677db8..0649fafbed 100644 --- a/packages/java-shell/package-lock.json +++ b/packages/java-shell/package-lock.json @@ -940,9 +940,9 @@ "dev": true }, "pbkdf2": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", - "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.0.tgz", + "integrity": "sha512-wHMFZ6HTLGlB9f/WsQBs5OwMQJoLXYuJUzbA+j+hRBf7+Y8KcXpatzIviIcTy1OAyhWQp08nyiPO8Dnv0z4Sww==", "dev": true, "requires": { "create-hash": "^1.1.2", From 9238cdd0757f15c7dacae84b2626c8b968a04282 Mon Sep 17 00:00:00 2001 From: Irina Shestak Date: Thu, 4 Jun 2020 12:23:20 +0200 Subject: [PATCH 4/7] log node version as part of the connection log event --- packages/cli-repl/src/connect-info.spec.ts | 2 ++ packages/cli-repl/src/connect-info.ts | 2 ++ packages/cli-repl/src/logger.ts | 1 + 3 files changed, 5 insertions(+) diff --git a/packages/cli-repl/src/connect-info.spec.ts b/packages/cli-repl/src/connect-info.spec.ts index cd80f97678..7c829af218 100644 --- a/packages/cli-repl/src/connect-info.spec.ts +++ b/packages/cli-repl/src/connect-info.spec.ts @@ -85,6 +85,7 @@ describe('getConnectInfo', function() { is_genuine: true, non_genuine_server_name: 'mongodb', server_arch: 'x86_64', + node_version: process.version, server_os: 'osx', uri: ATLAS_URI }; @@ -107,6 +108,7 @@ describe('getConnectInfo', function() { is_genuine: true, non_genuine_server_name: 'mongodb', server_arch: 'x86_64', + node_version: process.version, server_os: 'osx', uri: ATLAS_URI }; diff --git a/packages/cli-repl/src/connect-info.ts b/packages/cli-repl/src/connect-info.ts index 4f0d3e9b6a..cd1cb23d93 100644 --- a/packages/cli-repl/src/connect-info.ts +++ b/packages/cli-repl/src/connect-info.ts @@ -15,6 +15,7 @@ interface ConnectInfo { dl_version?: string; is_genuine: boolean; non_genuine_server_name: string; + node_version: string; uri: string; } @@ -42,6 +43,7 @@ export default function getConnectInfo(uri: string, buildInfo: any, cmdLineOpts: auth_type, is_data_lake, dl_version, + node_version: process.version; is_genuine, non_genuine_server_name }; diff --git a/packages/cli-repl/src/logger.ts b/packages/cli-repl/src/logger.ts index 6561d74a8b..99847d0624 100644 --- a/packages/cli-repl/src/logger.ts +++ b/packages/cli-repl/src/logger.ts @@ -47,6 +47,7 @@ interface ConnectEvent { dl_version?: string; is_genuine: boolean; non_genuine_server_name: string; + node_version: string; uri: string; } From 6df9b36f368bc6a6971bb5e6fd3d95273dffd551 Mon Sep 17 00:00:00 2001 From: Irina Shestak Date: Thu, 4 Jun 2020 14:13:21 +0200 Subject: [PATCH 5/7] add a comment for jsonParse --- packages/cli-repl/src/cli-repl.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/cli-repl/src/cli-repl.ts b/packages/cli-repl/src/cli-repl.ts index 0e6df3db0d..b20cf493f4 100644 --- a/packages/cli-repl/src/cli-repl.ts +++ b/packages/cli-repl/src/cli-repl.ts @@ -251,6 +251,8 @@ class CliRepl { this.writeConfigFileSync(configPath); } catch (err) { if (err.code === 'EEXIST') { + // make sure we catch errors for json parse and always have err and + // value on config result const config = jsonParse(fs.readFileSync(configPath, 'utf8')); if (config.err) { From 2ef614ddb7fc91619185eb68c23fc6d47af38b75 Mon Sep 17 00:00:00 2001 From: Irina Shestak Date: Thu, 4 Jun 2020 14:15:16 +0200 Subject: [PATCH 6/7] lint error --- packages/cli-repl/src/cli-repl.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cli-repl/src/cli-repl.ts b/packages/cli-repl/src/cli-repl.ts index b20cf493f4..2c4c71e289 100644 --- a/packages/cli-repl/src/cli-repl.ts +++ b/packages/cli-repl/src/cli-repl.ts @@ -256,7 +256,7 @@ class CliRepl { const config = jsonParse(fs.readFileSync(configPath, 'utf8')); if (config.err) { - this.bus.emit('mongosh:error', 'Unable to parse user config', err) + this.bus.emit('mongosh:error', 'Unable to parse user config', err); return; } From 92bdbe8e3ac1e7dbd2e421ac629f35cf2a7da49b Mon Sep 17 00:00:00 2001 From: Irina Shestak Date: Thu, 4 Jun 2020 14:28:39 +0200 Subject: [PATCH 7/7] , instead of ; --- packages/cli-repl/src/connect-info.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cli-repl/src/connect-info.ts b/packages/cli-repl/src/connect-info.ts index cd1cb23d93..c061b8d19a 100644 --- a/packages/cli-repl/src/connect-info.ts +++ b/packages/cli-repl/src/connect-info.ts @@ -43,7 +43,7 @@ export default function getConnectInfo(uri: string, buildInfo: any, cmdLineOpts: auth_type, is_data_lake, dl_version, - node_version: process.version; + node_version: process.version, is_genuine, non_genuine_server_name };