49 lines
1.3 KiB
TypeScript
49 lines
1.3 KiB
TypeScript
|
|
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;
|
||
|
|
}
|