From 67ebcef978764220a881f9c1d2c9a354ef87bd05 Mon Sep 17 00:00:00 2001 From: Azat Khuzhin Date: Wed, 11 Aug 2021 10:09:00 +0300 Subject: [PATCH] Reopen sensors (/sys/class/thermal) --- src/Interpreters/AsynchronousMetrics.cpp | 34 ++++++++++++++++++------ src/Interpreters/AsynchronousMetrics.h | 1 + 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/src/Interpreters/AsynchronousMetrics.cpp b/src/Interpreters/AsynchronousMetrics.cpp index bf0bbe804fe..fd02aa4abec 100644 --- a/src/Interpreters/AsynchronousMetrics.cpp +++ b/src/Interpreters/AsynchronousMetrics.cpp @@ -88,6 +88,20 @@ AsynchronousMetrics::AsynchronousMetrics( openFileIfExists("/proc/uptime", uptime); openFileIfExists("/proc/net/dev", net_dev); + openSensors(); + openBlockDevices(); + openEDAC(); + openSensorsChips(); +#endif +} + +#if defined(OS_LINUX) +void AsynchronousMetrics::openSensors() +{ + LOG_TRACE(log, "Scanning /sys/class/thermal"); + + thermal.clear(); + for (size_t thermal_device_index = 0;; ++thermal_device_index) { std::unique_ptr file = openFileIfExists(fmt::format("/sys/class/thermal/thermal_zone{}/temp", thermal_device_index)); @@ -101,14 +115,8 @@ AsynchronousMetrics::AsynchronousMetrics( } thermal.emplace_back(std::move(file)); } - - openBlockDevices(); - openSensorsChips(); - openEDAC(); -#endif } -#if defined(OS_LINUX) void AsynchronousMetrics::openBlockDevices() { LOG_TRACE(log, "Scanning /sys/block"); @@ -1083,9 +1091,9 @@ void AsynchronousMetrics::update(std::chrono::system_clock::time_point update_ti } } - for (size_t i = 0, size = thermal.size(); i < size; ++i) + try { - try + for (size_t i = 0, size = thermal.size(); i < size; ++i) { ReadBufferFromFilePRead & in = *thermal[i]; @@ -1094,6 +1102,16 @@ void AsynchronousMetrics::update(std::chrono::system_clock::time_point update_ti readText(temperature, in); new_values[fmt::format("Temperature{}", i)] = temperature * 0.001; } + } + catch (...) + { + tryLogCurrentException(__PRETTY_FUNCTION__); + + /// Files maybe re-created on module load/unload + try + { + openSensors(); + } catch (...) { tryLogCurrentException(__PRETTY_FUNCTION__); diff --git a/src/Interpreters/AsynchronousMetrics.h b/src/Interpreters/AsynchronousMetrics.h index 409f2dfeec4..93e77b6bde8 100644 --- a/src/Interpreters/AsynchronousMetrics.h +++ b/src/Interpreters/AsynchronousMetrics.h @@ -183,6 +183,7 @@ private: Stopwatch block_devices_rescan_delay; + void openSensors(); void openBlockDevices(); void openSensorsChips(); void openEDAC();