import { Controller, Get, Query } from '@nestjs/common'; import { PrometheusService } from './prometheus.service'; import { ApiTags, ApiOperation, ApiResponse, ApiQuery } from '@nestjs/swagger'; @ApiTags('Metrics - HTTP') @Controller('metrics') export class MetricsController { constructor(private readonly prometheusService: PrometheusService) { } @Get() @ApiOperation({ summary: 'Получиние данных по конкретной метрике' }) @ApiQuery({ name: 'metric', required: true, description: 'Имя метрики для извлечения' }) @ApiQuery({ name: 'start', required: false, description: 'Начальная временная метка для запроса диапазона' }) @ApiQuery({ name: 'end', required: false, description: 'Конечная временная метка для запроса диапазона' }) @ApiQuery({ name: 'step', required: false, description: 'Размер шага для запроса диапазона' }) @ApiResponse({ status: 200, description: 'Успешно получены метрические данные' }) @ApiResponse({ status: 400, description: 'Указанные недопустимые параметры' }) @ApiResponse({ status: 500, description: 'Внутренняя ошибка сервера' }) async getMetrics( @Query('metric') metric: string, @Query('start') start: number, @Query('end') end: number, @Query('step') step: number, ) { if (start && end && step) { return this.prometheusService.fetchMetricsRange(metric, start, end, step); } return this.prometheusService.fetchMetrics(metric); } @Get('/all') @ApiOperation({ summary: 'Получение списка всех метрик' }) @ApiResponse({ status: 200, description: 'Список извлеченных метрик' }) async getAllMetrics() { return this.prometheusService.fetchAllMetrics(); } @Get('/all-values') @ApiOperation({ summary: 'Получение списка всех метрик и их значения' }) @ApiResponse({ status: 200, description: 'Все метрики с полученными значениями' }) async getAllMetricsWithValues() { return this.prometheusService.fetchAllMetricsWithValues(); } }