From cc766d2260a6562fac802e555f14962b93682754 Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Wed, 27 Feb 2019 18:47:33 +0100 Subject: [PATCH] gcp stackdriver tracing: attach user id (#11033) --- website/server/index.js | 8 +++----- website/server/libs/gcpTraceAgent.js | 12 ++++++++++++ website/server/middlewares/auth.js | 12 +++++++++++- 3 files changed, 26 insertions(+), 6 deletions(-) create mode 100644 website/server/libs/gcpTraceAgent.js diff --git a/website/server/index.js b/website/server/index.js index 1662b33010..c1d6757dee 100644 --- a/website/server/index.js +++ b/website/server/index.js @@ -12,15 +12,13 @@ const setupNconf = require('./libs/setupNconf'); setupNconf(); const nconf = require('nconf'); -const IS_PROD = nconf.get('IS_PROD'); -const STACKDRIVER_TRACING_ENABLED = nconf.get('ENABLE_STACKDRIVER_TRACING') === 'true'; -if (IS_PROD && STACKDRIVER_TRACING_ENABLED) { - require('@google-cloud/trace-agent').start(); // eslint-disable-line global-require -} +// Initialize @google-cloud/trace-agent +require('./libs/gcpTraceAgent'); const cluster = require('cluster'); const logger = require('./libs/logger'); +const IS_PROD = nconf.get('IS_PROD'); const IS_DEV = nconf.get('IS_DEV'); const CORES = Number(nconf.get('WEB_CONCURRENCY')) || 0; diff --git a/website/server/libs/gcpTraceAgent.js b/website/server/libs/gcpTraceAgent.js new file mode 100644 index 0000000000..0e017aa943 --- /dev/null +++ b/website/server/libs/gcpTraceAgent.js @@ -0,0 +1,12 @@ +const nconf = require('nconf'); + +const IS_PROD = nconf.get('IS_PROD'); +const STACKDRIVER_TRACING_ENABLED = nconf.get('ENABLE_STACKDRIVER_TRACING') === 'true'; + +let tracer = null; + +if (IS_PROD && STACKDRIVER_TRACING_ENABLED) { + tracer = require('@google-cloud/trace-agent').start(); // eslint-disable-line global-require +} + +export default tracer; \ No newline at end of file diff --git a/website/server/middlewares/auth.js b/website/server/middlewares/auth.js index ab5987b50e..f4c301acf9 100644 --- a/website/server/middlewares/auth.js +++ b/website/server/middlewares/auth.js @@ -6,6 +6,7 @@ import { } from '../models/user'; import nconf from 'nconf'; import url from 'url'; +import gcpStackdriverTracer from '../libs/gcpTraceAgent'; const COMMUNITY_MANAGER_EMAIL = nconf.get('EMAILS_COMMUNITY_MANAGER_EMAIL'); @@ -34,6 +35,13 @@ function getUserFields (options, req) { return `notifications ${userFieldOptions.join(' ')}`; } +// Make sure stackdriver traces are storing the user id +function stackdriverTraceUserId (userId) { + if (gcpStackdriverTracer) { + gcpStackdriverTracer.getCurrentRootSpan().addLabel('userId', userId); + } +} + // Strins won't be translated here because getUserLanguage has not run yet // Authenticate a request through the x-api-user and x-api key header @@ -64,8 +72,9 @@ export function authWithHeaders (options = {}) { if (user.auth.blocked) throw new NotAuthorized(res.t('accountSuspended', {communityManagerEmail: COMMUNITY_MANAGER_EMAIL, userId: user._id})); res.locals.user = user; - req.session.userId = user._id; + stackdriverTraceUserId(user._id); + return next(); }) .catch(next); @@ -93,6 +102,7 @@ export function authWithSession (req, res, next) { if (!user) throw new NotAuthorized(res.t('invalidCredentials')); res.locals.user = user; + stackdriverTraceUserId(user._id); return next(); }) .catch(next);