eduverse-backend / src /modules /monitoring /controllers /monitoring.controller.ts
amirhamdi's picture
all sprint 4 dev b endpoints works fine
f5957a1
Raw
History Blame Contribute Delete
2.54 kB
import {
Controller,
Get,
UseGuards,
} from '@nestjs/common';
import {
ApiTags,
ApiBearerAuth,
ApiOperation,
ApiResponse,
} from '@nestjs/swagger';
import { JwtAuthGuard } from '../../auth/guards/jwt-auth.guard';
import { RolesGuard } from '../../auth/guards/roles.guard';
import { Roles } from '../../../common/decorators/roles.decorator';
import { RoleName } from '../../auth/entities/role.entity';
import { MonitoringService } from '../services/monitoring.service';
@ApiTags('πŸ“Š Monitoring')
@ApiBearerAuth('JWT-auth')
@Controller('api/monitoring')
@UseGuards(JwtAuthGuard, RolesGuard)
export class MonitoringController {
constructor(private readonly monitoringService: MonitoringService) {}
@Get('servers')
@Roles(RoleName.ADMIN, RoleName.IT_ADMIN)
@ApiOperation({
summary: 'Get server monitoring records',
description:
'Retrieves all server monitoring records ordered by most recent check. ' +
'Access roles: ADMIN, IT_ADMIN. Uses table: `server_monitoring`.',
})
@ApiResponse({ status: 200, description: 'Server monitoring records returned' })
@ApiResponse({ status: 401, description: 'Unauthorized' })
@ApiResponse({ status: 403, description: 'Forbidden – insufficient role' })
async getServers() {
return this.monitoringService.getServers();
}
@Get('health')
@Roles(RoleName.ADMIN, RoleName.IT_ADMIN)
@ApiOperation({
summary: 'Get current server health',
description:
'Returns real-time server health metrics (CPU, memory, uptime) from the OS. ' +
'Access roles: ADMIN, IT_ADMIN. Uses: Node.js os module (no DB table).',
})
@ApiResponse({ status: 200, description: 'Current server health metrics returned' })
@ApiResponse({ status: 401, description: 'Unauthorized' })
@ApiResponse({ status: 403, description: 'Forbidden – insufficient role' })
async getHealth() {
return this.monitoringService.getHealth();
}
@Get('metrics')
@Roles(RoleName.ADMIN, RoleName.IT_ADMIN)
@ApiOperation({
summary: 'Get server metrics with history',
description:
'Returns current health plus the last 50 historical server_monitoring records. ' +
'Access roles: ADMIN, IT_ADMIN. Uses table: `server_monitoring`.',
})
@ApiResponse({ status: 200, description: 'Metrics with history returned' })
@ApiResponse({ status: 401, description: 'Unauthorized' })
@ApiResponse({ status: 403, description: 'Forbidden – insufficient role' })
async getMetrics() {
return this.monitoringService.getMetrics();
}
}