|
| 1 | +import { Controller, Get } from '@nestjs/common' |
| 2 | +import { Monitor, MonitorStatus } from '@cpn-console/shared' |
| 3 | +import type { MonitorInfos } from '@cpn-console/shared' |
| 4 | +import type { ConfigurationService } from '../../cpin-module/infrastructure/configuration/configuration.service' |
| 5 | + |
| 6 | +@Controller('keycloak') |
| 7 | +export class KeycloakController { |
| 8 | + private monitor: Monitor |
| 9 | + |
| 10 | + constructor( |
| 11 | + private readonly configService: ConfigurationService, |
| 12 | + ) { |
| 13 | + this.monitor = new Monitor(async (instance): Promise<MonitorInfos> => { |
| 14 | + instance.lastStatus.lastUpdateTimestamp = Date.now() |
| 15 | + try { |
| 16 | + if (!this.configService.keycloakUrl) { |
| 17 | + throw new Error('keycloakUrl is not defined') |
| 18 | + } |
| 19 | + const res = await fetch(this.configService.keycloakUrl) |
| 20 | + if (res.status === 200) { |
| 21 | + instance.lastStatus.status = MonitorStatus.OK |
| 22 | + instance.lastStatus.message = MonitorStatus.OK |
| 23 | + return instance.lastStatus |
| 24 | + } |
| 25 | + instance.lastStatus.status = MonitorStatus.ERROR |
| 26 | + instance.lastStatus.message = 'Service en erreur' |
| 27 | + return instance.lastStatus |
| 28 | + } catch (error) { |
| 29 | + instance.lastStatus.message = 'Erreur lors la requête' |
| 30 | + instance.lastStatus.status = MonitorStatus.UNKNOW |
| 31 | + instance.lastStatus.cause = error |
| 32 | + } |
| 33 | + return instance.lastStatus |
| 34 | + }) |
| 35 | + } |
| 36 | + |
| 37 | + @Get('status') |
| 38 | + async status(): Promise<MonitorInfos> { |
| 39 | + return this.monitor.lastStatus |
| 40 | + } |
| 41 | +} |
0 commit comments