mirror of
https://github.com/movie-web/backend.git
synced 2025-09-13 12:43:26 +00:00
Add prometheus exporter for provider metrics
This commit is contained in:
@@ -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' });
|
||||||
|
@@ -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;
|
||||||
}),
|
}),
|
||||||
|
Reference in New Issue
Block a user