mirror of
https://github.com/Unleash/unleash.git
synced 2025-05-31 01:16:01 +02:00
feat: Unique connection tracking (#9067)
This commit is contained in:
parent
73515d78ce
commit
cef10eee02
@ -130,7 +130,7 @@ test('should collect metrics for requests', async () => {
|
||||
|
||||
const metrics = await prometheusRegister.metrics();
|
||||
expect(metrics).toMatch(
|
||||
/http_request_duration_milliseconds\{quantile="0\.99",path="somePath",method="GET",status="200",appName="undefined"\}.*1337/,
|
||||
/http_request_duration_milliseconds\{quantile="0\.99",path="somePath",method="GET",status="200",appName="undefined",connectionId="undefined"\}.*1337/,
|
||||
);
|
||||
});
|
||||
|
||||
|
@ -124,7 +124,7 @@ export function registerPrometheusMetrics(
|
||||
const requestDuration = createSummary({
|
||||
name: 'http_request_duration_milliseconds',
|
||||
help: 'App response time',
|
||||
labelNames: ['path', 'method', 'status', 'appName'],
|
||||
labelNames: ['path', 'method', 'status', 'appName', 'connectionId'],
|
||||
percentiles: [0.1, 0.5, 0.9, 0.95, 0.99],
|
||||
maxAgeSeconds: 600,
|
||||
ageBuckets: 5,
|
||||
@ -700,13 +700,14 @@ export function registerPrometheusMetrics(
|
||||
|
||||
eventBus.on(
|
||||
events.REQUEST_TIME,
|
||||
({ path, method, time, statusCode, appName }) => {
|
||||
({ path, method, time, statusCode, appName, connectionId }) => {
|
||||
requestDuration
|
||||
.labels({
|
||||
path,
|
||||
method,
|
||||
status: statusCode,
|
||||
appName,
|
||||
connectionId,
|
||||
})
|
||||
.observe(time);
|
||||
},
|
||||
|
@ -55,12 +55,19 @@ export function responseTimeMetrics(
|
||||
// when pathname is undefined use a fallback
|
||||
pathname = pathname ?? collapse(req.path);
|
||||
let appName: string | undefined;
|
||||
let connectionId: string | undefined;
|
||||
if (
|
||||
!flagResolver.isEnabled('responseTimeWithAppNameKillSwitch') &&
|
||||
(instanceStatsService.getAppCountSnapshot('7d') ??
|
||||
appNameReportingThreshold) < appNameReportingThreshold
|
||||
) {
|
||||
appName = req.headers['unleash-appname'] ?? req.query.appName;
|
||||
appName =
|
||||
req.headers['x-unleash-appname'] ??
|
||||
req.headers['unleash-appname'] ??
|
||||
req.query.appName;
|
||||
if (flagResolver.isEnabled('uniqueSdkTracking')) {
|
||||
connectionId = req.headers['x-unleash-connection-id'];
|
||||
}
|
||||
}
|
||||
|
||||
const timingInfo = {
|
||||
@ -69,6 +76,7 @@ export function responseTimeMetrics(
|
||||
statusCode,
|
||||
time,
|
||||
appName,
|
||||
connectionId,
|
||||
};
|
||||
if (!res.locals.responseTimeEmitted) {
|
||||
res.locals.responseTimeEmitted = true;
|
||||
|
@ -61,7 +61,8 @@ export type IFlagKey =
|
||||
| 'etagVariant'
|
||||
| 'oidcRedirect'
|
||||
| 'deltaApi'
|
||||
| 'newHostedAuthHandler';
|
||||
| 'newHostedAuthHandler'
|
||||
| 'uniqueSdkTracking';
|
||||
|
||||
export type IFlags = Partial<{ [key in IFlagKey]: boolean | Variant }>;
|
||||
|
||||
@ -290,6 +291,10 @@ const flags: IFlags = {
|
||||
process.env.UNLEASH_EXPERIMENTAL_NEW_HOSTED_AUTH_HANDLER,
|
||||
false,
|
||||
),
|
||||
uniqueSdkTracking: parseEnvVarBoolean(
|
||||
process.env.UNLEASH_EXPERIMENTAL_UNIQUE_SDK_TRACKING,
|
||||
false,
|
||||
),
|
||||
};
|
||||
|
||||
export const defaultExperimentalOptions: IExperimentalOptions = {
|
||||
|
Loading…
Reference in New Issue
Block a user