From 81cfff8a59bfaa370072ae4961e3f6f582deab50 Mon Sep 17 00:00:00 2001 From: Ben Date: Mon, 10 Dec 2018 12:24:05 +0000 Subject: [PATCH] CPU Polling working properly and dynamically for all cores on Linux systems --- Makefile | 12 +++++------ bin/resource-monitor | Bin 75124 -> 100752 bytes include/cpu.h | 4 ++-- include/memory.h | 31 +++++++++++++++++++++++++++ platform/linux/monitoring/cpu.cpp | 22 ++++++++++--------- platform/linux/monitoring/memory.cpp | 0 src/main.cpp | 9 ++++---- 7 files changed, 56 insertions(+), 22 deletions(-) create mode 100644 platform/linux/monitoring/memory.cpp diff --git a/Makefile b/Makefile index 753c815..8d54ed0 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ # CMAKE generated file: DO NOT EDIT! -# Generated by "Unix Makefiles" Generator, CMake Version 3.7 +# Generated by "Unix Makefiles" Generator, CMake Version 3.12 # Default target executed when no arguments are given to make. default_target: all @@ -48,10 +48,10 @@ RM = /usr/bin/cmake -E remove -f EQUALS = = # The top-level source directory on which CMake was run. -CMAKE_SOURCE_DIR = /home/ben/Desktop/universal-system-monitor +CMAKE_SOURCE_DIR = /home/ben/Programming/resource-monitor # The top-level build directory on which CMake was run. -CMAKE_BINARY_DIR = /home/ben/Desktop/universal-system-monitor +CMAKE_BINARY_DIR = /home/ben/Programming/resource-monitor #============================================================================= # Targets provided globally by CMake. @@ -80,9 +80,9 @@ edit_cache/fast: edit_cache # The main all target all: cmake_check_build_system - $(CMAKE_COMMAND) -E cmake_progress_start /home/ben/Desktop/universal-system-monitor/CMakeFiles /home/ben/Desktop/universal-system-monitor/CMakeFiles/progress.marks + $(CMAKE_COMMAND) -E cmake_progress_start /home/ben/Programming/resource-monitor/CMakeFiles /home/ben/Programming/resource-monitor/CMakeFiles/progress.marks $(MAKE) -f CMakeFiles/Makefile2 all - $(CMAKE_COMMAND) -E cmake_progress_start /home/ben/Desktop/universal-system-monitor/CMakeFiles 0 + $(CMAKE_COMMAND) -E cmake_progress_start /home/ben/Programming/resource-monitor/CMakeFiles 0 .PHONY : all # The main clean target @@ -184,8 +184,8 @@ help: @echo "... clean" @echo "... depend" @echo "... rebuild_cache" - @echo "... edit_cache" @echo "... ./bin/resource-monitor" + @echo "... edit_cache" @echo "... platform/linux/monitoring/cpu.o" @echo "... platform/linux/monitoring/cpu.i" @echo "... platform/linux/monitoring/cpu.s" diff --git a/bin/resource-monitor b/bin/resource-monitor index 4abee2642970e315f40fd148d5086a1f7b1c3560..f22857c3b551abd4fdcfec23cf083b17765e1e05 100755 GIT binary patch literal 100752 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 literal 75124 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

