diff --git a/msmonitor/dynolog_npu/dynolog/src/Main.cpp b/msmonitor/dynolog_npu/dynolog/src/Main.cpp index a24bb802ab478905894df725eb015a23cef8d629..89c263947971d38a0c2b9d8d1c5dd4e1cd833104 100644 --- a/msmonitor/dynolog_npu/dynolog/src/Main.cpp +++ b/msmonitor/dynolog_npu/dynolog/src/Main.cpp @@ -182,7 +182,7 @@ int main(int argc, char** argv) std::shared_ptr dcgm; - std::unique_ptr ipcmon; + std::shared_ptr ipcmon; std::unique_ptr ipcmon_thread; std::unique_ptr data_ipcmon_thread; std::unique_ptr gpumon_thread; @@ -190,12 +190,12 @@ int main(int argc, char** argv) if (FLAGS_enable_ipc_monitor) { LOG(INFO) << "Starting IPC Monitor"; - ipcmon = std::make_unique(); + ipcmon = std::make_shared(); ipcmon->setLogger(std::move(getLogger())); ipcmon_thread = - std::make_unique([&ipcmon]() { ipcmon->loop(); }); + std::make_unique([ipcmon]() { ipcmon->loop(); }); data_ipcmon_thread = - std::make_unique([&ipcmon]() { ipcmon->dataLoop(); }); + std::make_unique([ipcmon]() { ipcmon->dataLoop(); }); } if (FLAGS_enable_gpu_monitor) { @@ -212,6 +212,7 @@ int main(int argc, char** argv) auto handler = std::make_shared(dcgm); // use simple json RPC server for now + // In the current scenario, the process can only be terminated and all threads closed using Ctrl+C. auto server = setup_server(handler); server->run(); diff --git a/msmonitor/plugin/ipc_monitor/utils.cpp b/msmonitor/plugin/ipc_monitor/utils.cpp index b7160aa049be451d931cb006b7babed378bf3e25..1532e59e98a24939222e38b06565349104cdafb6 100644 --- a/msmonitor/plugin/ipc_monitor/utils.cpp +++ b/msmonitor/plugin/ipc_monitor/utils.cpp @@ -59,14 +59,17 @@ std::string getCurrentTimestamp() auto now = std::chrono::system_clock::now(); auto micros = std::chrono::duration_cast(now.time_since_epoch()); + std::ostringstream oss; std::time_t currentTime = std::chrono::system_clock::to_time_t(now); - std::tm* timeInfo = std::localtime(¤tTime); - - auto milli_time = std::chrono::duration_cast(micros).count() % 1000; - auto micro_time = micros.count() % 1000; + std::tm timeInfo; + if (localtime_r(¤tTime, &timeInfo) != nullptr) { + auto milli_time = std::chrono::duration_cast(micros).count() % 1000; + auto micro_time = micros.count() % 1000; + oss << std::put_time(timeInfo, "%Y%m%d%H%M%S"); + constexpr int kMilliTimeWidth = 3; + oss << std::setw(kMilliTimeWidth) << std::setfill('0') << milli_time; + } - std::ostringstream oss; - oss << std::put_time(timeInfo, "%Y-%m-%d-%H:%M:%S"); return oss.str(); }