| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- const { fetchString } = require('@overleaf/fetch-utils')
- const fs = require('node:fs')
- class LogLevelChecker {
- constructor(logger, defaultLevel) {
- this.logger = logger
- this.defaultLevel = defaultLevel
- }
- start() {
- // check for log level override on startup
- this.checkLogLevel()
- // re-check log level every minute
- this.checkInterval = setInterval(this.checkLogLevel.bind(this), 1000 * 60)
- this.checkInterval.unref()
- }
- stop() {
- clearInterval(this.checkInterval)
- }
- async checkLogLevel() {
- try {
- const end = await this.getTracingEndTime()
- if (end > Date.now()) {
- this.logger.level('trace')
- } else {
- this.logger.level(this.defaultLevel)
- }
- } catch (e) {
- this.logger.level(this.defaultLevel)
- }
- }
- async getTracingEndTime() {
- return 0
- }
- }
- class FileLogLevelChecker extends LogLevelChecker {
- async getTracingEndTime() {
- const strEndTime = await fs.promises.readFile('/logging/tracingEndTime')
- return parseInt(strEndTime, 10)
- }
- }
- class GCEMetadataLogLevelChecker extends LogLevelChecker {
- async getTracingEndTime() {
- const options = {
- headers: {
- 'Metadata-Flavor': 'Google',
- },
- }
- const uri = `http://metadata.google.internal/computeMetadata/v1/project/attributes/${this.logger.fields.name}-setLogLevelEndTime`
- const strEndTime = await fetchString(uri, options)
- return parseInt(strEndTime, 10)
- }
- }
- module.exports = { FileLogLevelChecker, GCEMetadataLogLevelChecker }
|