8m 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 diff --git a/include/cpu.h b/include/cpu.h index 3601593..dc95b6d 100644 --- a/include/cpu.h +++ b/include/cpu.h @@ -1,9 +1,9 @@ #pragma once -#include -#include #include +#include #include +#include class CPU { public: diff --git a/include/memory.h b/include/memory.h index e69de29..835d8d3 100644 --- a/include/memory.h +++ b/include/memory.h @@ -0,0 +1,31 @@ +#pragma once + +#include +#include +#include + +class Memory { +public: + Memory(); + + std::mutex Memory_Mutex; + + long double MEMORY_TOTAL_MB; + long double MEMORY_FREE_MB; + long double MEMORY_AVAILABLE_MB; + long double MEMORY_ACTIVE_MB; + long double MEMORY_INACTIVE_MB; + + int UPDATE_INTERVAL; // s + + void START_MEMORY_POLLING(); + static void MEMORY_POLL(Memory* mem); + void END_MEMORY_POLLING(); + + virtual ~Memory(); +private: + std::thread* m_pollThread; + bool m_isPolling; +}; + +static Memory* Memory_Instance; diff --git a/platform/linux/monitoring/cpu.cpp b/platform/linux/monitoring/cpu.cpp index 412a98b..fe05dbf 100644 --- a/platform/linux/monitoring/cpu.cpp +++ b/platform/linux/monitoring/cpu.cpp @@ -2,6 +2,7 @@ #include #include +#include #include #include #include @@ -35,12 +36,16 @@ void CPU::CPU_POLL(CPU* cpu) { cpu->CPU_Mutex.unlock(); // READ TOTAL CPU + std::vector ProcStatLines; unsigned long long luser, nice, system, idle, iowait, irq, softirq = 0; - FILE* ProcStatCPU = fopen("/proc/stat", "r"); - fscanf(ProcStatCPU, "cpu %llu %llu %llu %llu %llu %llu %llu", &luser, + + std::ifstream ProcStatFile("/proc/stat"); + for (std::string str; std::getline(ProcStatFile, str); ) + ProcStatLines.push_back(str); + + sscanf(ProcStatLines[0].c_str(), "cpu %llu %llu %llu %llu %llu %llu %llu", &luser, &nice, &system, &idle, &iowait, &irq, &softirq); - fclose(ProcStatCPU); cpu->CPU_Mutex.lock(); @@ -54,15 +59,12 @@ void CPU::CPU_POLL(CPU* cpu) { for (unsigned int thread = 0; thread < cpu->CPU_HARDWARE_THREADS; thread++) { // READ TOTAL THREAD CPU + unsigned int currentThread = thread + 1; unsigned long long tluser, tnice, tsystem, tidle, tiowait, - tirq, tsoftirq = 0; - FILE* ProcStatCPUThread = fopen("/proc/stat", "r"); - fscanf(ProcStatCPUThread, "%*s %llu %llu %llu %llu %llu %llu %llu", - &tluser, &tnice, &tsystem, &tidle, &tiowait, &tirq, &tsoftirq); // WONT WORK - fclose(ProcStatCPUThread); + tirq, tsoftirq = 0;[[]] - std::cout << tluser << " " << tnice << " " << tsystem << " " << tidle - << " " << tiowait << " " << tirq << " " << tsoftirq << std::endl; + sscanf(ProcStatLines[currentThread].c_str(), "%*s %llu %llu %llu %llu %llu %llu %llu", + &tluser, &tnice, &tsystem, &tidle, &tiowait, &tirq, &tsoftirq); cpu->CPU_Mutex.lock(); diff --git a/platform/linux/monitoring/memory.cpp b/platform/linux/monitoring/memory.cpp new file mode 100644 index 0000000..e69de29 diff --git a/src/main.cpp b/src/main.cpp index ad850a7..92298a1 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,19 +1,20 @@ #include #include +#include #include int main(int argc, char** argv) { CPU* cpu = new CPU(); CPU_Instance = cpu; + // Memory* mem = new Memory(); + // Memory_Instance = mem; + cpu->START_CPU_POLLING(); + // mem->START_MEMORY_POLLING(); while(1) { sleep(1); - // for (unsigned int thread = 0; thread < cpu->CPU_HARDWARE_THREADS; thread++) { - // std::cout << "CORE " << thread << " USAGE: " << cpu->CPU_PERCENT(thread) << std::endl; - // } - for (unsigned int thread = 0; thread <= cpu->CPU_HARDWARE_THREADS; thread++) { std::cout << "CORE " << thread << " USAGE: " << cpu->CPU_PERCENT(thread) << std::endl; }