From e102bddaa5b75cb83f72b51ad7df359455fef61e Mon Sep 17 00:00:00 2001 From: Heisenberg Date: Wed, 9 Oct 2019 11:10:34 +0800 Subject: [PATCH] MS-601 Docker logs error caused by get CPUTemperature error Former-commit-id: 4611939ce3c9b66313aef12991b3477c43813ce7 --- cpp/src/metrics/PrometheusMetrics.cpp | 2 +- cpp/src/metrics/SystemInfo.cpp | 44 +++++++++++++++++++++------ 2 files changed, 35 insertions(+), 11 deletions(-) diff --git a/cpp/src/metrics/PrometheusMetrics.cpp b/cpp/src/metrics/PrometheusMetrics.cpp index bc186038..182f14d4 100644 --- a/cpp/src/metrics/PrometheusMetrics.cpp +++ b/cpp/src/metrics/PrometheusMetrics.cpp @@ -46,7 +46,7 @@ PrometheusMetrics::Init() { return s.code(); } - const std::string uri = std::string("/tmp/metrics"); + const std::string uri = std::string("/metrics"); const std::size_t num_threads = 2; // Init Exposer diff --git a/cpp/src/metrics/SystemInfo.cpp b/cpp/src/metrics/SystemInfo.cpp index 1414d94e..70e917ad 100644 --- a/cpp/src/metrics/SystemInfo.cpp +++ b/cpp/src/metrics/SystemInfo.cpp @@ -24,6 +24,9 @@ #include #include #include +#include +#include +#include namespace milvus { namespace server { @@ -237,18 +240,39 @@ SystemInfo::GPUTemperature() { std::vector SystemInfo::CPUTemperature() { std::vector result; - for (int i = 0; i <= num_physical_processors_; ++i) { - std::string path = "/sys/class/thermal/thermal_zone" + std::to_string(i) + "/temp"; - FILE* file = fopen(path.data(), "r"); - if (file == nullptr) { - perror("Could not open thermal file"); - return result; + std::string path = "/sys/class/hwmon/"; + + DIR *dir = NULL; + dir = opendir(path.c_str()); + if (!dir) { + perror("opendir"); + return result; + } + + struct dirent *ptr = NULL; + while ((ptr = readdir(dir)) != NULL) { + std::string filename(path); + filename.append(ptr->d_name); + + char buf[100]; + if (readlink(filename.c_str(), buf, 100) != -1) { + std::string m(buf); + if (m.find("coretemp") != std::string::npos) { + std::string object = filename; + object += "/temp1_input"; + FILE *file = fopen(object.c_str(), "r"); + if (file == nullptr) { + perror("Could not open temperature file"); + exit(1); + } + float temp; + fscanf(file, "%f", &temp); + result.push_back(temp / 1000); + } } - float temp; - fscanf(file, "%f", &temp); - result.push_back(temp / 1000); - fclose(file); } + closedir(dir); + return result; } std::vector -- GitLab