mirror of
https://github.com/movie-web/backend.git
synced 2025-09-13 12:43:26 +00:00
67 lines
1.8 KiB
TypeScript
67 lines
1.8 KiB
TypeScript
import { handle } from '@/services/handler';
|
|
import { makeRouter } from '@/services/router';
|
|
import { z } from 'zod';
|
|
import { ProviderMetric, status } from '@/db/models/ProviderMetrics';
|
|
import { getMetrics } from '@/modules/metrics';
|
|
|
|
const metricsProviderSchema = z.object({
|
|
tmdbId: z.string(),
|
|
type: z.string(),
|
|
title: z.string(),
|
|
seasonId: z.string().optional(),
|
|
episodeId: z.string().optional(),
|
|
status: z.nativeEnum(status),
|
|
providerId: z.string(),
|
|
embedId: z.string().optional(),
|
|
errorMessage: z.string().optional(),
|
|
fullError: z.string().optional(),
|
|
});
|
|
|
|
const metricsProviderInputSchema = z.object({
|
|
items: z.array(metricsProviderSchema).max(10).min(1),
|
|
});
|
|
|
|
export const metricsRouter = makeRouter((app) => {
|
|
app.post(
|
|
'/metrics/providers',
|
|
{
|
|
schema: {
|
|
body: metricsProviderInputSchema,
|
|
},
|
|
},
|
|
handle(async ({ em, body }) => {
|
|
const entities = body.items.map((v) => {
|
|
const metric = new ProviderMetric();
|
|
em.assign(metric, {
|
|
providerId: v.providerId,
|
|
embedId: v.embedId,
|
|
fullError: v.fullError,
|
|
errorMessage: v.errorMessage,
|
|
episodeId: v.episodeId,
|
|
seasonId: v.seasonId,
|
|
status: v.status,
|
|
title: v.title,
|
|
tmdbId: v.tmdbId,
|
|
type: v.type,
|
|
});
|
|
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);
|
|
return true;
|
|
}),
|
|
);
|
|
});
|