feat(server): improve gql measure (#10706)

This commit is contained in:
darkskygit
2025-03-08 16:39:07 +00:00
parent 552f7c81ee
commit 637cafda37

View File

@@ -4,6 +4,7 @@ import {
GraphQLRequestListener,
} from '@apollo/server';
import { Plugin } from '@nestjs/apollo';
import { Logger } from '@nestjs/common';
import { Response } from 'express';
import { metrics } from '../metrics/metrics';
@@ -17,13 +18,31 @@ export interface RequestContext {
@Plugin()
export class GQLLoggerPlugin implements ApolloServerPlugin {
private readonly logger = new Logger(GQLLoggerPlugin.name);
requestDidStart(
ctx: GraphQLRequestContext<RequestContext>
): Promise<GraphQLRequestListener<GraphQLRequestContext<RequestContext>>> {
const res = ctx.contextValue.req.res as Response;
const operation = ctx.request.operationName;
const headers = ctx.request.http?.headers;
metrics.gql.counter('query_counter').add(1, { operation });
const info = {
operation: ctx.request.operationName,
clientVersion: headers?.get('x-affine-version'),
};
if (!info.operation) {
this.logger.warn(
`GraphQL operation name is not provided (${JSON.stringify({
userAgent: headers?.get('user-agent'),
clientVersion: info.clientVersion,
rayId: headers?.get('cf-ray'),
country: headers?.get('cf-ipcountry'),
})})`
);
}
metrics.gql.counter('query_counter').add(1, info);
const start = Date.now();
function endTimer() {
return Date.now() - start;
@@ -33,7 +52,7 @@ export class GQLLoggerPlugin implements ApolloServerPlugin {
willSendResponse: () => {
const time = endTimer();
res.setHeader('Server-Timing', `gql;dur=${time};desc="GraphQL"`);
metrics.gql.histogram('query_duration').record(time, { operation });
metrics.gql.histogram('query_duration').record(time, info);
return Promise.resolve();
},
didEncounterErrors: ctx => {
@@ -42,7 +61,7 @@ export class GQLLoggerPlugin implements ApolloServerPlugin {
error.log('GraphQL');
metrics.gql.counter('query_error_counter').add(1, {
operation,
...info,
code: error.status,
type: error.type,
error: error.name,