From a8bbe04caef82df44b6e2dfa4ad92b9966c42113 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Wed, 30 Sep 2020 14:42:35 +0200 Subject: [PATCH] Adding logs to track overheating --- back/src/Controller/IoSocketController.ts | 2 +- back/src/Enum/EnvironmentVariable.ts | 4 +++- back/src/Services/CpuTracker.ts | 15 +++++++++++++++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index 87a8c5e2..42be1e1d 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -419,7 +419,7 @@ export class IoSocketController { const userMoves = userMovesMessage.toObject(); // If CPU is high, let's drop messages of users moving (we will only dispatch the final position) - if (cpuTracker.getCpuPercent() > 80 && userMoves.position?.moving === true) { + if (cpuTracker.isOverHeating() && userMoves.position?.moving === true) { return; } diff --git a/back/src/Enum/EnvironmentVariable.ts b/back/src/Enum/EnvironmentVariable.ts index c910bb66..b69ba00c 100644 --- a/back/src/Enum/EnvironmentVariable.ts +++ b/back/src/Enum/EnvironmentVariable.ts @@ -5,6 +5,7 @@ const GROUP_RADIUS = process.env.GROUP_RADIUS ? Number(process.env.GROUP_RADIUS) const ALLOW_ARTILLERY = process.env.ALLOW_ARTILLERY ? process.env.ALLOW_ARTILLERY == 'true' : false; const ADMIN_API_URL = process.env.ADMIN_API_URL || null; const ADMIN_API_TOKEN = process.env.ADMIN_API_TOKEN || null; +const CPU_OVERHEAT_THRESHOLD = Number(process.env.CPU_OVERHEAT_THRESHOLD) || 80; export { SECRET_KEY, @@ -14,4 +15,5 @@ export { ADMIN_API_TOKEN, GROUP_RADIUS, ALLOW_ARTILLERY, -} \ No newline at end of file + CPU_OVERHEAT_THRESHOLD, +} diff --git a/back/src/Services/CpuTracker.ts b/back/src/Services/CpuTracker.ts index abc0a17b..c7d57f3d 100644 --- a/back/src/Services/CpuTracker.ts +++ b/back/src/Services/CpuTracker.ts @@ -1,3 +1,4 @@ +import {CPU_OVERHEAT_THRESHOLD} from "../Enum/EnvironmentVariable"; function secNSec2ms(secNSec: Array|number) { if (Array.isArray(secNSec)) { @@ -8,6 +9,7 @@ function secNSec2ms(secNSec: Array|number) { class CpuTracker { private cpuPercent: number = 0; + private overHeating: boolean = false; constructor() { let time = process.hrtime.bigint() @@ -23,6 +25,15 @@ class CpuTracker { this.cpuPercent = Math.round(100 * (elapUserMS + elapSystMS) / Number(elapTimeMS) * 1000000) time = elapTime; + + if (!this.overHeating && this.cpuPercent > CPU_OVERHEAT_THRESHOLD) { + this.overHeating = true; + console.warn('CPU high threshold alert. Going in "overheat" mode'); + } else if (this.overHeating && this.cpuPercent <= CPU_OVERHEAT_THRESHOLD) { + this.overHeating = false; + console.log('CPU is back to normal. Canceling "overheat" mode'); + } + /*console.log('elapsed time ms: ', elapTimeMS) console.log('elapsed user ms: ', elapUserMS) console.log('elapsed system ms:', elapSystMS) @@ -33,6 +44,10 @@ class CpuTracker { public getCpuPercent(): number { return this.cpuPercent; } + + public isOverHeating(): boolean { + return this.overHeating; + } } const cpuTracker = new CpuTracker();