Skip to content

Commit

Permalink
#38
Browse files Browse the repository at this point in the history
- metrics: удалена функция createMetricsHttpApp (major)
- preset/node: добавлен провайдер http-сервера с метриками (вместо createMetricsHttpApp) (major)
  • Loading branch information
krutoo committed Mar 17, 2023
1 parent f8806ce commit 929612d
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 33 deletions.
20 changes: 0 additions & 20 deletions src/metrics/node.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import express, { Application } from 'express';
import * as PromClient from 'prom-client';
import { ConventionalLabels } from './constants';

Expand All @@ -16,25 +15,6 @@ export interface DefaultNodeMetrics {
renderDuration: PromClient.Histogram<typeof ConventionalLabels.SSR[number]>;
}

/**
* Возвращает новое 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 Возможно стоит унести это в пресет.
Expand Down
35 changes: 22 additions & 13 deletions src/preset/node/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand All @@ -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.
Expand All @@ -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],
Expand Down Expand Up @@ -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;
}
Expand Down Expand Up @@ -230,3 +224,18 @@ export function provideKnownHttpApiHosts(resolve: Resolve): StrictMap<KnownHttpA
source,
);
}

export function provideMetricsHttpApp(): Application {
PromClient.collectDefaultMetrics();

const app = Express();

app.get('/', async function (req, res) {
const metrics = await PromClient.register.metrics();

res.setHeader('Content-Type', PromClient.register.contentType);
res.send(metrics);
});

return app;
}

0 comments on commit 929612d

Please sign in to comment.