Files
glchat/web/src/api/metrics.ts
T

49 lines
1.3 KiB
TypeScript
Raw Normal View History

import { request } from './client';
/** Живые метрики инстанса для дашборда в настройках (AGENT.md 7.19). */
export interface InstanceMetrics {
cpu: {
/** Загрузка в процентах от доступного времени (лимит контейнера или ядра). */
percent: number;
cores: number;
source: 'cgroup' | 'host' | '';
};
memory: {
used_bytes: number;
total_bytes: number;
percent: number;
source: 'cgroup' | 'host' | '';
};
disk: {
used_bytes: number;
total_bytes: number;
free_bytes: number;
};
database: {
bytes: number;
wal_bytes: number;
};
checks: InstanceCheck[];
health: 'ok' | 'warn' | 'failed';
uptime_seconds: number;
version: string;
commit: string;
collected_at: string;
}
export interface InstanceCheck {
name: string;
status: 'ok' | 'warn' | 'failed' | 'off';
message?: string;
}
export const metricsQueryKey = ['instance', 'metrics'] as const;
export async function fetchInstanceMetrics(signal?: AbortSignal): Promise<InstanceMetrics> {
const payload = await request<{ metrics: InstanceMetrics }>(
'/instance/metrics',
signal === undefined ? {} : { signal },
);
return payload.metrics;
}