Skip to content

Commit ccb0361

Browse files
committed
Reduce duplication
1 parent d70ceba commit ccb0361

File tree

2 files changed

+24
-42
lines changed

2 files changed

+24
-42
lines changed

packages/remix/src/server/instrumentServer.ts

Lines changed: 6 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,11 @@ import { DEBUG_BUILD } from '../utils/debug-build';
4343
import { createRoutes, getTransactionName } from '../utils/utils';
4444
import { extractData, isResponse, json } from '../utils/vendor/response';
4545
import { captureRemixServerException, errorHandleDataFunction } from './errors';
46-
import { generateSentryServerTimingHeader, isCloudflareEnv } from './serverTimingTracePropagation';
46+
import {
47+
generateSentryServerTimingHeader,
48+
injectServerTimingHeaderValue,
49+
isCloudflareEnv,
50+
} from './serverTimingTracePropagation';
4751

4852
type AppData = unknown;
4953
type RemixRequest = Parameters<RequestHandler>[0];
@@ -60,37 +64,6 @@ function isCatchResponse(response: Response): boolean {
6064
return response.headers.get('X-Remix-Catch') != null;
6165
}
6266

63-
/**
64-
* Injects Server-Timing header with Sentry trace context into a Response.
65-
*/
66-
function injectServerTimingHeader(response: Response, precomputedHeader?: string | null): Response {
67-
const serverTiming = precomputedHeader !== undefined ? precomputedHeader : generateSentryServerTimingHeader();
68-
69-
if (!serverTiming) {
70-
return response;
71-
}
72-
73-
if (response.bodyUsed) {
74-
DEBUG_BUILD && debug.warn('Cannot inject Server-Timing header: response body already consumed');
75-
return response;
76-
}
77-
78-
try {
79-
const headers = new Headers(response.headers);
80-
const existingTiming = headers.get('Server-Timing');
81-
headers.set('Server-Timing', existingTiming ? `${existingTiming}, ${serverTiming}` : serverTiming);
82-
83-
return new Response(response.body, {
84-
status: response.status,
85-
statusText: response.statusText,
86-
headers,
87-
});
88-
} catch (e) {
89-
DEBUG_BUILD && debug.warn('Failed to inject Server-Timing header into response', e);
90-
return response;
91-
}
92-
}
93-
9467
/**
9568
* Sentry utility to be used in place of `handleError` function of Remix v2
9669
* Remix Docs: https://remix.run/docs/en/main/file-conventions/entry.server#handleerror
@@ -208,7 +181,7 @@ function makeWrappedDocumentRequestFunction(instrumentTracing?: boolean) {
208181
}
209182

210183
if (serverTimingHeader && response instanceof Response) {
211-
return injectServerTimingHeader(response, serverTimingHeader);
184+
return injectServerTimingHeaderValue(response, serverTimingHeader);
212185
}
213186

214187
return response;

packages/remix/src/server/serverTimingTracePropagation.ts

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -91,16 +91,11 @@ export function mergeSentryServerTimingHeader(
9191
}
9292

9393
/**
94-
* Add Sentry trace context to Response headers via Server-Timing.
94+
* Inject a precomputed Server-Timing header value into a Response.
9595
* Returns a new Response with the header added.
96+
* @internal
9697
*/
97-
export function addSentryServerTimingHeader(response: Response, options?: ServerTimingTraceOptions): Response {
98-
const sentryTiming = generateSentryServerTimingHeader(options);
99-
100-
if (!sentryTiming) {
101-
return response;
102-
}
103-
98+
export function injectServerTimingHeaderValue(response: Response, serverTimingValue: string): Response {
10499
if (response.bodyUsed) {
105100
DEBUG_BUILD && debug.warn('Cannot add Server-Timing header: response body already consumed');
106101
return response;
@@ -110,7 +105,7 @@ export function addSentryServerTimingHeader(response: Response, options?: Server
110105
const headers = new Headers(response.headers);
111106
const existing = headers.get('Server-Timing');
112107

113-
headers.set('Server-Timing', existing ? `${existing}, ${sentryTiming}` : sentryTiming);
108+
headers.set('Server-Timing', existing ? `${existing}, ${serverTimingValue}` : serverTimingValue);
114109

115110
return new Response(response.body, {
116111
status: response.status,
@@ -122,3 +117,17 @@ export function addSentryServerTimingHeader(response: Response, options?: Server
122117
return response;
123118
}
124119
}
120+
121+
/**
122+
* Add Sentry trace context to Response headers via Server-Timing.
123+
* Returns a new Response with the header added.
124+
*/
125+
export function addSentryServerTimingHeader(response: Response, options?: ServerTimingTraceOptions): Response {
126+
const sentryTiming = generateSentryServerTimingHeader(options);
127+
128+
if (!sentryTiming) {
129+
return response;
130+
}
131+
132+
return injectServerTimingHeaderValue(response, sentryTiming);
133+
}

0 commit comments

Comments
 (0)