UNPKG

@vtex/api

Version:
42 lines (41 loc) 1.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.metricDirectiveTypeDefs = exports.Metric = void 0; const graphql_1 = require("graphql"); const graphql_tools_1 = require("graphql-tools"); const __1 = require("../../../../../.."); class Metric extends graphql_tools_1.SchemaDirectiveVisitor { visitFieldDefinition(field) { const { resolve = graphql_1.defaultFieldResolver, name: fieldName } = field; const { name = `${__1.APP.NAME}-${fieldName}` } = this.args; field.resolve = async (root, args, ctx, info) => { let failedToResolve = false; let result = null; let ellapsed = [0, 0]; try { const start = process.hrtime(); result = await resolve(root, args, ctx, info); ellapsed = process.hrtime(start); } catch (error) { result = error; failedToResolve = true; } ctx.graphql.status = failedToResolve ? 'error' : 'success'; const payload = { [ctx.graphql.status]: 1, }; metrics.batch(`graphql-metric-${name}`, failedToResolve ? undefined : ellapsed, payload); if (failedToResolve) { throw result; } return result; }; } } exports.Metric = Metric; exports.metricDirectiveTypeDefs = ` directive @metric ( name: String ) on FIELD_DEFINITION `;