From 4fd03cd61638d80d423b7864824ee56a185e5de3 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Fri, 21 Mar 2025 11:12:19 +0100 Subject: [PATCH] refactor(backend): Gebruik EnvVars ipv. process.env --- backend/src/config.ts | 5 ----- backend/src/logging/initalize.ts | 22 +++++++++++++--------- backend/src/mikro-orm.config.ts | 3 +-- backend/src/util/envvars.ts | 12 ++++++++++-- 4 files changed, 24 insertions(+), 18 deletions(-) diff --git a/backend/src/config.ts b/backend/src/config.ts index 69af5d74..b9974a3b 100644 --- a/backend/src/config.ts +++ b/backend/src/config.ts @@ -1,12 +1,7 @@ import { EnvVars, getEnvVar } from './util/envvars.js'; -import { Language } from './entities/content/language.js'; // API export const DWENGO_API_BASE = getEnvVar(EnvVars.LearningContentRepoApiBaseUrl); export const FALLBACK_LANG = getEnvVar(EnvVars.FallbackLanguage); -// Logging -export const LOG_LEVEL: string = 'development' === process.env.NODE_ENV ? 'debug' : 'info'; -export const LOKI_HOST: string = process.env.LOKI_HOST || 'http://localhost:3102'; - export const FALLBACK_SEQ_NUM = 1; diff --git a/backend/src/logging/initalize.ts b/backend/src/logging/initalize.ts index 1ff761c9..bc202dc2 100644 --- a/backend/src/logging/initalize.ts +++ b/backend/src/logging/initalize.ts @@ -1,7 +1,7 @@ import { createLogger, format, Logger as WinstonLogger, transports } from 'winston'; import LokiTransport from 'winston-loki'; import { LokiLabels } from 'loki-logger-ts'; -import { LOG_LEVEL, LOKI_HOST } from '../config.js'; +import { EnvVars, getEnvVar } from '../util/envvars'; export class Logger extends WinstonLogger { constructor() { @@ -22,10 +22,19 @@ function initializeLogger(): Logger { return logger; } + const logLevel = getEnvVar(EnvVars.LogLevel); + + const consoleTransport = new transports.Console({ + level: getEnvVar(EnvVars.LogLevel), + format: format.combine(format.cli(), format.colorize()), + }); + + const lokiHost = getEnvVar(EnvVars.LokiHost); + const lokiTransport: LokiTransport = new LokiTransport({ - host: LOKI_HOST, + host: lokiHost, labels: Labels, - level: LOG_LEVEL, + level: logLevel, json: true, format: format.combine(format.timestamp(), format.json()), onConnectionError: (err) => { @@ -34,16 +43,11 @@ function initializeLogger(): Logger { }, }); - const consoleTransport = new transports.Console({ - level: LOG_LEVEL, - format: format.combine(format.cli(), format.colorize()), - }); - logger = createLogger({ transports: [lokiTransport, consoleTransport], }); - logger.debug(`Logger initialized with level ${LOG_LEVEL}, Loki host ${LOKI_HOST}`); + logger.debug(`Logger initialized with level ${logLevel} to Loki host ${lokiHost}`); return logger; } diff --git a/backend/src/mikro-orm.config.ts b/backend/src/mikro-orm.config.ts index c9cf6ed9..f2fb2bae 100644 --- a/backend/src/mikro-orm.config.ts +++ b/backend/src/mikro-orm.config.ts @@ -3,7 +3,6 @@ import { PostgreSqlDriver } from '@mikro-orm/postgresql'; import { EnvVars, getEnvVar, getNumericEnvVar } from './util/envvars.js'; import { SqliteDriver } from '@mikro-orm/sqlite'; import { MikroOrmLogger } from './logging/mikroOrmLogger.js'; -import { LOG_LEVEL } from './config.js'; // Import alle entity-bestanden handmatig import { User } from './entities/users/user.entity.js'; @@ -69,7 +68,7 @@ function config(testingMode: boolean = false): Options { // EntitiesTs: entitiesTs, // Logging - debug: LOG_LEVEL === 'debug', + debug: getEnvVar(EnvVars.LogLevel) === 'debug', loggerFactory: (options: LoggerOptions) => new MikroOrmLogger(options), }; } diff --git a/backend/src/util/envvars.ts b/backend/src/util/envvars.ts index 115291af..c37c79d5 100644 --- a/backend/src/util/envvars.ts +++ b/backend/src/util/envvars.ts @@ -4,20 +4,24 @@ const IDP_PREFIX = PREFIX + 'AUTH_'; const STUDENT_IDP_PREFIX = IDP_PREFIX + 'STUDENT_'; const TEACHER_IDP_PREFIX = IDP_PREFIX + 'TEACHER_'; const CORS_PREFIX = PREFIX + 'CORS_'; +const LOGGING_PREFIX = PREFIX + 'LOGGING_'; type EnvVar = { key: string; required?: boolean; defaultValue?: any }; export const EnvVars: { [key: string]: EnvVar } = { Port: { key: PREFIX + 'PORT', defaultValue: 3000 }, + LearningContentRepoApiBaseUrl: { key: PREFIX + 'LEARNING_CONTENT_REPO_API_BASE_URL', defaultValue: 'https://dwengo.org/backend/api' }, + FallbackLanguage: { key: PREFIX + 'FALLBACK_LANGUAGE', defaultValue: 'nl' }, + RunMode: { key: PREFIX + 'RUN_MODE', defaultValue: 'dev' }, + DbHost: { key: DB_PREFIX + 'HOST', required: true }, DbPort: { key: DB_PREFIX + 'PORT', defaultValue: 5432 }, DbName: { key: DB_PREFIX + 'NAME', defaultValue: 'dwengo' }, DbUsername: { key: DB_PREFIX + 'USERNAME', required: true }, DbPassword: { key: DB_PREFIX + 'PASSWORD', required: true }, DbUpdate: { key: DB_PREFIX + 'UPDATE', defaultValue: false }, - LearningContentRepoApiBaseUrl: { key: PREFIX + 'LEARNING_CONTENT_REPO_API_BASE_URL', defaultValue: 'https://dwengo.org/backend/api' }, - FallbackLanguage: { key: PREFIX + 'FALLBACK_LANGUAGE', defaultValue: 'nl' }, UserContentPrefix: { key: DB_PREFIX + 'USER_CONTENT_PREFIX', defaultValue: 'u_' }, + IdpStudentUrl: { key: STUDENT_IDP_PREFIX + 'URL', required: true }, IdpStudentClientId: { key: STUDENT_IDP_PREFIX + 'CLIENT_ID', required: true }, IdpStudentJwksEndpoint: { key: STUDENT_IDP_PREFIX + 'JWKS_ENDPOINT', required: true }, @@ -25,8 +29,12 @@ export const EnvVars: { [key: string]: EnvVar } = { IdpTeacherClientId: { key: TEACHER_IDP_PREFIX + 'CLIENT_ID', required: true }, IdpTeacherJwksEndpoint: { key: TEACHER_IDP_PREFIX + 'JWKS_ENDPOINT', required: true }, IdpAudience: { key: IDP_PREFIX + 'AUDIENCE', defaultValue: 'account' }, + CorsAllowedOrigins: { key: CORS_PREFIX + 'ALLOWED_ORIGINS', defaultValue: '' }, CorsAllowedHeaders: { key: CORS_PREFIX + 'ALLOWED_HEADERS', defaultValue: 'Authorization,Content-Type' }, + + LogLevel: { key: LOGGING_PREFIX + 'LEVEL', defaultValue: 'info' }, + LokiHost: { key: LOGGING_PREFIX + 'LOKI_HOST', defaultValue: 'http://localhost:3102' }, } as const; /**