summaryrefslogtreecommitdiffstats
path: root/src/collectors/windows.plugin/GetSystemCPU.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/collectors/windows.plugin/GetSystemCPU.c')
-rw-r--r--src/collectors/windows.plugin/GetSystemCPU.c51
1 files changed, 51 insertions, 0 deletions
diff --git a/src/collectors/windows.plugin/GetSystemCPU.c b/src/collectors/windows.plugin/GetSystemCPU.c
new file mode 100644
index 00000000..a7a0aca8
--- /dev/null
+++ b/src/collectors/windows.plugin/GetSystemCPU.c
@@ -0,0 +1,51 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+#include "windows_plugin.h"
+#include "windows-internals.h"
+
+int do_GetSystemCPU(int update_every, usec_t dt __maybe_unused) {
+ FILETIME idleTime, kernelTime, userTime;
+
+ if(GetSystemTimes(&idleTime, &kernelTime, &userTime) == 0) {
+ netdata_log_error("GetSystemTimes() failed.");
+ return 1;
+ }
+
+ ULONGLONG idle = FileTimeToULL(idleTime);
+ ULONGLONG kernel = FileTimeToULL(kernelTime);
+ ULONGLONG user = FileTimeToULL(userTime);
+
+ // kernel includes idle
+ kernel -= idle;
+
+ static RRDSET *st = NULL;
+ static RRDDIM *rd_user = NULL, *rd_kernel = NULL, *rd_idle = NULL;
+ if(!st) {
+ st = rrdset_create_localhost(
+ "system"
+ , "cpu"
+ , NULL
+ , "cpu"
+ , "system.cpu"
+ , "Total CPU utilization"
+ , "percentage"
+ , PLUGIN_WINDOWS_NAME
+ , "GetSystemTimes"
+ , NETDATA_CHART_PRIO_SYSTEM_CPU
+ , update_every
+ , RRDSET_TYPE_STACKED
+ );
+
+ rd_user = rrddim_add(st, "user", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
+ rd_kernel = rrddim_add(st, "system", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
+ rd_idle = rrddim_add(st, "idle", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
+ rrddim_hide(st, "idle");
+ }
+
+ rrddim_set_by_pointer(st, rd_user, (collected_number )user);
+ rrddim_set_by_pointer(st, rd_kernel, (collected_number )kernel);
+ rrddim_set_by_pointer(st, rd_idle, (collected_number )idle);
+ rrdset_done(st);
+
+ return 0;
+}