From a7bd4786f3397f093005e1d2e511433574be9cf3 Mon Sep 17 00:00:00 2001 From: mrjvs Date: Fri, 10 Nov 2023 22:14:41 +0100 Subject: [PATCH] ive choped chopped it --- src/backend/helpers/report.ts | 51 +++++++++++++++++++++++++ src/pages/parts/player/ScrapingPart.tsx | 12 +++++- 2 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 src/backend/helpers/report.ts diff --git a/src/backend/helpers/report.ts b/src/backend/helpers/report.ts new file mode 100644 index 00000000..c3448908 --- /dev/null +++ b/src/backend/helpers/report.ts @@ -0,0 +1,51 @@ +import { ofetch } from "ofetch"; +import { useCallback } from "react"; + +import { useBackendUrl } from "@/hooks/auth/useBackendUrl"; +import { ScrapingSegment } from "@/hooks/useProviderScrape"; + +export type ProviderMetric = { + tmdbId: string; + type: string; + title: string; + seasonId?: string; + episodeId?: string; + status: "failed" | "notfound" | "success"; + providerId: string; + embedId?: string; + errorMessage?: string; + fullError?: string; +}; + +export async function reportProviders( + url: string, + items: ProviderMetric[] +): Promise { + return ofetch("/metrics/providers", { + method: "POST", + body: { + items, + }, + baseURL: url, + }); +} + +export function scrapSegmentToProviderMetric( + _segment: ScrapingSegment +): ProviderMetric { + // TODO actually convert this + return {} as any; +} + +export function useReportProviders() { + const url = useBackendUrl(); + // TODO constant url + const report = useCallback( + (items: ProviderMetric[]) => { + reportProviders(url, items); + }, + [url] + ); + + return { report }; +} diff --git a/src/pages/parts/player/ScrapingPart.tsx b/src/pages/parts/player/ScrapingPart.tsx index 23f2ce9a..60a86585 100644 --- a/src/pages/parts/player/ScrapingPart.tsx +++ b/src/pages/parts/player/ScrapingPart.tsx @@ -3,6 +3,10 @@ import classNames from "classnames"; import { useEffect, useRef } from "react"; import type { AsyncReturnType } from "type-fest"; +import { + scrapSegmentToProviderMetric, + useReportProviders, +} from "@/backend/helpers/report"; import { usePlayer } from "@/components/player/hooks/usePlayer"; import { ScrapeCard, @@ -26,6 +30,7 @@ export interface ScrapingProps { export function ScrapingPart(props: ScrapingProps) { const { playMedia } = usePlayer(); + const { report } = useReportProviders(); const { startScraping, sourceOrder, sources, currentSource } = useScrape(); const containerRef = useRef(null); @@ -58,9 +63,14 @@ export function ScrapingPart(props: ScrapingProps) { resultRef.current.sources, resultRef.current.sourceOrder ); + report( + Object.values(resultRef.current.sources).map((v) => + scrapSegmentToProviderMetric(v) + ) + ); props.onGetStream?.(output); })(); - }, [startScraping, props, playMedia]); + }, [startScraping, props, playMedia, report]); const currentProvider = sourceOrder.find( (s) => sources[s.id].status === "pending"