diff --git a/src/utils/PerformanceMonitor.cpp b/src/utils/PerformanceMonitor.cpp new file mode 100644 index 0000000..f4a7a59 --- /dev/null +++ b/src/utils/PerformanceMonitor.cpp @@ -0,0 +1,34 @@ +#include "PerformanceMonitor.hpp" + +class PerformanceMonitor { +public: + std::string getMemoryUsage(); +}; + +std::string PerformanceMonitor::getMemoryUsage() +{ + struct sysinfo memInfo; + sysinfo(&memInfo); + + long long totalPhysMem = memInfo.totalram; + totalPhysMem *= memInfo.mem_unit; + + long long physMemUsed = memInfo.totalram - memInfo.freeram; + physMemUsed *= memInfo.mem_unit; + + std::string memoryUsage = "Memory Usage: "; + memoryUsage += std::to_string(physMemUsed / 1024 / 1024) + " MB / "; + memoryUsage += std::to_string(totalPhysMem / 1024 / 1024) + " MB"; + return memoryUsage; +} + +std::string PerformanceMonitor::getCPUUsage() +{ + std::string cpuUsage = "CPU Usage: "; + return cpuUsage; +} + +void PerformanceMonitor::logPerformanceMetrics() { + logger->logPerformance("Memory", getMemoryUsage()); + logger->logPerformance("CPU", getCpuUsage()); +} diff --git a/src/utils/PerformanceMonitor.hpp b/src/utils/PerformanceMonitor.hpp new file mode 100644 index 0000000..39d4839 --- /dev/null +++ b/src/utils/PerformanceMonitor.hpp @@ -0,0 +1,14 @@ +#include +#include "ThreadLogger.hpp" + +class PerformanceMonitor { +public: + PerformanceMonitor(); + std::string getMemoryUsage(); + std::string getCPUUsage(); + void logPerformanceMetrics(); + +private: + ThreadLogger* logger; +}; + diff --git a/src/utils/ThreadLogger.cpp b/src/utils/ThreadLogger.cpp index 2fbb217..fdd4097 100644 --- a/src/utils/ThreadLogger.cpp +++ b/src/utils/ThreadLogger.cpp @@ -1,6 +1,7 @@ #include "ThreadLogger.hpp" #include + ThreadLogger::ThreadLogger() { ThreadLogger::logQueue = new std::queue(); @@ -106,3 +107,23 @@ void ThreadLogger::logMessage() } } +std::queue logQueue; +std::mutex logMutex; + +void ThreadLogger::logPerformance(const std::string& category, const std::string& data) { + std::ostringstream ss; + ss << category << ": " << data; + log(ss.str()); +} + +void ThreadLogger::log(const std::string& message) { + std::lock_guard guard(logMutex); + logQueue.push(message); + + while (!logQueue.empty()) { + std::cout << logQueue.front() << std::endl; + logQueue.pop(); + } +} + + diff --git a/src/utils/ThreadLogger.hpp b/src/utils/ThreadLogger.hpp index 1c1c643..2e6c52a 100644 --- a/src/utils/ThreadLogger.hpp +++ b/src/utils/ThreadLogger.hpp @@ -21,12 +21,14 @@ class ThreadLogger { std::thread logThread; bool stopLogger; void insertLog(LoggingLevelWrapper LoggingLevel,const char* format, va_list args); + void log(const std::string& message); public: ThreadLogger(); ~ThreadLogger(); void log(const char* format, ...); void log(LoggingLevelWrapper LoggingLevel,const char* format, ...); + void logPerformance(const std::string& category, const std::string& data); };