Add prometheus exporter for provider metrics

This commit is contained in:
William Oldham 2023-11-04 14:01:10 +00:00
parent 19ea5a3e5a
commit 616778ab6d
2 changed files with 41 additions and 0 deletions

View File

@ -9,6 +9,15 @@ const log = scopedLogger('metrics');
export type Metrics = { export type Metrics = {
user: Counter<'namespace'>; user: Counter<'namespace'>;
providerMetrics: Counter<
| 'title'
| 'tmdb_id'
| 'season_id'
| 'episode_id'
| 'status'
| 'type'
| 'provider_id'
>;
}; };
let metrics: null | Metrics = null; let metrics: null | Metrics = null;
@ -29,8 +38,26 @@ export async function setupMetrics(app: FastifyInstance) {
help: 'user_help', help: 'user_help',
labelNames: ['namespace'], labelNames: ['namespace'],
}), }),
providerMetrics: new Counter({
name: 'provider_metrics',
help: 'provider_metrics',
labelNames: [
'episode_id',
'provider_id',
'season_id',
'status',
'title',
'tmdb_id',
'type',
],
}),
}; };
const promClient = app.metrics.client;
promClient.register.registerMetric(metrics.user);
promClient.register.registerMetric(metrics.providerMetrics);
const orm = getORM(); const orm = getORM();
const em = orm.em.fork(); const em = orm.em.fork();
log.info(`Syncing up metrics...`, { evt: 'sync' }); log.info(`Syncing up metrics...`, { evt: 'sync' });

View File

@ -2,6 +2,7 @@ import { handle } from '@/services/handler';
import { makeRouter } from '@/services/router'; import { makeRouter } from '@/services/router';
import { z } from 'zod'; import { z } from 'zod';
import { ProviderMetric, status } from '@/db/models/ProviderMetrics'; import { ProviderMetric, status } from '@/db/models/ProviderMetrics';
import { getMetrics } from '@/modules/metrics';
const metricsProviderSchema = z.object({ const metricsProviderSchema = z.object({
tmdbId: z.string(), tmdbId: z.string(),
@ -45,6 +46,19 @@ export const metricsRouter = makeRouter((app) => {
}); });
return metric; return metric;
}); });
entities.forEach((entity) => {
getMetrics().providerMetrics.inc({
episode_id: entity.episodeId,
provider_id: entity.providerId,
season_id: entity.seasonId,
status: entity.status,
title: entity.title,
tmdb_id: entity.tmdbId,
type: entity.type,
});
});
await em.persistAndFlush(entities); await em.persistAndFlush(entities);
return true; return true;
}), }),