66 lines
1.7 KiB
TypeScript
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>[]>(useRuntimeConfig().public.apiBase + '/monitorings/' + monitoringId + '/jobs')
|
|
.then(response => {
|
|
onSuccess(response.data)
|
|
});
|
|
}
|
|
|
|
static getNodeMonitorings(from: Date, to: Date, onSuccess: (monitoredPod: MonitoredResource<Node>[]) => void)
|
|
{
|
|
axios.get<MonitoredResource<Node>[]>(useRuntimeConfig().public.apiBase + '/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
|
|
) { }
|
|
} |