diff --git a/renderer/README.md b/renderer/README.md index 3440d9e..0a34d32 100644 --- a/renderer/README.md +++ b/renderer/README.md @@ -232,6 +232,7 @@ The worker can be configured using environment variables or a `.env` file in the | `S3_ACCESS_KEY` | S3 access key | Yes | `-` | | `S3_SECRET_KEY` | S3 secret key | Yes | `-` | | `PROMETHEUS_HOST` | Prometheus address | Yes | `-` | +| `PROMETHEUS_ENABLED` | Enable or disable Prometheus metrics | No | false | | `LOG_LEVEL` | Log level (DEBUG, INFO, WARNING, ERROR) | No | `INFO` | | `LOG_DEBUG` | Enable debug logging (true/false) | No | `true` | | `RENDERER_PREVIEW` | Render image in lower resolution and only 5 samples (true/false) | No | `false` | diff --git a/renderer/worker/include/config.hpp b/renderer/worker/include/config.hpp index 1c0e6ce..2f54c0f 100644 --- a/renderer/worker/include/config.hpp +++ b/renderer/worker/include/config.hpp @@ -17,11 +17,12 @@ class Config { std::optional s3Host_; std::optional s3AccessKey_; std::optional s3SecretKey_; - Logger::Level logLevel_ = Logger::Level::INFO; // default - bool logDebug_ = false; // default - bool rendererPreview_ = false; // default - int rendererPreviewMaxSize_ = 256; // default - int rendererPreviewUpscaleFactor_ = 2; // default + Logger::Level logLevel_ = Logger::Level::INFO; + bool logDebug_ = false; + bool rendererPreview_ = false; + int rendererPreviewMaxSize_ = 256; + int rendererPreviewUpscaleFactor_ = 2; + bool prometheusEnabled_ = false; public: Config() = default; @@ -46,4 +47,5 @@ class Config { bool rendererPreview() const; int rendererPreviewMaxSize() const; int rendererPreviewUpscaleFactor() const; + bool prometheusEnabled() const; }; \ No newline at end of file diff --git a/renderer/worker/src/config.cpp b/renderer/worker/src/config.cpp index 2286163..34b35d6 100644 --- a/renderer/worker/src/config.cpp +++ b/renderer/worker/src/config.cpp @@ -23,6 +23,7 @@ void Config::apply(env::dotenv dotenv) { if (dotenv.hasVariable("RENDERER_PREVIEW_UPSCALE_FACTOR")) rendererPreviewUpscaleFactor_ = dotenv["RENDERER_PREVIEW_UPSCALE_FACTOR"]; if (dotenv.hasVariable("PROMETHEUS_HOST")) prometheusHost_ = dotenv["PROMETHEUS_HOST"]; + if (dotenv.hasVariable("PROMETHEUS_ENABLED")) prometheusEnabled_ = dotenv["PROMETHEUS_ENABLED"]; } catch (const env::Value::ValueError& e) { throw std::runtime_error(std::format("Invalid value format in .env file. Error: {}.", e.what())); } @@ -47,6 +48,7 @@ void Config::fromEnvironment() { if (char* ptr = std::getenv("RENDERER_PREVIEW_MAX_SIZE")) rendererPreviewMaxSize_ = env::Value(ptr); if (char* ptr = std::getenv("RENDERER_PREVIEW_UPSCALE_FACTOR")) rendererPreviewUpscaleFactor_ = env::Value(ptr); if (char* ptr = std::getenv("PROMETHEUS_HOST")) prometheusHost_ = env::Value(ptr); + if (char* ptr = std::getenv("PROMETHEUS_ENABLED")) prometheusEnabled_ = env::Value(ptr); } catch (const env::Value::ValueError& e) { throw std::runtime_error(std::format("Invalid environment variable value format. Error: {}.", e.what())); } @@ -132,4 +134,5 @@ Logger::Level Config::logLevel() const { return logLevel_; } bool Config::logDebug() const { return logDebug_; } bool Config::rendererPreview() const { return rendererPreview_; } int Config::rendererPreviewMaxSize() const { return rendererPreviewMaxSize_; } -int Config::rendererPreviewUpscaleFactor() const { return rendererPreviewUpscaleFactor_; } \ No newline at end of file +int Config::rendererPreviewUpscaleFactor() const { return rendererPreviewUpscaleFactor_; } +bool Config::prometheusEnabled() const { return prometheusEnabled_; } \ No newline at end of file diff --git a/renderer/worker/src/service.cpp b/renderer/worker/src/service.cpp index b32ebe4..141f1d7 100644 --- a/renderer/worker/src/service.cpp +++ b/renderer/worker/src/service.cpp @@ -168,7 +168,8 @@ int main() try { KafkaConsumer commandConsumer(config.kafkaHost(), config.kafkaCommandsGroupId(), config.kafkaTopicCommands()); KafkaProducer producer(config.kafkaHost()); - Prometheus prometheus(config.prometheusHost()); + std::optional prometheus; + if (config.prometheusEnabled()) prometheus = Prometheus(config.prometheusHost()); logger.info(std::format("Listening for messages...")); while (running) { @@ -235,7 +236,7 @@ int main() try { write(STDOUT_FILENO, glbData.data(), glbData.size()); logger.debug(std::format("Written {} bytes in pipe for scene", glbData.size())); - prometheus.onRenderStarted(); + if (config.prometheusEnabled()) prometheus->onRenderStarted(); while (running) { int status; pid_t result = waitpid(renderer_pid, &status, WNOHANG); @@ -318,7 +319,7 @@ int main() try { std::format("Reading from pipe truncates image (read only {}/{} bytes)", total_read, result.size())); } - prometheus.onRenderFinished(resultHeader.metrics); + if (config.prometheusEnabled()) prometheus->onRenderFinished(resultHeader.metrics); } taskConsumer.commit(); logger.info(std::format("Current message processing finished successfully. Listening..."));