File tree Expand file tree Collapse file tree
dotcom-rendering/src/server Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ import type { NextFunction , Request , RequestHandler , Response } from 'express' ;
2+
3+ const getTargetGroupHeaderValue = ( ) => {
4+ if ( process . env . NODE_ENV === 'production' ) {
5+ // See https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-environment-variables.html
6+ return process . env . AWS_EXECUTION_ENV ?. startsWith ( 'AWS_ECS_' ) === true
7+ ? 'ecs'
8+ : 'ec2' ;
9+ }
10+
11+ return 'dev' ;
12+ } ;
13+
14+ const getHeaders : ( ) => Record < string , string > = ( ) => {
15+ const backendApp = process . env . GU_APP ?? 'rendering' ;
16+ const targetGroup = getTargetGroupHeaderValue ( ) ;
17+
18+ return {
19+ 'X-Gu-Backend-App' : backendApp ,
20+ 'X-Gu-Backend-App-Target-Group' : targetGroup ,
21+ } ;
22+ } ;
23+
24+ /**
25+ * Middleware to add response headers useful for debugging.
26+ *
27+ * @see https://expressjs.com/en/guide/using-middleware
28+ */
29+ export const responseHeaderMiddleware : RequestHandler = (
30+ req : Request ,
31+ res : Response ,
32+ next : NextFunction ,
33+ ) => {
34+ const headers = getHeaders ( ) ;
35+
36+ for ( const [ key , value ] of Object . entries ( headers ) ) {
37+ res . setHeader ( key , value ) ;
38+ }
39+ next ( ) ;
40+ } ;
Original file line number Diff line number Diff line change @@ -28,6 +28,7 @@ import {
2828import { handleAppsThrasher } from './handler.thrasher.apps' ;
2929import { getABTestsFromQueryParams } from './lib/get-abtests-from-query-params' ;
3030import { getContentFromURLMiddleware } from './lib/get-content-from-url' ;
31+ import { responseHeaderMiddleware } from './lib/header-middleware' ;
3132import { requestLoggerMiddleware } from './lib/logging-middleware' ;
3233import { recordError } from './lib/logging-store' ;
3334
@@ -105,6 +106,8 @@ const renderer = Router();
105106renderer . use ( getContentFromURLMiddleware ) ;
106107renderer . use ( getABTestsFromQueryParams ) ;
107108renderer . use ( requestLoggerMiddleware ) ;
109+ renderer . use ( responseHeaderMiddleware ) ;
110+
108111renderer . get ( '/Article/*url' , handleArticle ) ;
109112renderer . get ( '/Interactive/*url' , handleInteractive ) ;
110113renderer . get ( '/Blocks/*url' , handleBlocks ) ;
Original file line number Diff line number Diff line change @@ -28,6 +28,7 @@ import {
2828} from './handler.sportDataPage' ;
2929import { handleAppsThrasher } from './handler.thrasher.apps' ;
3030import { recordBaselineCloudWatchMetrics } from './lib/aws/metrics-baseline' ;
31+ import { responseHeaderMiddleware } from './lib/header-middleware' ;
3132import { logger } from './lib/logging' ;
3233import { requestLoggerMiddleware } from './lib/logging-middleware' ;
3334import { recordError } from './lib/logging-store' ;
@@ -40,6 +41,7 @@ export const prodServer = (): void => {
4041 app . use ( express . json ( { limit : '50mb' } ) ) ;
4142 app . use ( requestLoggerMiddleware ) ;
4243 app . use ( compression ( ) ) ;
44+ app . use ( responseHeaderMiddleware ) ;
4345
4446 app . get ( '/_healthcheck' , ( req : Request , res : Response ) => {
4547 res . status ( 200 ) . send ( 'OKAY' ) ;
You can’t perform that action at this time.
0 commit comments