frontend/components/monitorings/MonitoredResource.ts
2025-11-06 15:02:04 +01:00

66 lines
1.7 KiB
TypeScript

import axios from "axios";
import type { Node } from "~/classes/Node";
import type { Pod } from "~/classes/Pod";
import { Data } from "../chart/Dataset";
import dayjs from "dayjs";
export class MonitoredResource<T>
{
constructor (
public resource: T,
public jobs: IndexCollection[]
) { }
static getMonitorings(monitoringId: string, onSuccess: (monitoredPod: MonitoredResource<Pod>[]) => void)
{
axios.get<MonitoredResource<Pod>[]>(StringUtils.format("%s/monitorings/%s/jobs", ApiConfig.getHttpBase(), monitoringId))
.then(response => {
onSuccess(response.data)
});
}
static getNodeMonitorings(from: Date, to: Date, onSuccess: (monitoredPod: MonitoredResource<Node>[]) => void)
{
axios.get<MonitoredResource<Node>[]>(ApiConfig.getHttpBase() + '/monitorings/nodes/jobs', {
params: {
from: from,
to: to
}
})
.then(response => {
onSuccess(response.data)
});
}
static extractDataset(key: string, jobs: IndexCollection[]): Data[]
{
const data = [] as Data[];
for (const job of jobs)
{
const metrics = job.metrics[key];
if (metrics != null)
{
data.push(new Data(metrics.average, dayjs.utc(job.timestamp).local().toDate()));
}
}
console.log(data);
return data;
}
}
export class IndexCollection
{
constructor (
public metrics: Record<string, Metric>,
public timestamp: Date
) { }
}
export class Metric
{
constructor (
public count: number,
public sum: number,
public average: number
) { }
}