diff --git a/client/src/driver/BitbakeDriver.ts b/client/src/driver/BitbakeDriver.ts index 2f6b2b2d..26f8f642 100644 --- a/client/src/driver/BitbakeDriver.ts +++ b/client/src/driver/BitbakeDriver.ts @@ -65,7 +65,7 @@ export class BitbakeDriver { }) const disposables = [ child.onData((data) => { - logger.debug(data.toString()) + logger.debug_ratelimit(data.toString()) }), child.onExit(() => { this.bitbakeProcess = undefined diff --git a/client/src/lib/src/utils/OutputLogger.ts b/client/src/lib/src/utils/OutputLogger.ts index 1bc6462a..64bc6774 100644 --- a/client/src/lib/src/utils/OutputLogger.ts +++ b/client/src/lib/src/utils/OutputLogger.ts @@ -42,6 +42,38 @@ export class OutputLogger { this.log(message, 'debug') } + public debug_ratelimit (message: string): void { + if (!this.shouldLog(this.level)) { + // OPTIM Skip the regex check if the log level is not high enough + return + } + + if (OutputLogger.rateLimitPatterns.test(message)) { + const now = Date.now() + if (now - this.rateLimitStart < OutputLogger.rateLimit) { + this.rateLimitCount++ + return + } + this.rateLimitStart = now + if (this.rateLimitCount > 0) { + this.debug(`Rate limited ${this.rateLimitCount} messages`) + this.rateLimitCount = 0 + } + } + + this.debug(message) + } + + /* Catches messages like: + * 0: busybox-1.37.0-r0 do_fetch - 6s (pid 280) 7% |######### | 28.7M/s + * Parsing recipes: 10% |################ | ETA: 0:00:19 + * No currently running tasks (0 of 3) 0% | | + */ + private static readonly rateLimitPatterns = /% \|/ + private static readonly rateLimit = 1000 + private rateLimitStart = 0 + private rateLimitCount = 0 + public warn (message: string): void { this.log(message, 'warning') }