From 929612d07284116c105f9d1293914f276ba058f3 Mon Sep 17 00:00:00 2001 From: krutoo Date: Fri, 17 Mar 2023 11:41:08 +0500 Subject: [PATCH] #38 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - metrics: удалена функция createMetricsHttpApp (major) - preset/node: добавлен провайдер http-сервера с метриками (вместо createMetricsHttpApp) (major) --- src/metrics/node.ts | 20 -------------------- src/preset/node/index.ts | 35 ++++++++++++++++++++++------------- 2 files changed, 22 insertions(+), 33 deletions(-) diff --git a/src/metrics/node.ts b/src/metrics/node.ts index 690ef10..f1706e4 100644 --- a/src/metrics/node.ts +++ b/src/metrics/node.ts @@ -1,4 +1,3 @@ -import express, { Application } from 'express'; import * as PromClient from 'prom-client'; import { ConventionalLabels } from './constants'; @@ -16,25 +15,6 @@ export interface DefaultNodeMetrics { renderDuration: PromClient.Histogram; } -/** - * Возвращает новое express-приложение, настроенное для выдачи информации о метриках. - * @return Приложение. - */ -export function createMetricsHttpApp(): Application { - const app = express(); - - PromClient.collectDefaultMetrics(); - - app.get('/', async function (req, res) { - const metrics = await PromClient.register.metrics(); - - res.setHeader('Content-Type', PromClient.register.contentType); - res.send(metrics); - }); - - return app; -} - /** * Возвращает набор готовых метрик по умолчанию для приложений. * @todo Возможно стоит унести это в пресет. diff --git a/src/preset/node/index.ts b/src/preset/node/index.ts index 829e4b1..1b25e47 100644 --- a/src/preset/node/index.ts +++ b/src/preset/node/index.ts @@ -19,10 +19,10 @@ import { renderMetricsMiddleware, responseMetricsMiddleware, } from '../../http-server/middleware/metrics'; -import { createDefaultMetrics, createMetricsHttpApp } from '../../metrics/node'; +import { createDefaultMetrics } from '../../metrics/node'; import { JaegerExporter } from '@opentelemetry/exporter-jaeger'; import { create } from 'middleware-axios'; -import Express, { Handler } from 'express'; +import Express, { Application, Handler } from 'express'; import { init, Handlers, getCurrentHub } from '@sentry/node'; import { NodeTracerProvider } from '@opentelemetry/sdk-trace-node'; import { Resource } from '@opentelemetry/resources'; @@ -38,6 +38,7 @@ import pino from 'pino'; import PinoPretty from 'pino-pretty'; import { config as applyDotenv } from 'dotenv'; import { composeMiddleware } from '../../http-server/utils'; +import * as PromClient from 'prom-client'; /** * Возвращает preset с зависимостями по умолчанию для frontend-микросервисов на Node.js. @@ -59,7 +60,7 @@ export function PresetNode(): Preset { [KnownToken.Tracing.tracerProviderResource, provideTracerProviderResource], // metrics - [KnownToken.Metrics.httpApp, createMetricsHttpApp], + [KnownToken.Metrics.httpApp, provideMetricsHttpApp], // http client [KnownToken.Http.Client.factory, () => create], @@ -148,27 +149,20 @@ export function provideTracer(resolve: Resolve): Tracer { export function provideSpanExporter(resolve: Resolve): SpanExporter { const source = resolve(KnownToken.Config.source); - const exporter = new JaegerExporter({ + return new JaegerExporter({ host: source.require('JAEGER_AGENT_HOST'), port: parseInt(source.require('JAEGER_AGENT_PORT')) || undefined, }); - - return exporter; } export function provideTracerProvider(resolve: Resolve): BasicTracerProvider { const exporter = resolve(KnownToken.Tracing.spanExporter); const resource = resolve(KnownToken.Tracing.tracerProviderResource); - const provider = new NodeTracerProvider({ - resource, - }); + const provider = new NodeTracerProvider({ resource }); provider.addSpanProcessor(new BatchSpanProcessor(exporter)); - - provider.register({ - propagator: new JaegerPropagator(), - }); + provider.register({ propagator: new JaegerPropagator() }); return provider; } @@ -230,3 +224,18 @@ export function provideKnownHttpApiHosts(resolve: Resolve): StrictMap