@topgroup/diginext
Version:
A BUILD SERVER & CLI to deploy apps to any Kubernetes clusters.
67 lines (66 loc) • 2.55 kB
JavaScript
;
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;