Skip to content

Commit 26127f3

Browse files
authored
repo sync
2 parents d6a09fd + 58319a2 commit 26127f3

2 files changed

Lines changed: 50 additions & 30 deletions

File tree

lib/instrument-middleware.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
const path = require('path')
2+
const statsd = require('./statsd')
3+
4+
module.exports = function instrumentMiddleware (relativePath) {
5+
// Requires the file as if it were being required from '../middleware/index.js'.
6+
// This is a little wonky, but let's us write `app.use(instrument(path))` and
7+
// maintain the name of the file, instead of hard-coding it for each middleware.
8+
const middleware = require(path.resolve(__dirname, '../middleware', relativePath))
9+
10+
// Check if the middleware is an async function, to use the appropriate timer
11+
const isAsyncFunction = middleware.constructor.name === 'AsyncFunction'
12+
13+
// Name it `middleware.<filename>`
14+
const name = `middleware.${path.basename(relativePath)}`
15+
16+
return isAsyncFunction
17+
? statsd.asyncTimer(middleware, name)
18+
: statsd.timer(middleware, name)
19+
}

middleware/index.js

Lines changed: 31 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
const express = require('express')
2+
const instrument = require('../lib/instrument-middleware')
23

34
const isDevelopment = process.env.NODE_ENV === 'development'
45

@@ -24,7 +25,7 @@ module.exports = function (app) {
2425
// See https://expressjs.com/en/guide/behind-proxies.html
2526
app.set('trust proxy', 1)
2627
app.use(require('./rate-limit'))
27-
app.use(require('./handle-invalid-paths'))
28+
app.use(instrument('./handle-invalid-paths'))
2829

2930
// *** Security ***
3031
app.use(require('./cors'))
@@ -43,50 +44,50 @@ module.exports = function (app) {
4344
// *** Config and context for redirects ***
4445
app.use(require('./req-utils')) // Must come before record-redirect and events
4546
app.use(require('./record-redirect'))
46-
app.use(require('./detect-language')) // Must come before context, breadcrumbs, find-page, handle-errors, homepages
47-
app.use(asyncMiddleware(require('./context'))) // Must come before early-access-*, handle-redirects
47+
app.use(instrument('./detect-language')) // Must come before context, breadcrumbs, find-page, handle-errors, homepages
48+
app.use(asyncMiddleware(instrument('./context'))) // Must come before early-access-*, handle-redirects
4849

4950
// *** Redirects, 3xx responses ***
5051
// I ordered these by use frequency
5152
app.use(require('connect-slashes')(false))
52-
app.use(require('./redirects/external'))
53-
app.use(require('./redirects/help-to-docs'))
54-
app.use(require('./redirects/language-code-redirects')) // Must come before contextualizers
55-
app.use(require('./redirects/handle-redirects')) // Must come before contextualizers
53+
app.use(instrument('./redirects/external'))
54+
app.use(instrument('./redirects/help-to-docs'))
55+
app.use(instrument('./redirects/language-code-redirects')) // Must come before contextualizers
56+
app.use(instrument('./redirects/handle-redirects')) // Must come before contextualizers
5657

5758
// *** Config and context for rendering ***
58-
app.use(require('./find-page')) // Must come before archived-enterprise-versions, breadcrumbs, featured-links, products, render-page
59-
app.use(require('./block-robots'))
59+
app.use(instrument('./find-page')) // Must come before archived-enterprise-versions, breadcrumbs, featured-links, products, render-page
60+
app.use(instrument('./block-robots'))
6061

6162
// *** Rendering, 2xx responses ***
6263
// I largely ordered these by use frequency
63-
app.use(require('./archived-enterprise-versions-assets')) // Must come before static/assets
64+
app.use(instrument('./archived-enterprise-versions-assets')) // Must come before static/assets
6465
app.use('/dist', express.static('dist'))
6566
app.use('/assets', express.static('assets'))
6667
app.use('/public', express.static('data/graphql'))
67-
app.use('/events', require('./events'))
68-
app.use('/csrf', require('./csrf-route'))
69-
app.use('/search', require('./search'))
70-
app.use(require('./archived-enterprise-versions'))
71-
app.use(require('./robots'))
72-
app.use(/(\/.*)?\/early-access$/, require('./contextualizers/early-access-links'))
73-
app.use(require('./categories-for-support-team'))
74-
app.use(require('./loaderio-verification'))
75-
app.get('/_500', asyncMiddleware(require('./trigger-error')))
68+
app.use('/events', instrument('./events'))
69+
app.use('/csrf', instrument('./csrf-route'))
70+
app.use('/search', instrument('./search'))
71+
app.use(instrument('./archived-enterprise-versions'))
72+
app.use(instrument('./robots'))
73+
app.use(/(\/.*)?\/early-access$/, instrument('./contextualizers/early-access-links'))
74+
app.use(instrument('./categories-for-support-team'))
75+
app.use(instrument('./loaderio-verification'))
76+
app.get('/_500', asyncMiddleware(instrument('./trigger-error')))
7677

7778
// *** Preparation for render-page ***
78-
app.use(asyncMiddleware(require('./contextualizers/enterprise-release-notes')))
79-
app.use(require('./contextualizers/graphql'))
80-
app.use(require('./contextualizers/rest'))
81-
app.use(require('./contextualizers/webhooks'))
82-
app.use(require('./breadcrumbs'))
83-
app.use(require('./early-access-breadcrumbs'))
84-
app.use(require('./enterprise-server-releases'))
85-
app.use(require('./dev-toc'))
86-
app.use(require('./featured-links'))
87-
app.use(require('./learning-track'))
79+
app.use(asyncMiddleware(instrument('./contextualizers/enterprise-release-notes')))
80+
app.use(instrument('./contextualizers/graphql'))
81+
app.use(instrument('./contextualizers/rest'))
82+
app.use(instrument('./contextualizers/webhooks'))
83+
app.use(instrument('./breadcrumbs'))
84+
app.use(instrument('./early-access-breadcrumbs'))
85+
app.use(instrument('./enterprise-server-releases'))
86+
app.use(instrument('./dev-toc'))
87+
app.use(instrument('./featured-links'))
88+
app.use(instrument('./learning-track'))
8889

8990
// *** Rendering, must go last ***
90-
app.get('/*', asyncMiddleware(require('./render-page')))
91+
app.get('/*', asyncMiddleware(instrument('./render-page')))
9192
app.use(require('./handle-errors'))
9293
}

0 commit comments

Comments
 (0)