mirror of
				https://github.com/Unleash/unleash.git
				synced 2025-10-27 11:02:16 +01: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