feat(telemetry): rollups, alerts, scheduler, health checks, admin server fns
- pure rollup accumulators with tests; daily upserts keyed date/metric/dim - alert checks with db-backed cooldown and push to admin players - in-process scheduler started from health probes - health endpoint checks pb + supertokens, stale-while-revalidate, always 200 - sse connection counter moved to emitter - telemetry feature server fns: events/errors/groups/rollups/alerts/status
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
import { useServerSuspenseQuery } from "@/lib/tanstack-query/hooks";
|
||||
import {
|
||||
getClientErrorGroups,
|
||||
getRollupRange,
|
||||
getTelemetryRuntimeStatus,
|
||||
listTelemetryAlerts,
|
||||
searchClientErrors,
|
||||
searchClientEvents,
|
||||
} from "./server";
|
||||
import type { ClientErrorSearchParams, ClientEventSearchParams } from "./types";
|
||||
|
||||
interface ErrorGroupParams {
|
||||
from: string;
|
||||
to: string;
|
||||
includeResolved?: boolean;
|
||||
limit?: number;
|
||||
}
|
||||
|
||||
interface RollupRangeParams {
|
||||
metrics: string[];
|
||||
from: string;
|
||||
to: string;
|
||||
dim?: string;
|
||||
}
|
||||
|
||||
export const telemetryKeys = {
|
||||
all: ["telemetry"] as const,
|
||||
events: (params: ClientEventSearchParams) => ["telemetry", "events", params] as const,
|
||||
errors: (params: ClientErrorSearchParams) => ["telemetry", "errors", params] as const,
|
||||
errorGroups: (params: ErrorGroupParams) => ["telemetry", "errorGroups", params] as const,
|
||||
rollups: (params: RollupRangeParams) => ["telemetry", "rollups", params] as const,
|
||||
alerts: (page: number) => ["telemetry", "alerts", page] as const,
|
||||
runtimeStatus: ["telemetry", "runtimeStatus"] as const,
|
||||
};
|
||||
|
||||
export const telemetryQueries = {
|
||||
events: (params: ClientEventSearchParams = {}) => ({
|
||||
queryKey: telemetryKeys.events(params),
|
||||
queryFn: () => searchClientEvents({ data: params }),
|
||||
}),
|
||||
errors: (params: ClientErrorSearchParams = {}) => ({
|
||||
queryKey: telemetryKeys.errors(params),
|
||||
queryFn: () => searchClientErrors({ data: params }),
|
||||
}),
|
||||
errorGroups: (params: ErrorGroupParams) => ({
|
||||
queryKey: telemetryKeys.errorGroups(params),
|
||||
queryFn: () => getClientErrorGroups({ data: params }),
|
||||
}),
|
||||
rollups: (params: RollupRangeParams) => ({
|
||||
queryKey: telemetryKeys.rollups(params),
|
||||
queryFn: () => getRollupRange({ data: params }),
|
||||
}),
|
||||
alerts: (page = 1) => ({
|
||||
queryKey: telemetryKeys.alerts(page),
|
||||
queryFn: () => listTelemetryAlerts({ data: { page } }),
|
||||
}),
|
||||
runtimeStatus: () => ({
|
||||
queryKey: telemetryKeys.runtimeStatus,
|
||||
queryFn: () => getTelemetryRuntimeStatus(),
|
||||
}),
|
||||
};
|
||||
|
||||
export const useClientEvents = (params: ClientEventSearchParams = {}) =>
|
||||
useServerSuspenseQuery(telemetryQueries.events(params));
|
||||
|
||||
export const useClientErrors = (params: ClientErrorSearchParams = {}) =>
|
||||
useServerSuspenseQuery(telemetryQueries.errors(params));
|
||||
|
||||
export const useClientErrorGroups = (params: ErrorGroupParams) =>
|
||||
useServerSuspenseQuery(telemetryQueries.errorGroups(params));
|
||||
|
||||
export const useRollupRange = (params: RollupRangeParams) =>
|
||||
useServerSuspenseQuery(telemetryQueries.rollups(params));
|
||||
|
||||
export const useTelemetryRuntimeStatus = () =>
|
||||
useServerSuspenseQuery(telemetryQueries.runtimeStatus());
|
||||
Reference in New Issue
Block a user