Skip to content

Commit bb84e3e

Browse files
committed
chore(server-nestjs): migrate monitoring probes
Signed-off-by: William Phetsinorath <william.phetsinorath-open@interieur.gouv.fr>
1 parent 3113b78 commit bb84e3e

3 files changed

Lines changed: 60 additions & 0 deletions

File tree

.vscode/launch.json

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,24 @@
155155
"request": "launch",
156156
"url": "http://localhost:8080",
157157
"webRoot": "${workspaceFolder}/apps/client"
158+
},
159+
160+
{
161+
"name": "Launch Server NestJS",
162+
"type": "node",
163+
"request": "launch",
164+
"runtimeExecutable": "pnpm",
165+
"runtimeArgs": [
166+
"run",
167+
"start:debug"
168+
],
169+
"cwd": "${workspaceFolder}/apps/server-nestjs",
170+
"console": "internalConsole",
171+
"restart": true,
172+
"skipFiles": [
173+
"<node_internals>/**",
174+
"${workspaceFolder}/node_modules/**/*.js"
175+
]
158176
}
159177
],
160178
"compounds": [

apps/server-nestjs/src/cpin-module/infrastructure/configuration/configuration.service.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ export class ConfigurationService {
1919

2020
// keycloak
2121
sessionSecret = process.env.SESSION_SECRET
22+
keycloakUrl = process.env.KEYCLOAK_URL
2223
keycloakProtocol = process.env.KEYCLOAK_PROTOCOL
2324
keycloakDomain = process.env.KEYCLOAK_DOMAIN
2425
keycloakRealm = process.env.KEYCLOAK_REALM
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
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

Comments
 (0)