import { Body, Controller, Delete, Get, Param, Post, Query } from '@nestjs/common'; import { ScaleWorkloadDto } from './dto/scale-workload.dto'; import { RuntimeService } from './runtime.service'; @Controller('runtime') export class RuntimeController { constructor(private readonly runtimeService: RuntimeService) {} @Get('namespaces') listNamespaces() { return this.runtimeService.listNamespaces(); } @Get('workloads') listWorkloads(@Query('namespace') namespace?: string) { return this.runtimeService.listWorkloads(namespace); } @Get('metrics/pods') listPodMetrics(@Query('namespace') namespace?: string) { return this.runtimeService.listPodMetrics(namespace); } @Post('workloads/:namespace/:kind/:name/restart') restartWorkload( @Param('namespace') namespace: string, @Param('kind') kind: string, @Param('name') name: string, ) { return this.runtimeService.restartWorkload(namespace, kind, name); } @Post('workloads/:namespace/:kind/:name/scale') scaleWorkload( @Param('namespace') namespace: string, @Param('kind') kind: string, @Param('name') name: string, @Body() body: ScaleWorkloadDto, ) { return this.runtimeService.scaleWorkload( namespace, kind, name, body.replicas, ); } @Delete('workloads/:namespace/:kind/:name') deleteWorkload( @Param('namespace') namespace: string, @Param('kind') kind: string, @Param('name') name: string, @Query('deleteService') deleteService?: string, ) { return this.runtimeService.deleteWorkload( namespace, kind, name, deleteService === 'true', ); } @Get('workloads/:namespace/:kind/:name/pvcs') listWorkloadPersistentVolumeClaims( @Param('namespace') namespace: string, @Param('kind') kind: string, @Param('name') name: string, ) { return this.runtimeService.listWorkloadPersistentVolumeClaims( namespace, kind, name, ); } @Delete('workloads/:namespace/:kind/:name/pvcs/:claimName') deleteWorkloadPersistentVolumeClaim( @Param('namespace') namespace: string, @Param('kind') kind: string, @Param('name') name: string, @Param('claimName') claimName: string, ) { return this.runtimeService.deleteWorkloadPersistentVolumeClaim( namespace, kind, name, claimName, ); } @Get('workloads/:namespace/:kind/:name/logs') getWorkloadLogs( @Param('namespace') namespace: string, @Param('kind') kind: string, @Param('name') name: string, @Query('tail') tail?: string, ) { return this.runtimeService.getWorkloadLogs( namespace, kind, name, tail ? Number(tail) : 200, ); } @Get('events') listEvents(@Query('namespace') namespace?: string) { return this.runtimeService.listEvents(namespace); } }