UNPKG

@topgroup/diginext

Version:

A BUILD SERVER & CLI to deploy apps to any Kubernetes clusters.

67 lines (66 loc) 2.55 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.KubernetesMetricsService = void 0; const axios_1 = __importDefault(require("axios")); const dayjs_1 = __importDefault(require("dayjs")); const zod_1 = require("zod"); const MetricDataPointSchema = zod_1.z.object({ time: zod_1.z.number(), value: zod_1.z.number(), metric: zod_1.z.object({ pod: zod_1.z.string().optional(), namespace: zod_1.z.string().optional(), }), }); const TimeSeriesMetricSchema = zod_1.z.object({ time: zod_1.z.number(), memory: zod_1.z.number(), cpu: zod_1.z.number(), pod: zod_1.z.string().optional(), namespace: zod_1.z.string().optional(), }); class KubernetesMetricsService { constructor(prometheusUrl) { this.prometheusUrl = prometheusUrl; } async getMetricsTimeSeries(query, start, end, step = 60) { try { const response = await axios_1.default.get(`${this.prometheusUrl}/api/v1/query_range`, { params: { query, start: (0, dayjs_1.default)(start).format(), end: (0, dayjs_1.default)(end).format(), step, }, }); const metrics = response.data.data.result .map((result) => { const parsedMetric = MetricDataPointSchema.parse(result); return { time: parsedMetric.time, memory: parseFloat(parsedMetric.value[1]), cpu: parseFloat(parsedMetric.value[1]), pod: parsedMetric.metric.pod, namespace: parsedMetric.metric.namespace, }; }) .map((metric) => TimeSeriesMetricSchema.parse(metric)); return metrics; } catch (error) { console.error("Error fetching metrics:", error); return []; } } // Example method for memory metrics async getMemoryMetrics() { const end = new Date(); const start = new Date(end.getTime() - 10 * 60000); // Last 10 minutes const memoryQuery = 'sum(container_memory_usage_bytes{namespace!=""}) by (pod, namespace) / 1024 / 1024'; return this.getMetricsTimeSeries(memoryQuery, start, end); } } exports.KubernetesMetricsService = KubernetesMetricsService;