@cryptotaxi247 / netdata-1 / commits / 768ad06d7

Format Windows.plugin (#19554)

* format_windows: Format GetSystemCPU.[c] * format_windows: Format GetSystemRAM.[c] * format_windows: Format GetSystemUptime.[c] * format_windows: Format perflib-hyperv.[c] * format_windows: Format perflib-memory.[c] * format_windows: Format perflib-mssql.[c] * format_windows: Format perflib-network.[c] * format_windows: Format perflib-objects.[c] * format_windows: Format perflib-processes.[c] * format_windows: Format perflib-processor.[c] * format_windows: Format perflib-rrd.[ch] * format_windows: Format perflib-storage.[ch] * format_windows: Format perflib-thermalzone.[ch] * format_windows: Format perflib-web-service.[c] * format_windows: Format windows-internals.[h]

thiagoftsm committed Feb 2, 2025 at 12:15 UTC 768ad06d7e1cef93f0f16df0a67b7b216a9c2c52
16 files changed +1101 -913
src/collectors/windows.plugin/GetSystemCPU.c
+19 -19
@@ -3,10 +3,11 @@
3 #include "windows_plugin.h"
4 #include "windows-internals.h"
5
6 -int do_GetSystemCPU(int update_every, usec_t dt __maybe_unused) {
6 +int do_GetSystemCPU(int update_every, usec_t dt __maybe_unused)
7 +{
8 FILETIME idleTime, kernelTime, userTime;
9
9 - if(GetSystemTimes(&idleTime, &kernelTime, &userTime) == 0) {
10 + if (GetSystemTimes(&idleTime, &kernelTime, &userTime) == 0) {
11 netdata_log_error("GetSystemTimes() failed.");
12 return 1;
13 }
@@ -20,21 +21,20 @@ int do_GetSystemCPU(int update_every, usec_t dt __maybe_unused) {
21
22 static RRDSET *st = NULL;
23 static RRDDIM *rd_user = NULL, *rd_kernel = NULL, *rd_idle = NULL;
23 - if(!st) {
24 + if (!st) {
25 st = rrdset_create_localhost(
25 - "system"
26 - , "cpu"
27 - , NULL
28 - , "cpu"
29 - , "system.cpu"
30 - , "Total CPU utilization"
31 - , "percentage"
32 - , PLUGIN_WINDOWS_NAME
33 - , "GetSystemTimes"
34 - , NETDATA_CHART_PRIO_SYSTEM_CPU
35 - , update_every
36 - , RRDSET_TYPE_STACKED
37 - );
26 + "system",
27 + "cpu",
28 + NULL,
29 + "cpu",
30 + "system.cpu",
31 + "Total CPU utilization",
32 + "percentage",
33 + PLUGIN_WINDOWS_NAME,
34 + "GetSystemTimes",
35 + NETDATA_CHART_PRIO_SYSTEM_CPU,
36 + update_every,
37 + RRDSET_TYPE_STACKED);
38
39 rd_user = rrddim_add(st, "user", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
40 rd_kernel = rrddim_add(st, "system", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
@@ -42,9 +42,9 @@ int do_GetSystemCPU(int update_every, usec_t dt __maybe_unused) {
42 rrddim_hide(st, "idle");
43 }
44
45 - rrddim_set_by_pointer(st, rd_user, (collected_number )user);
46 - rrddim_set_by_pointer(st, rd_kernel, (collected_number )kernel);
47 - rrddim_set_by_pointer(st, rd_idle, (collected_number )idle);
45 + rrddim_set_by_pointer(st, rd_user, (collected_number)user);
46 + rrddim_set_by_pointer(st, rd_kernel, (collected_number)kernel);
47 + rrddim_set_by_pointer(st, rd_idle, (collected_number)idle);
48 rrdset_done(st);
49
50 return 0;
src/collectors/windows.plugin/GetSystemRAM.c
+3 -2
@@ -7,8 +7,9 @@
7 #define _COMMON_PLUGIN_MODULE_NAME "GetSystemRam"
8 #include "../common-contexts/common-contexts.h"
9
10 -int do_GetSystemRAM(int update_every, usec_t dt __maybe_unused) {
11 - MEMORYSTATUSEX memStat = { 0 };
10 +int do_GetSystemRAM(int update_every, usec_t dt __maybe_unused)
11 +{
12 + MEMORYSTATUSEX memStat = {0};
13 memStat.dwLength = sizeof(memStat);
14
15 if (!GlobalMemoryStatusEx(&memStat)) {
src/collectors/windows.plugin/GetSystemUptime.c
+14 -14
@@ -3,26 +3,26 @@
3 #include "windows_plugin.h"
4 #include "windows-internals.h"
5
6 -int do_GetSystemUptime(int update_every, usec_t dt __maybe_unused) {
6 +int do_GetSystemUptime(int update_every, usec_t dt __maybe_unused)
7 +{
8 ULONGLONG uptime = GetTickCount64(); // in milliseconds
9
10 static RRDSET *st = NULL;
11 static RRDDIM *rd_uptime = NULL;
12 if (!st) {
13 st = rrdset_create_localhost(
13 - "system"
14 - , "uptime"
15 - , NULL
16 - , "uptime"
17 - , "system.uptime"
18 - , "System Uptime"
19 - , "seconds"
20 - , PLUGIN_WINDOWS_NAME
21 - , "GetSystemUptime"
22 - , NETDATA_CHART_PRIO_SYSTEM_UPTIME
23 - , update_every
24 - , RRDSET_TYPE_LINE
25 - );
14 + "system",
15 + "uptime",
16 + NULL,
17 + "uptime",
18 + "system.uptime",
19 + "System Uptime",
20 + "seconds",
21 + PLUGIN_WINDOWS_NAME,
22 + "GetSystemUptime",
23 + NETDATA_CHART_PRIO_SYSTEM_UPTIME,
24 + update_every,
25 + RRDSET_TYPE_LINE);
26
27 rd_uptime = rrddim_add(st, "uptime", NULL, 1, 1000, RRD_ALGORITHM_ABSOLUTE);
28 }
src/collectors/windows.plugin/perflib-hyperv.c
+153 -113
@@ -7,7 +7,7 @@
7 #define _COMMON_PLUGIN_MODULE_NAME "PerflibHyperV"
8 #include "../common-contexts/common-contexts.h"
9
10 -#define HYPERV "hyperv"
10 +#define HYPERV "hyperv"
11
12 static void get_and_sanitize_instance_value(
13 PERF_DATA_BLOCK *pDataBlock,
@@ -72,15 +72,16 @@ struct hypervisor_memory {
72 COUNTER_DATA GuestAvailableMemory;
73 };
74
75 -void initialize_hyperv_memory_keys(struct hypervisor_memory *p) {
75 +void initialize_hyperv_memory_keys(struct hypervisor_memory *p)
76 +{
77 p->CurrentPressure.key = "Current Pressure";
78 p->PhysicalMemory.key = "Physical Memory";
79 p->GuestVisiblePhysicalMemory.key = "Guest Visible Physical Memory";
80 p->GuestAvailableMemory.key = "Guest Available Memory";
81 }
82
82 -
83 -void dict_hyperv_memory_insert_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused) {
83 +void dict_hyperv_memory_insert_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused)
84 +{
85 struct hypervisor_memory *p = value;
86 initialize_hyperv_memory_keys(p);
87 }
@@ -97,7 +98,6 @@ struct hypervisor_partition {
98
99 COUNTER_DATA PhysicalPagesAllocated;
100 COUNTER_DATA RemotePhysicalPages;
100 -
101 };
102
103 void initialize_hyperv_partition_keys(struct hypervisor_partition *p)
@@ -106,7 +106,8 @@ void initialize_hyperv_partition_keys(struct hypervisor_partition *p)
106 p->RemotePhysicalPages.key = "Remote Physical Pages";
107 }
108
109 -void dict_hyperv_partition_insert_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused) {
109 +void dict_hyperv_partition_insert_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused)
110 +{
111 struct hypervisor_partition *p = value;
112 initialize_hyperv_partition_keys(p);
113 }
@@ -120,16 +121,17 @@ static bool do_hyperv_memory(PERF_DATA_BLOCK *pDataBlock, int update_every, void
121 return false;
122
123 PERF_INSTANCE_DEFINITION *pi = NULL;
123 - for(LONG i = 0; i < pObjectType->NumInstances ; i++) {
124 + for (LONG i = 0; i < pObjectType->NumInstances; i++) {
125 pi = perflibForEachInstance(pDataBlock, pObjectType, pi);
126 if (!pi)
127 break;
128
128 - get_and_sanitize_instance_value(pDataBlock, pObjectType, pi, windows_shared_buffer, sizeof(windows_shared_buffer));
129 + get_and_sanitize_instance_value(
130 + pDataBlock, pObjectType, pi, windows_shared_buffer, sizeof(windows_shared_buffer));
131
132 struct hypervisor_memory *p = dictionary_set(item->instance, windows_shared_buffer, NULL, sizeof(*p));
133
132 - if(!p->collected_metadata) {
134 + if (!p->collected_metadata) {
135 p->collected_metadata = true;
136 }
137
@@ -140,13 +142,13 @@ static bool do_hyperv_memory(PERF_DATA_BLOCK *pDataBlock, int update_every, void
142
143 if (!p->charts_created) {
144 p->charts_created = true;
143 - if(!p->st_vm_memory_physical) {
145 + if (!p->st_vm_memory_physical) {
146 p->st_vm_memory_physical = rrdset_create_localhost(
147 "vm_memory_physical",
148 windows_shared_buffer,
149 NULL,
150 HYPERV,
149 - HYPERV".vm_memory_physical",
151 + HYPERV ".vm_memory_physical",
152 "VM assigned memory",
153 "bytes",
154 _COMMON_PLUGIN_NAME,
@@ -160,7 +162,7 @@ static bool do_hyperv_memory(PERF_DATA_BLOCK *pDataBlock, int update_every, void
162 windows_shared_buffer,
163 NULL,
164 HYPERV,
163 - HYPERV".vm_memory_physical_guest_visible",
165 + HYPERV ".vm_memory_physical_guest_visible",
166 "VM guest visible memory",
167 "bytes",
168 _COMMON_PLUGIN_NAME,
@@ -174,7 +176,7 @@ static bool do_hyperv_memory(PERF_DATA_BLOCK *pDataBlock, int update_every, void
176 windows_shared_buffer,
177 NULL,
178 HYPERV,
177 - HYPERV".vm_memory_pressure_current",
179 + HYPERV ".vm_memory_pressure_current",
180 "VM Memory Pressure",
181 "percentage",
182 _COMMON_PLUGIN_NAME,
@@ -184,13 +186,20 @@ static bool do_hyperv_memory(PERF_DATA_BLOCK *pDataBlock, int update_every, void
186 RRDSET_TYPE_LINE);
187
188 p->rd_CurrentPressure = rrddim_add(p->st_pressure, "pressure", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
187 - p->rd_PhysicalMemory = rrddim_add(p->st_vm_memory_physical, "assigned", NULL, 1024 * 1024, 1, RRD_ALGORITHM_ABSOLUTE);
188 - p->rd_GuestVisiblePhysicalMemory = rrddim_add(p->st_vm_memory_physical_guest_visible, "visible", NULL, 1024 * 1024, 1, RRD_ALGORITHM_ABSOLUTE);
189 - p->rd_GuestAvailableMemory = rrddim_add(p->st_vm_memory_physical_guest_visible, "available", NULL, 1024 * 1024, 1, RRD_ALGORITHM_ABSOLUTE);
189 + p->rd_PhysicalMemory =
190 + rrddim_add(p->st_vm_memory_physical, "assigned", NULL, 1024 * 1024, 1, RRD_ALGORITHM_ABSOLUTE);
191 + p->rd_GuestVisiblePhysicalMemory = rrddim_add(
192 + p->st_vm_memory_physical_guest_visible, "visible", NULL, 1024 * 1024, 1, RRD_ALGORITHM_ABSOLUTE);
193 + p->rd_GuestAvailableMemory = rrddim_add(
194 + p->st_vm_memory_physical_guest_visible, "available", NULL, 1024 * 1024, 1, RRD_ALGORITHM_ABSOLUTE);
195
196 rrdlabels_add(p->st_vm_memory_physical->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
197 rrdlabels_add(p->st_pressure->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
193 - rrdlabels_add(p->st_vm_memory_physical_guest_visible->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
198 + rrdlabels_add(
199 + p->st_vm_memory_physical_guest_visible->rrdlabels,
200 + "vm_name",
201 + windows_shared_buffer,
202 + RRDLABEL_SRC_AUTO);
203 }
204 }
205
@@ -215,21 +224,21 @@ static bool do_hyperv_vid_partition(PERF_DATA_BLOCK *pDataBlock, int update_ever
224 return false;
225
226 PERF_INSTANCE_DEFINITION *pi = NULL;
218 - for(LONG i = 0; i < pObjectType->NumInstances ; i++) {
227 + for (LONG i = 0; i < pObjectType->NumInstances; i++) {
228 pi = perflibForEachInstance(pDataBlock, pObjectType, pi);
229 if (!pi)
230 break;
231
223 - get_and_sanitize_instance_value(pDataBlock, pObjectType, pi, windows_shared_buffer, sizeof(windows_shared_buffer));
232 + get_and_sanitize_instance_value(
233 + pDataBlock, pObjectType, pi, windows_shared_buffer, sizeof(windows_shared_buffer));
234
235 struct hypervisor_partition *p = dictionary_set(item->instance, windows_shared_buffer, NULL, sizeof(*p));
236
227 - if(!p->collected_metadata) {
228 -
237 + if (!p->collected_metadata) {
238 p->collected_metadata = true;
239 }
240
232 - if(strcasecmp(windows_shared_buffer, "_Total") == 0)
241 + if (strcasecmp(windows_shared_buffer, "_Total") == 0)
242 continue;
243
244 GET_INSTANCE_COUNTER(RemotePhysicalPages);
@@ -266,11 +275,15 @@ static bool do_hyperv_vid_partition(PERF_DATA_BLOCK *pDataBlock, int update_ever
275 update_every,
276 RRDSET_TYPE_LINE);
277
269 - p->rd_PhysicalPagesAllocated = rrddim_add(p->st_vm_vid_physical_pages_allocated, "allocated", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
270 - p->rd_RemotePhysicalPages = rrddim_add(p->st_vm_vid_remote_physical_pages, "remote_physical", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
278 + p->rd_PhysicalPagesAllocated =
279 + rrddim_add(p->st_vm_vid_physical_pages_allocated, "allocated", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
280 + p->rd_RemotePhysicalPages =
281 + rrddim_add(p->st_vm_vid_remote_physical_pages, "remote_physical", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
282
272 - rrdlabels_add(p->st_vm_vid_physical_pages_allocated->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
273 - rrdlabels_add(p->st_vm_vid_remote_physical_pages->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
283 + rrdlabels_add(
284 + p->st_vm_vid_physical_pages_allocated->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
285 + rrdlabels_add(
286 + p->st_vm_vid_remote_physical_pages->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
287 }
288
289 SETP_DIM_VALUE(st_vm_vid_remote_physical_pages, RemotePhysicalPages);
@@ -399,7 +412,8 @@ struct hypervisor_root_partition {
412 };
413
414 // Initialize the keys for the root partition metrics
402 -void initialize_hyperv_root_partition_keys(struct hypervisor_root_partition *p) {
415 +void initialize_hyperv_root_partition_keys(struct hypervisor_root_partition *p)
416 +{
417 p->DeviceSpacePages4K.key = "4K device pages";
418 p->DeviceSpacePages2M.key = "2M device pages";
419 p->DeviceSpacePages1G.key = "1G device pages";
@@ -422,7 +436,11 @@ void initialize_hyperv_root_partition_keys(struct hypervisor_root_partition *p)
436 }
437
438 // Callback function for inserting root partition metrics into the dictionary
425 -void dict_hyperv_root_partition_insert_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused) {
439 +void dict_hyperv_root_partition_insert_cb(
440 + const DICTIONARY_ITEM *item __maybe_unused,
441 + void *value,
442 + void *data __maybe_unused)
443 +{
444 struct hypervisor_root_partition *p = value;
445 initialize_hyperv_root_partition_keys(p);
446 }
@@ -442,9 +460,10 @@ static bool do_hyperv_root_partition(PERF_DATA_BLOCK *pDataBlock, int update_eve
460 if (!pi)
461 break;
462
445 - get_and_sanitize_instance_value(pDataBlock, pObjectType, pi, windows_shared_buffer, sizeof(windows_shared_buffer));
463 + get_and_sanitize_instance_value(
464 + pDataBlock, pObjectType, pi, windows_shared_buffer, sizeof(windows_shared_buffer));
465
447 - if(strcasecmp(windows_shared_buffer, "_Total") == 0)
466 + if (strcasecmp(windows_shared_buffer, "_Total") == 0)
467 continue;
468
469 struct hypervisor_root_partition *p = dictionary_set(item->instance, windows_shared_buffer, NULL, sizeof(*p));
@@ -472,7 +491,6 @@ static bool do_hyperv_root_partition(PERF_DATA_BLOCK *pDataBlock, int update_eve
491 GET_INSTANCE_COUNTER(VirtualTLBPages);
492 GET_INSTANCE_COUNTER(VirtualTLBFlushEntiresSec);
493
475 -
494 // Create charts
495 if (!p->charts_created) {
496 p->charts_created = true;
@@ -680,9 +698,9 @@ static bool do_hyperv_root_partition(PERF_DATA_BLOCK *pDataBlock, int update_eve
698
699 // Set the data for each dimension
700
683 - SETP_DIM_VALUE(st_device_space_pages,DeviceSpacePages4K);
684 - SETP_DIM_VALUE(st_device_space_pages,DeviceSpacePages2M);
685 - SETP_DIM_VALUE(st_device_space_pages,DeviceSpacePages1G);
701 + SETP_DIM_VALUE(st_device_space_pages, DeviceSpacePages4K);
702 + SETP_DIM_VALUE(st_device_space_pages, DeviceSpacePages2M);
703 + SETP_DIM_VALUE(st_device_space_pages, DeviceSpacePages1G);
704
705 SETP_DIM_VALUE(st_gpa_space_pages, GPASpacePages4K);
706 SETP_DIM_VALUE(st_gpa_space_pages, GPASpacePages2M);
@@ -744,9 +762,9 @@ struct hypervisor_storage_device {
762 COUNTER_DATA ErrorCount;
763 };
764
747 -
765 // Initialize the keys for the root partition metrics
749 -void initialize_hyperv_storage_device_keys(struct hypervisor_storage_device *p) {
766 +void initialize_hyperv_storage_device_keys(struct hypervisor_storage_device *p)
767 +{
768 p->ReadOperationsSec.key = "Read Operations/Sec";
769 p->WriteOperationsSec.key = "Write Operations/Sec";
770
@@ -756,7 +774,11 @@ void initialize_hyperv_storage_device_keys(struct hypervisor_storage_device *p)
774 }
775
776 // Callback function for inserting root partition metrics into the dictionary
759 -void dict_hyperv_storage_device_insert_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused) {
777 +void dict_hyperv_storage_device_insert_cb(
778 + const DICTIONARY_ITEM *item __maybe_unused,
779 + void *value,
780 + void *data __maybe_unused)
781 +{
782 struct hypervisor_storage_device *p = value;
783 initialize_hyperv_storage_device_keys(p);
784 }
@@ -769,16 +791,16 @@ static bool do_hyperv_storage_device(PERF_DATA_BLOCK *pDataBlock, int update_eve
791 if (!pObjectType)
792 return false;
793
772 -
794 PERF_INSTANCE_DEFINITION *pi = NULL;
795 for (LONG i = 0; i < pObjectType->NumInstances; i++) {
796 pi = perflibForEachInstance(pDataBlock, pObjectType, pi);
797 if (!pi)
798 break;
799
779 - get_and_sanitize_instance_value(pDataBlock, pObjectType, pi, windows_shared_buffer, sizeof(windows_shared_buffer));
800 + get_and_sanitize_instance_value(
801 + pDataBlock, pObjectType, pi, windows_shared_buffer, sizeof(windows_shared_buffer));
802
781 - if(strcasecmp(windows_shared_buffer, "_Total") == 0)
803 + if (strcasecmp(windows_shared_buffer, "_Total") == 0)
804 continue;
805
806 struct hypervisor_storage_device *p = dictionary_set(item->instance, windows_shared_buffer, NULL, sizeof(*p));
@@ -796,14 +818,14 @@ static bool do_hyperv_storage_device(PERF_DATA_BLOCK *pDataBlock, int update_eve
818 GET_INSTANCE_COUNTER(ErrorCount);
819
820 if (!p->charts_created) {
799 - p->charts_created = true;
821 + p->charts_created = true;
822 if (!p->st_operations) {
823 p->st_operations = rrdset_create_localhost(
824 "vm_storage_device_operations",
825 windows_shared_buffer,
826 NULL,
827 HYPERV,
806 - HYPERV".vm_storage_device_operations",
828 + HYPERV ".vm_storage_device_operations",
829 "VM storage device IOPS",
830 "operations/s",
831 _COMMON_PLUGIN_NAME,
@@ -813,9 +835,11 @@ static bool do_hyperv_storage_device(PERF_DATA_BLOCK *pDataBlock, int update_eve
835 RRDSET_TYPE_LINE);
836
837 p->rd_ReadOperationsSec = rrddim_add(p->st_operations, "read", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
816 - p->rd_WriteOperationsSec = rrddim_add(p->st_operations, "write", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
838 + p->rd_WriteOperationsSec =
839 + rrddim_add(p->st_operations, "write", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
840
818 - rrdlabels_add(p->st_operations->rrdlabels, "vm_storage_device", windows_shared_buffer, RRDLABEL_SRC_AUTO);
841 + rrdlabels_add(
842 + p->st_operations->rrdlabels, "vm_storage_device", windows_shared_buffer, RRDLABEL_SRC_AUTO);
843 }
844
845 if (!p->st_bytes) {
@@ -824,7 +848,7 @@ static bool do_hyperv_storage_device(PERF_DATA_BLOCK *pDataBlock, int update_eve
848 windows_shared_buffer,
849 NULL,
850 HYPERV,
827 - HYPERV".vm_storage_device_bytes",
851 + HYPERV ".vm_storage_device_bytes",
852 "VM storage device IO",
853 "bytes/s",
854 _COMMON_PLUGIN_NAME,
@@ -845,7 +869,7 @@ static bool do_hyperv_storage_device(PERF_DATA_BLOCK *pDataBlock, int update_eve
869 windows_shared_buffer,
870 NULL,
871 HYPERV,
848 - HYPERV".vm_storage_device_errors",
872 + HYPERV ".vm_storage_device_errors",
873 "VM storage device errors",
874 "errors/s",
875 _COMMON_PLUGIN_NAME,
@@ -860,13 +884,13 @@ static bool do_hyperv_storage_device(PERF_DATA_BLOCK *pDataBlock, int update_eve
884 }
885 }
886
863 - SETP_DIM_VALUE(st_operations,ReadOperationsSec);
864 - SETP_DIM_VALUE(st_operations,WriteOperationsSec);
887 + SETP_DIM_VALUE(st_operations, ReadOperationsSec);
888 + SETP_DIM_VALUE(st_operations, WriteOperationsSec);
889
866 - SETP_DIM_VALUE(st_bytes,ReadBytesSec);
867 - SETP_DIM_VALUE(st_bytes,WriteBytesSec);
890 + SETP_DIM_VALUE(st_bytes, ReadBytesSec);
891 + SETP_DIM_VALUE(st_bytes, WriteBytesSec);
892
869 - SETP_DIM_VALUE(st_errors,ErrorCount);
893 + SETP_DIM_VALUE(st_errors, ErrorCount);
894
895 // Mark the charts as done
896 rrdset_done(p->st_operations);
@@ -992,7 +1016,7 @@ static bool do_hyperv_switch(PERF_DATA_BLOCK *pDataBlock, int update_every, void
1016 get_and_sanitize_instance_value(
1017 pDataBlock, pObjectType, pi, windows_shared_buffer, sizeof(windows_shared_buffer));
1018
995 - if(strcasecmp(windows_shared_buffer, "_Total") == 0)
1019 + if (strcasecmp(windows_shared_buffer, "_Total") == 0)
1020 continue;
1021
1022 struct hypervisor_switch *p = dictionary_set(item->instance, windows_shared_buffer, NULL, sizeof(*p));
@@ -1029,7 +1053,7 @@ static bool do_hyperv_switch(PERF_DATA_BLOCK *pDataBlock, int update_every, void
1053 GET_INSTANCE_COUNTER(PurgedMacAddresses);
1054
1055 if (!p->charts_created) {
1032 - p->charts_created = true;
1056 + p->charts_created = true;
1057
1058 p->st_bytes = rrdset_create_localhost(
1059 "vswitch_traffic",
@@ -1256,7 +1280,6 @@ static bool do_hyperv_switch(PERF_DATA_BLOCK *pDataBlock, int update_every, void
1280 rrdset_done(p->st_flooded);
1281 rrdset_done(p->st_learned_mac);
1282 rrdset_done(p->st_purged_mac);
1259 -
1283 }
1284 return true;
1285 }
@@ -1328,16 +1351,19 @@ void initialize_hyperv_network_adapter_keys(struct hypervisor_network_adapter *p
1351 p->BytesReceivedSec.key = "Bytes Received/sec";
1352
1353 p->IPsecoffloadBytesReceivedSec.key = "IPsec offload Bytes Receive/sec";
1331 - p->IPsecoffloadBytesSentSec.key = "IPsec offload Bytes Sent/sec";
1332 - p->DirectedPacketsSentSec.key = "Directed Packets Sent/sec";
1333 - p->DirectedPacketsReceivedSec.key = "Directed Packets Received/sec";
1334 - p->BroadcastPacketsSentSec.key = "Broadcast Packets Sent/sec";
1335 - p->BroadcastPacketsReceivedSec.key = "Broadcast Packets Received/sec";
1336 - p->MulticastPacketsSentSec.key = "Multicast Packets Sent/sec";
1337 - p->MulticastPacketsReceivedSec.key = "Multicast Packets Received/sec";
1354 + p->IPsecoffloadBytesSentSec.key = "IPsec offload Bytes Sent/sec";
1355 + p->DirectedPacketsSentSec.key = "Directed Packets Sent/sec";
1356 + p->DirectedPacketsReceivedSec.key = "Directed Packets Received/sec";
1357 + p->BroadcastPacketsSentSec.key = "Broadcast Packets Sent/sec";
1358 + p->BroadcastPacketsReceivedSec.key = "Broadcast Packets Received/sec";
1359 + p->MulticastPacketsSentSec.key = "Multicast Packets Sent/sec";
1360 + p->MulticastPacketsReceivedSec.key = "Multicast Packets Received/sec";
1361 }
1362
1340 -void dict_hyperv_network_adapter_insert_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused)
1363 +void dict_hyperv_network_adapter_insert_cb(
1364 + const DICTIONARY_ITEM *item __maybe_unused,
1365 + void *value,
1366 + void *data __maybe_unused)
1367 {
1368 struct hypervisor_network_adapter *p = value;
1369 initialize_hyperv_network_adapter_keys(p);
@@ -1357,9 +1383,10 @@ static bool do_hyperv_network_adapter(PERF_DATA_BLOCK *pDataBlock, int update_ev
1383 if (!pi)
1384 break;
1385
1360 - get_and_sanitize_instance_value(pDataBlock, pObjectType, pi, windows_shared_buffer, sizeof(windows_shared_buffer));
1386 + get_and_sanitize_instance_value(
1387 + pDataBlock, pObjectType, pi, windows_shared_buffer, sizeof(windows_shared_buffer));
1388
1362 - if(strcasecmp(windows_shared_buffer, "_Total") == 0)
1389 + if (strcasecmp(windows_shared_buffer, "_Total") == 0)
1390 continue;
1391
1392 struct hypervisor_network_adapter *p = dictionary_set(item->instance, windows_shared_buffer, NULL, sizeof(*p));
@@ -1396,7 +1423,7 @@ static bool do_hyperv_network_adapter(PERF_DATA_BLOCK *pDataBlock, int update_ev
1423 windows_shared_buffer,
1424 NULL,
1425 HYPERV,
1399 - HYPERV".vm_net_interface_packets_dropped",
1426 + HYPERV ".vm_net_interface_packets_dropped",
1427 "VM interface packets dropped",
1428 "drops/s",
1429 _COMMON_PLUGIN_NAME,
@@ -1405,10 +1432,13 @@ static bool do_hyperv_network_adapter(PERF_DATA_BLOCK *pDataBlock, int update_ev
1432 update_every,
1433 RRDSET_TYPE_LINE);
1434
1408 - p->rd_DroppedPacketsIncomingSec = rrddim_add(p->st_dropped_packets, "incoming", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
1409 - p->rd_DroppedPacketsOutgoingSec = rrddim_add(p->st_dropped_packets, "outgoing", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
1435 + p->rd_DroppedPacketsIncomingSec =
1436 + rrddim_add(p->st_dropped_packets, "incoming", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
1437 + p->rd_DroppedPacketsOutgoingSec =
1438 + rrddim_add(p->st_dropped_packets, "outgoing", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
1439
1411 - rrdlabels_add(p->st_dropped_packets->rrdlabels, "vm_net_interface", windows_shared_buffer, RRDLABEL_SRC_AUTO);
1440 + rrdlabels_add(
1441 + p->st_dropped_packets->rrdlabels, "vm_net_interface", windows_shared_buffer, RRDLABEL_SRC_AUTO);
1442
1443 p->st_send_receive_packets = rrdset_create_localhost(
1444 "vm_net_interface_packets",
@@ -1424,28 +1454,34 @@ static bool do_hyperv_network_adapter(PERF_DATA_BLOCK *pDataBlock, int update_ev
1454 update_every,
1455 RRDSET_TYPE_LINE);
1456
1427 - p->rd_PacketsReceivedSec = rrddim_add(p->st_send_receive_packets, "received", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
1428 - p->rd_PacketsSentSec = rrddim_add(p->st_send_receive_packets, "sent", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
1457 + p->rd_PacketsReceivedSec =
1458 + rrddim_add(p->st_send_receive_packets, "received", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
1459 + p->rd_PacketsSentSec =
1460 + rrddim_add(p->st_send_receive_packets, "sent", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
1461
1430 - rrdlabels_add(p->st_send_receive_packets->rrdlabels, "vm_net_interface", windows_shared_buffer, RRDLABEL_SRC_AUTO);
1462 + rrdlabels_add(
1463 + p->st_send_receive_packets->rrdlabels, "vm_net_interface", windows_shared_buffer, RRDLABEL_SRC_AUTO);
1464
1465 p->st_send_receive_bytes = rrdset_create_localhost(
1433 - "vm_net_interface_traffic",
1434 - windows_shared_buffer,
1435 - NULL,
1436 - HYPERV,
1437 - HYPERV ".vm_net_interface_traffic",
1438 - "VM interface traffic",
1439 - "kilobits/s",
1440 - _COMMON_PLUGIN_NAME,
1441 - _COMMON_PLUGIN_MODULE_NAME,
1442 - NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_NET_INTERFACE_TRAFFIC,
1443 - update_every,
1444 - RRDSET_TYPE_AREA);
1445 -
1446 - p->rd_BytesReceivedSec = rrddim_add(p->st_send_receive_bytes, "received", NULL, 8, 1000, RRD_ALGORITHM_INCREMENTAL);
1447 - p->rd_BytesSentSec = rrddim_add(p->st_send_receive_bytes, "sent", NULL, -8, 1000, RRD_ALGORITHM_INCREMENTAL);
1448 - rrdlabels_add(p->st_send_receive_bytes->rrdlabels, "vm_net_interface", windows_shared_buffer, RRDLABEL_SRC_AUTO);
1466 + "vm_net_interface_traffic",
1467 + windows_shared_buffer,
1468 + NULL,
1469 + HYPERV,
1470 + HYPERV ".vm_net_interface_traffic",
1471 + "VM interface traffic",
1472 + "kilobits/s",
1473 + _COMMON_PLUGIN_NAME,
1474 + _COMMON_PLUGIN_MODULE_NAME,
1475 + NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_NET_INTERFACE_TRAFFIC,
1476 + update_every,
1477 + RRDSET_TYPE_AREA);
1478 +
1479 + p->rd_BytesReceivedSec =
1480 + rrddim_add(p->st_send_receive_bytes, "received", NULL, 8, 1000, RRD_ALGORITHM_INCREMENTAL);
1481 + p->rd_BytesSentSec =
1482 + rrddim_add(p->st_send_receive_bytes, "sent", NULL, -8, 1000, RRD_ALGORITHM_INCREMENTAL);
1483 + rrdlabels_add(
1484 + p->st_send_receive_bytes->rrdlabels, "vm_net_interface", windows_shared_buffer, RRDLABEL_SRC_AUTO);
1485
1486 p->st_IPsecoffloadBytes = rrdset_create_localhost(
1487 "vm_net_interface_ipsec_traffic",
@@ -1530,8 +1566,6 @@ static bool do_hyperv_network_adapter(PERF_DATA_BLOCK *pDataBlock, int update_ev
1566 rrddim_add(p->st_MulticastPackets, "sent", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
1567 rrdlabels_add(
1568 p->st_MulticastPackets->rrdlabels, "vm_net_interface", windows_shared_buffer, RRDLABEL_SRC_AUTO);
1533 -
1534 -
1569 }
1570
1571 SETP_DIM_VALUE(st_dropped_packets, DroppedPacketsIncomingSec);
@@ -1552,8 +1586,8 @@ static bool do_hyperv_network_adapter(PERF_DATA_BLOCK *pDataBlock, int update_ev
1586 SETP_DIM_VALUE(st_BroadcastPackets, BroadcastPacketsSentSec);
1587 SETP_DIM_VALUE(st_BroadcastPackets, BroadcastPacketsReceivedSec);
1588
1555 - SETP_DIM_VALUE(st_MulticastPackets,MulticastPacketsSentSec);
1556 - SETP_DIM_VALUE(st_MulticastPackets,MulticastPacketsReceivedSec);
1589 + SETP_DIM_VALUE(st_MulticastPackets, MulticastPacketsSentSec);
1590 + SETP_DIM_VALUE(st_MulticastPackets, MulticastPacketsReceivedSec);
1591
1592 rrdset_done(p->st_IPsecoffloadBytes);
1593 rrdset_done(p->st_DirectedPackets);
@@ -1566,7 +1600,6 @@ static bool do_hyperv_network_adapter(PERF_DATA_BLOCK *pDataBlock, int update_ev
1600 return true;
1601 }
1602
1569 -
1603 // Hypervisor Virtual Processor
1604 struct hypervisor_processor {
1605 bool collected_metadata;
@@ -1591,7 +1624,6 @@ struct hypervisor_processor {
1624 collected_number TotalRunTime_total;
1625 };
1626
1594 -
1627 void initialize_hyperv_processor_keys(struct hypervisor_processor *p)
1628 {
1629 p->GuestRunTime.key = "% Guest Run Time";
@@ -1624,7 +1656,8 @@ static bool do_hyperv_processor(PERF_DATA_BLOCK *pDataBlock, int update_every, v
1656 if (!pi)
1657 break;
1658
1627 - get_and_sanitize_instance_value(pDataBlock, pObjectType, pi, windows_shared_buffer, sizeof(windows_shared_buffer));
1659 + get_and_sanitize_instance_value(
1660 + pDataBlock, pObjectType, pi, windows_shared_buffer, sizeof(windows_shared_buffer));
1661
1662 if (strcasecmp(windows_shared_buffer, "_Total") == 0)
1663 continue;
@@ -1662,21 +1695,22 @@ static bool do_hyperv_processor(PERF_DATA_BLOCK *pDataBlock, int update_every, v
1695
1696 p->rd_TotalRunTime =
1697 rrddim_add(p->st_HypervisorProcessorTotal, "usage", NULL, 1, 1000000, RRD_ALGORITHM_INCREMENTAL);
1665 - rrdlabels_add(p->st_HypervisorProcessorTotal->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
1698 + rrdlabels_add(
1699 + p->st_HypervisorProcessorTotal->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
1700
1701 p->st_HypervisorProcessor = rrdset_create_localhost(
1668 - "vm_cpu_usage_by_run_context",
1669 - windows_shared_buffer,
1670 - NULL,
1671 - HYPERV,
1672 - HYPERV ".vm_cpu_usage_by_run_context",
1673 - "VM CPU usage by run context",
1674 - "percentage",
1675 - _COMMON_PLUGIN_NAME,
1676 - _COMMON_PLUGIN_MODULE_NAME,
1677 - NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_CPU_USAGE_BY_RUN_CONTEXT,
1678 - update_every,
1679 - RRDSET_TYPE_STACKED);
1702 + "vm_cpu_usage_by_run_context",
1703 + windows_shared_buffer,
1704 + NULL,
1705 + HYPERV,
1706 + HYPERV ".vm_cpu_usage_by_run_context",
1707 + "VM CPU usage by run context",
1708 + "percentage",
1709 + _COMMON_PLUGIN_NAME,
1710 + _COMMON_PLUGIN_MODULE_NAME,
1711 + NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_CPU_USAGE_BY_RUN_CONTEXT,
1712 + update_every,
1713 + RRDSET_TYPE_STACKED);
1714
1715 p->rd_GuestRunTime =
1716 rrddim_add(p->st_HypervisorProcessor, "guest", NULL, 1, 1000000, RRD_ALGORITHM_INCREMENTAL);
@@ -1696,13 +1730,18 @@ static bool do_hyperv_processor(PERF_DATA_BLOCK *pDataBlock, int update_every, v
1730
1731 {
1732 struct hypervisor_processor *p;
1699 - dfe_start_read(item->instance, p) {
1700 - rrddim_set_by_pointer(p->st_HypervisorProcessor, p->rd_HypervisorRunTime, (collected_number) p->HypervisorRunTime_total);
1701 - rrddim_set_by_pointer(p->st_HypervisorProcessor, p->rd_GuestRunTime, (collected_number) p->GuestRunTime_total);
1702 - rrddim_set_by_pointer(p->st_HypervisorProcessor, p->rd_RemoteRunTime, (collected_number) p->RemoteRunTime_total);
1733 + dfe_start_read(item->instance, p)
1734 + {
1735 + rrddim_set_by_pointer(
1736 + p->st_HypervisorProcessor, p->rd_HypervisorRunTime, (collected_number)p->HypervisorRunTime_total);
1737 + rrddim_set_by_pointer(
1738 + p->st_HypervisorProcessor, p->rd_GuestRunTime, (collected_number)p->GuestRunTime_total);
1739 + rrddim_set_by_pointer(
1740 + p->st_HypervisorProcessor, p->rd_RemoteRunTime, (collected_number)p->RemoteRunTime_total);
1741 rrdset_done(p->st_HypervisorProcessor);
1742
1705 - rrddim_set_by_pointer(p->st_HypervisorProcessorTotal, p->rd_TotalRunTime, (collected_number) p->TotalRunTime_total);
1743 + rrddim_set_by_pointer(
1744 + p->st_HypervisorProcessorTotal, p->rd_TotalRunTime, (collected_number)p->TotalRunTime_total);
1745 rrdset_done(p->st_HypervisorProcessorTotal);
1746
1747 p->GuestRunTime_total = 0;
@@ -1761,7 +1800,8 @@ hyperv_perf_item hyperv_perf_list[] = {
1800
1801 {.registry_name = NULL, .function_collect = NULL}};
1802
1764 -int do_PerflibHyperV(int update_every, usec_t dt __maybe_unused) {
1803 +int do_PerflibHyperV(int update_every, usec_t dt __maybe_unused)
1804 +{
1805 static bool initialized = false;
1806
1807 if (unlikely(!initialized)) {
src/collectors/windows.plugin/perflib-memory.c
+86 -91
@@ -31,10 +31,11 @@ struct system_pool {
31 COUNTER_DATA nonPagedData;
32 };
33
34 -struct swap localSwap = { 0 };
35 -struct system_pool localPool = { 0 };
34 +struct swap localSwap = {0};
35 +struct system_pool localPool = {0};
36
37 -void initialize_swap_keys(struct swap *p) {
37 +void initialize_swap_keys(struct swap *p)
38 +{
39 // SWAP Operations
40 p->pageReadsTotal.key = "Page Reads/sec";
41 p->pageWritesTotal.key = "Page Writes/s";
@@ -44,12 +45,14 @@ void initialize_swap_keys(struct swap *p) {
45 p->pageOutputTotal.key = "Pages Output/s";
46 }
47
47 -void initialize_pool_keys(struct system_pool *p) {
48 +void initialize_pool_keys(struct system_pool *p)
49 +{
50 p->pagedData.key = "Pool Paged Bytes";
51 p->nonPagedData.key = "Pool Nonpaged Bytes";
52 }
53
52 -static void initialize(void) {
54 +static void initialize(void)
55 +{
56 initialize_swap_keys(&localSwap);
57 initialize_pool_keys(&localPool);
58 }
@@ -63,64 +66,58 @@ static void do_memory_swap(PERF_DATA_BLOCK *pDataBlock, PERF_OBJECT_TYPE *pObjec
66
67 if (!localSwap.operations) {
68 localSwap.operations = rrdset_create_localhost(
66 - "mem"
67 - , "swap_operations", NULL
68 - , "swap"
69 - , "mem.swap_iops"
70 -
71 - , "Swap Operations"
72 - , "operations/s"
73 - , PLUGIN_WINDOWS_NAME
74 - , "PerflibMemory"
75 - , NETDATA_CHART_PRIO_MEM_SWAPIO
76 - , update_every
77 - , RRDSET_TYPE_STACKED
78 - );
79 -
80 - localSwap.rd_op_read = rrddim_add(localSwap.operations, "read", NULL,
81 - 1, 1, RRD_ALGORITHM_INCREMENTAL);
82 - localSwap.rd_op_write = rrddim_add(localSwap.operations, "write", NULL,
83 - 1, -1, RRD_ALGORITHM_INCREMENTAL);
69 + "mem",
70 + "swap_operations",
71 + NULL,
72 + "swap",
73 + "mem.swap_iops"
74 +
75 + ,
76 + "Swap Operations",
77 + "operations/s",
78 + PLUGIN_WINDOWS_NAME,
79 + "PerflibMemory",
80 + NETDATA_CHART_PRIO_MEM_SWAPIO,
81 + update_every,
82 + RRDSET_TYPE_STACKED);
83 +
84 + localSwap.rd_op_read = rrddim_add(localSwap.operations, "read", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
85 + localSwap.rd_op_write = rrddim_add(localSwap.operations, "write", NULL, 1, -1, RRD_ALGORITHM_INCREMENTAL);
86 }
87
86 - rrddim_set_by_pointer(localSwap.operations,
87 - localSwap.rd_op_read,
88 - (collected_number)localSwap.pageReadsTotal.current.Data);
88 + rrddim_set_by_pointer(
89 + localSwap.operations, localSwap.rd_op_read, (collected_number)localSwap.pageReadsTotal.current.Data);
90
90 - rrddim_set_by_pointer(localSwap.operations,
91 - localSwap.rd_op_write,
92 - (collected_number)localSwap.pageWritesTotal.current.Data);
91 + rrddim_set_by_pointer(
92 + localSwap.operations, localSwap.rd_op_write, (collected_number)localSwap.pageWritesTotal.current.Data);
93 rrdset_done(localSwap.operations);
94
95 if (!localSwap.pages) {
96 localSwap.pages = rrdset_create_localhost(
97 - "mem"
98 - , "swap_pages", NULL
99 - , "swap"
100 - , "mem.swap_pages_io"
101 -
102 - , "Swap Pages"
103 - , "pages/s"
104 - , PLUGIN_WINDOWS_NAME
105 - , "PerflibMemory"
106 - , NETDATA_CHART_PRIO_MEM_SWAP_PAGES
107 - , update_every
108 - , RRDSET_TYPE_STACKED
109 - );
110 -
111 - localSwap.rd_page_read = rrddim_add(localSwap.pages, "read", NULL,
112 - 1, 1, RRD_ALGORITHM_INCREMENTAL);
113 - localSwap.rd_page_write = rrddim_add(localSwap.pages, "write", NULL,
114 - 1, -1, RRD_ALGORITHM_INCREMENTAL);
97 + "mem",
98 + "swap_pages",
99 + NULL,
100 + "swap",
101 + "mem.swap_pages_io"
102 +
103 + ,
104 + "Swap Pages",
105 + "pages/s",
106 + PLUGIN_WINDOWS_NAME,
107 + "PerflibMemory",
108 + NETDATA_CHART_PRIO_MEM_SWAP_PAGES,
109 + update_every,
110 + RRDSET_TYPE_STACKED);
111 +
112 + localSwap.rd_page_read = rrddim_add(localSwap.pages, "read", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
113 + localSwap.rd_page_write = rrddim_add(localSwap.pages, "write", NULL, 1, -1, RRD_ALGORITHM_INCREMENTAL);
114 }
115
117 - rrddim_set_by_pointer(localSwap.pages,
118 - localSwap.rd_page_read,
119 - (collected_number)localSwap.pageInputTotal.current.Data);
116 + rrddim_set_by_pointer(
117 + localSwap.pages, localSwap.rd_page_read, (collected_number)localSwap.pageInputTotal.current.Data);
118
121 - rrddim_set_by_pointer(localSwap.pages,
122 - localSwap.rd_page_write,
123 - (collected_number)localSwap.pageOutputTotal.current.Data);
119 + rrddim_set_by_pointer(
120 + localSwap.pages, localSwap.rd_page_write, (collected_number)localSwap.pageOutputTotal.current.Data);
121 rrdset_done(localSwap.pages);
122 }
123
@@ -131,45 +128,41 @@ static void do_memory_system_pool(PERF_DATA_BLOCK *pDataBlock, PERF_OBJECT_TYPE
128
129 if (!localPool.pool) {
130 localPool.pool = rrdset_create_localhost(
134 - "mem"
135 - , "system_pool", NULL
136 - , "mem"
137 - , "mem.system_pool_size"
138 -
139 - , "System Memory Pool"
140 - , "bytes"
141 - , PLUGIN_WINDOWS_NAME
142 - , "PerflibMemory"
143 - , NETDATA_CHART_PRIO_MEM_SYSTEM_POOL
144 - , update_every
145 - , RRDSET_TYPE_STACKED
146 - );
147 -
148 - localPool.rd_paged = rrddim_add(localPool.pool, "paged", NULL,
149 - 1, 1, RRD_ALGORITHM_ABSOLUTE);
150 - localPool.rd_nonpaged = rrddim_add(localPool.pool, "pool-paged", NULL,
151 - 1, 1, RRD_ALGORITHM_ABSOLUTE);
131 + "mem",
132 + "system_pool",
133 + NULL,
134 + "mem",
135 + "mem.system_pool_size"
136 +
137 + ,
138 + "System Memory Pool",
139 + "bytes",
140 + PLUGIN_WINDOWS_NAME,
141 + "PerflibMemory",
142 + NETDATA_CHART_PRIO_MEM_SYSTEM_POOL,
143 + update_every,
144 + RRDSET_TYPE_STACKED);
145 +
146 + localPool.rd_paged = rrddim_add(localPool.pool, "paged", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
147 + localPool.rd_nonpaged = rrddim_add(localPool.pool, "pool-paged", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
148 }
149
154 - rrddim_set_by_pointer(localPool.pool,
155 - localPool.rd_paged,
156 - (collected_number)localPool.pagedData.current.Data);
150 + rrddim_set_by_pointer(localPool.pool, localPool.rd_paged, (collected_number)localPool.pagedData.current.Data);
151
158 - rrddim_set_by_pointer(localPool.pool,
159 - localPool.rd_nonpaged,
160 - (collected_number)localPool.nonPagedData.current.Data);
152 + rrddim_set_by_pointer(localPool.pool, localPool.rd_nonpaged, (collected_number)localPool.nonPagedData.current.Data);
153 rrdset_done(localPool.pool);
154 }
155
164 -static bool do_memory(PERF_DATA_BLOCK *pDataBlock, int update_every) {
156 +static bool do_memory(PERF_DATA_BLOCK *pDataBlock, int update_every)
157 +{
158 PERF_OBJECT_TYPE *pObjectType = perflibFindObjectTypeByName(pDataBlock, "Memory");
159 if (!pObjectType)
160 return false;
161
169 - static COUNTER_DATA pagesPerSec = { .key = "Pages/sec" };
170 - static COUNTER_DATA pageFaultsPerSec = { .key = "Page Faults/sec" };
162 + static COUNTER_DATA pagesPerSec = {.key = "Pages/sec"};
163 + static COUNTER_DATA pageFaultsPerSec = {.key = "Page Faults/sec"};
164
172 - if(perflibGetObjectCounter(pDataBlock, pObjectType, &pageFaultsPerSec) &&
165 + if (perflibGetObjectCounter(pDataBlock, pObjectType, &pageFaultsPerSec) &&
166 perflibGetObjectCounter(pDataBlock, pObjectType, &pagesPerSec)) {
167 ULONGLONG total = pageFaultsPerSec.current.Data;
168 ULONGLONG major = pagesPerSec.current.Data;
@@ -177,16 +170,16 @@ static bool do_memory(PERF_DATA_BLOCK *pDataBlock, int update_every) {
170 common_mem_pgfaults(minor, major, update_every);
171 }
172
180 - static COUNTER_DATA availableBytes = { .key = "Available Bytes" };
181 - static COUNTER_DATA availableKBytes = { .key = "Available KBytes" };
182 - static COUNTER_DATA availableMBytes = { .key = "Available MBytes" };
173 + static COUNTER_DATA availableBytes = {.key = "Available Bytes"};
174 + static COUNTER_DATA availableKBytes = {.key = "Available KBytes"};
175 + static COUNTER_DATA availableMBytes = {.key = "Available MBytes"};
176 ULONGLONG available_bytes = 0;
177
185 - if(perflibGetObjectCounter(pDataBlock, pObjectType, &availableBytes))
178 + if (perflibGetObjectCounter(pDataBlock, pObjectType, &availableBytes))
179 available_bytes = availableBytes.current.Data;
187 - else if(perflibGetObjectCounter(pDataBlock, pObjectType, &availableKBytes))
180 + else if (perflibGetObjectCounter(pDataBlock, pObjectType, &availableKBytes))
181 available_bytes = availableKBytes.current.Data * 1024;
189 - else if(perflibGetObjectCounter(pDataBlock, pObjectType, &availableMBytes))
182 + else if (perflibGetObjectCounter(pDataBlock, pObjectType, &availableMBytes))
183 available_bytes = availableMBytes.current.Data * 1024 * 1024;
184
185 common_mem_available(available_bytes, update_every);
@@ -198,20 +191,22 @@ static bool do_memory(PERF_DATA_BLOCK *pDataBlock, int update_every) {
191 return true;
192 }
193
201 -int do_PerflibMemory(int update_every, usec_t dt __maybe_unused) {
194 +int do_PerflibMemory(int update_every, usec_t dt __maybe_unused)
195 +{
196 static bool initialized = false;
197
204 - if(unlikely(!initialized)) {
198 + if (unlikely(!initialized)) {
199 initialize();
200 initialized = true;
201 }
202
203 DWORD id = RegistryFindIDByName("Memory");
210 - if(id == PERFLIB_REGISTRY_NAME_NOT_FOUND)
204 + if (id == PERFLIB_REGISTRY_NAME_NOT_FOUND)
205 return -1;
206
207 PERF_DATA_BLOCK *pDataBlock = perflibGetPerformanceData(id);
214 - if(!pDataBlock) return -1;
208 + if (!pDataBlock)
209 + return -1;
210
211 do_memory(pDataBlock, update_every);
212
src/collectors/windows.plugin/perflib-mssql.c
+52 -26
@@ -168,7 +168,8 @@ struct mssql_db_instance {
168
169 static DICTIONARY *mssql_instances = NULL;
170
171 -static void initialize_mssql_objects(struct mssql_instance *p, const char *instance) {
171 +static void initialize_mssql_objects(struct mssql_instance *p, const char *instance)
172 +{
173 char prefix[NETDATA_MAX_INSTANCE_NAME];
174 if (!strcmp(instance, "MSSQLSERVER")) {
175 strncpyz(prefix, "SQLServer:", sizeof(prefix) - 1);
@@ -208,7 +209,8 @@ static void initialize_mssql_objects(struct mssql_instance *p, const char *insta
209 p->instanceID = strdup(instance);
210 }
211
211 -static inline void initialize_mssql_keys(struct mssql_instance *p) {
212 +static inline void initialize_mssql_keys(struct mssql_instance *p)
213 +{
214 // General Statistics (https://learn.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-general-statistics-object)
215 p->MSSQLUserConnections.key = "User Connections";
216 p->MSSQLBlockedProcesses.key = "Processes blocked";
@@ -240,14 +242,16 @@ static inline void initialize_mssql_keys(struct mssql_instance *p) {
242 p->MSSQLTotalServerMemory.key = "Total Server Memory (KB)";
243 }
244
243 -void dict_mssql_insert_locks_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused) {
245 +void dict_mssql_insert_locks_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused)
246 +{
247 // https://learn.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-locks-object
248 struct mssql_lock_instance *ptr = value;
249 ptr->deadLocks.key = "Number of Deadlocks/sec";
250 ptr->lockWait.key = "Lock Waits/sec";
251 }
252
250 -void dict_mssql_insert_databases_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused) {
253 +void dict_mssql_insert_databases_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused)
254 +{
255 struct mssql_db_instance *ptr = value;
256
257 // https://learn.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-databases-object
@@ -260,7 +264,8 @@ void dict_mssql_insert_databases_cb(const DICTIONARY_ITEM *item __maybe_unused,
264 ptr->MSSQLDatabaseWriteTransactions.key = "Write Transactions/sec";
265 }
266
263 -void dict_mssql_insert_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused) {
267 +void dict_mssql_insert_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused)
268 +{
269 struct mssql_instance *p = value;
270 const char *instance = dictionary_acquired_item_name((DICTIONARY_ITEM *)item);
271
@@ -280,7 +285,8 @@ void dict_mssql_insert_cb(const DICTIONARY_ITEM *item __maybe_unused, void *valu
285 initialize_mssql_keys(p);
286 }
287
283 -static int mssql_fill_dictionary() {
288 +static int mssql_fill_dictionary()
289 +{
290 HKEY hKey;
291 LSTATUS ret = RegOpenKeyExA(
292 HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Microsoft SQL Server\\Instance Names\\SQL", 0, KEY_READ, &hKey);
@@ -325,7 +331,8 @@ endMSSQLFillDict:
331 return (ret == ERROR_SUCCESS) ? 0 : -1;
332 }
333
328 -static int initialize(void) {
334 +static int initialize(void)
335 +{
336 mssql_instances = dictionary_create_advanced(
337 DICT_OPTION_DONT_OVERWRITE_VALUE | DICT_OPTION_FIXED_SIZE, NULL, sizeof(struct mssql_instance));
338
@@ -338,7 +345,8 @@ static int initialize(void) {
345 return 0;
346 }
347
341 -static void do_mssql_general_stats(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *p, int update_every) {
348 +static void do_mssql_general_stats(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *p, int update_every)
349 +{
350 char id[RRD_ID_LENGTH_MAX + 1];
351
352 PERF_OBJECT_TYPE *pObjectType = perflibFindObjectTypeByName(pDataBlock, p->objectName[NETDATA_MSSQL_GENERAL_STATS]);
@@ -402,7 +410,8 @@ static void do_mssql_general_stats(PERF_DATA_BLOCK *pDataBlock, struct mssql_ins
410 }
411 }
412
405 -static void do_mssql_sql_statistics(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *p, int update_every) {
413 +static void do_mssql_sql_statistics(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *p, int update_every)
414 +{
415 char id[RRD_ID_LENGTH_MAX + 1];
416
417 PERF_OBJECT_TYPE *pObjectType = perflibFindObjectTypeByName(pDataBlock, p->objectName[NETDATA_MSSQL_SQL_STATS]);
@@ -560,7 +569,8 @@ static void do_mssql_sql_statistics(PERF_DATA_BLOCK *pDataBlock, struct mssql_in
569 }
570 }
571
563 -static void do_mssql_buffer_management(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *p, int update_every) {
572 +static void do_mssql_buffer_management(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *p, int update_every)
573 +{
574 char id[RRD_ID_LENGTH_MAX + 1];
575
576 PERF_OBJECT_TYPE *pObjectType =
@@ -694,7 +704,8 @@ static void do_mssql_buffer_management(PERF_DATA_BLOCK *pDataBlock, struct mssql
704 }
705 }
706
697 -static void do_mssql_access_methods(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *p, int update_every) {
707 +static void do_mssql_access_methods(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *p, int update_every)
708 +{
709 char id[RRD_ID_LENGTH_MAX + 1];
710
711 PERF_OBJECT_TYPE *pObjectType =
@@ -735,7 +746,8 @@ static void do_mssql_access_methods(PERF_DATA_BLOCK *pDataBlock, struct mssql_in
746 }
747 }
748
738 -static void do_mssql_errors(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *p, int update_every) {
749 +static void do_mssql_errors(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *p, int update_every)
750 +{
751 char id[RRD_ID_LENGTH_MAX + 1];
752
753 PERF_OBJECT_TYPE *pObjectType = perflibFindObjectTypeByName(pDataBlock, p->objectName[NETDATA_MSSQL_SQL_ERRORS]);
@@ -771,7 +783,8 @@ static void do_mssql_errors(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *
783 }
784 }
785
774 -int dict_mssql_locks_charts_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused) {
786 +int dict_mssql_locks_charts_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused)
787 +{
788 char id[RRD_ID_LENGTH_MAX + 1];
789
790 struct mssql_lock_instance *mli = value;
@@ -842,7 +855,8 @@ int dict_mssql_locks_charts_cb(const DICTIONARY_ITEM *item __maybe_unused, void
855 return 1;
856 }
857
845 -static void do_mssql_locks(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *p, int update_every) {
858 +static void do_mssql_locks(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *p, int update_every)
859 +{
860 PERF_OBJECT_TYPE *pObjectType = perflibFindObjectTypeByName(pDataBlock, p->objectName[NETDATA_MSSQL_LOCKS]);
861 if (!pObjectType)
862 return;
@@ -879,7 +893,8 @@ static void do_mssql_locks(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *p
893 rrdset_done(p->st_deadLocks);
894 }
895
882 -static void mssql_database_backup_restore_chart(struct mssql_db_instance *mli, const char *db, int update_every) {
896 +static void mssql_database_backup_restore_chart(struct mssql_db_instance *mli, const char *db, int update_every)
897 +{
898 char id[RRD_ID_LENGTH_MAX + 1];
899
900 if (!mli->st_db_backup_restore_operations) {
@@ -922,7 +937,8 @@ static void mssql_database_backup_restore_chart(struct mssql_db_instance *mli, c
937 rrdset_done(mli->st_db_backup_restore_operations);
938 }
939
925 -static void mssql_database_log_flushes_chart(struct mssql_db_instance *mli, const char *db, int update_every) {
940 +static void mssql_database_log_flushes_chart(struct mssql_db_instance *mli, const char *db, int update_every)
941 +{
942 char id[RRD_ID_LENGTH_MAX + 1];
943
944 if (!mli->st_db_log_flushes) {
@@ -960,7 +976,8 @@ static void mssql_database_log_flushes_chart(struct mssql_db_instance *mli, cons
976 rrdset_done(mli->st_db_log_flushes);
977 }
978
963 -static void mssql_database_log_flushed_chart(struct mssql_db_instance *mli, const char *db, int update_every) {
979 +static void mssql_database_log_flushed_chart(struct mssql_db_instance *mli, const char *db, int update_every)
980 +{
981 char id[RRD_ID_LENGTH_MAX + 1];
982
983 if (!mli->st_db_log_flushed) {
@@ -998,7 +1015,8 @@ static void mssql_database_log_flushed_chart(struct mssql_db_instance *mli, cons
1015 rrdset_done(mli->st_db_log_flushed);
1016 }
1017
1001 -static void mssql_transactions_chart(struct mssql_db_instance *mli, const char *db, int update_every) {
1018 +static void mssql_transactions_chart(struct mssql_db_instance *mli, const char *db, int update_every)
1019 +{
1020 char id[RRD_ID_LENGTH_MAX + 1];
1021
1022 if (!mli->st_db_transactions) {
@@ -1037,7 +1055,8 @@ static void mssql_transactions_chart(struct mssql_db_instance *mli, const char *
1055 rrdset_done(mli->st_db_transactions);
1056 }
1057
1040 -static void mssql_write_transactions_chart(struct mssql_db_instance *mli, const char *db, int update_every) {
1058 +static void mssql_write_transactions_chart(struct mssql_db_instance *mli, const char *db, int update_every)
1059 +{
1060 char id[RRD_ID_LENGTH_MAX + 1];
1061
1062 if (!mli->st_db_write_transactions) {
@@ -1077,7 +1096,8 @@ static void mssql_write_transactions_chart(struct mssql_db_instance *mli, const
1096 rrdset_done(mli->st_db_write_transactions);
1097 }
1098
1080 -static void mssql_active_transactions_chart(struct mssql_db_instance *mli, const char *db, int update_every) {
1099 +static void mssql_active_transactions_chart(struct mssql_db_instance *mli, const char *db, int update_every)
1100 +{
1101 char id[RRD_ID_LENGTH_MAX + 1];
1102
1103 if (!mli->st_db_active_transactions) {
@@ -1117,7 +1137,8 @@ static void mssql_active_transactions_chart(struct mssql_db_instance *mli, const
1137 rrdset_done(mli->st_db_active_transactions);
1138 }
1139
1120 -static inline void mssql_data_file_size_chart(struct mssql_db_instance *mli, const char *db, int update_every) {
1140 +static inline void mssql_data_file_size_chart(struct mssql_db_instance *mli, const char *db, int update_every)
1141 +{
1142 char id[RRD_ID_LENGTH_MAX + 1];
1143
1144 if (!mli->st_db_data_file_size) {
@@ -1154,7 +1175,8 @@ static inline void mssql_data_file_size_chart(struct mssql_db_instance *mli, con
1175 rrdset_done(mli->st_db_data_file_size);
1176 }
1177
1157 -int dict_mssql_databases_charts_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused) {
1178 +int dict_mssql_databases_charts_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused)
1179 +{
1180 struct mssql_db_instance *mli = value;
1181 const char *db = dictionary_acquired_item_name((DICTIONARY_ITEM *)item);
1182
@@ -1182,7 +1204,8 @@ int dict_mssql_databases_charts_cb(const DICTIONARY_ITEM *item __maybe_unused, v
1204 return 1;
1205 }
1206
1185 -static void do_mssql_databases(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *p, int update_every) {
1207 +static void do_mssql_databases(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *p, int update_every)
1208 +{
1209 PERF_OBJECT_TYPE *pObjectType = perflibFindObjectTypeByName(pDataBlock, p->objectName[NETDATA_MSSQL_DATABASE]);
1210 if (!pObjectType)
1211 return;
@@ -1236,7 +1259,8 @@ static void do_mssql_databases(PERF_DATA_BLOCK *pDataBlock, struct mssql_instanc
1259 dictionary_sorted_walkthrough_read(p->databases, dict_mssql_databases_charts_cb, &update_every);
1260 }
1261
1239 -static void do_mssql_memory_mgr(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *p, int update_every) {
1262 +static void do_mssql_memory_mgr(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *p, int update_every)
1263 +{
1264 char id[RRD_ID_LENGTH_MAX + 1];
1265
1266 PERF_OBJECT_TYPE *pObjectType = perflibFindObjectTypeByName(pDataBlock, p->objectName[NETDATA_MSSQL_MEMORY]);
@@ -1367,7 +1391,8 @@ static void do_mssql_memory_mgr(PERF_DATA_BLOCK *pDataBlock, struct mssql_instan
1391 }
1392 }
1393
1370 -int dict_mssql_charts_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused) {
1394 +int dict_mssql_charts_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused)
1395 +{
1396 struct mssql_instance *p = value;
1397 int *update_every = data;
1398
@@ -1400,7 +1425,8 @@ int dict_mssql_charts_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value
1425 return 1;
1426 }
1427
1403 -int do_PerflibMSSQL(int update_every, usec_t dt __maybe_unused) {
1428 +int do_PerflibMSSQL(int update_every, usec_t dt __maybe_unused)
1429 +{
1430 static bool initialized = false;
1431
1432 if (unlikely(!initialized)) {
src/collectors/windows.plugin/perflib-network.c
+350 -313
@@ -115,146 +115,156 @@ struct network_protocol {
115 } networks[] = {
116 {
117 .protocol = "IPv4",
118 - .packets = {
119 - .received = { .key = "Datagrams Received/sec" },
120 - .sent = { .key = "Datagrams Sent/sec" },
121 - .delivered = { .key = "Datagrams Received Delivered/sec" },
122 - .forwarded = { .key = "Datagrams Forwarded/sec" },
123 - .type = "ipv4",
124 - .id = "packets",
125 - .family = "packets",
126 - .context = "ipv4.packets",
127 - .title = "IPv4 Packets",
128 - .priority = NETDATA_CHART_PRIO_IPV4_PACKETS,
129 - },
118 + .packets =
119 + {
120 + .received = {.key = "Datagrams Received/sec"},
121 + .sent = {.key = "Datagrams Sent/sec"},
122 + .delivered = {.key = "Datagrams Received Delivered/sec"},
123 + .forwarded = {.key = "Datagrams Forwarded/sec"},
124 + .type = "ipv4",
125 + .id = "packets",
126 + .family = "packets",
127 + .context = "ipv4.packets",
128 + .title = "IPv4 Packets",
129 + .priority = NETDATA_CHART_PRIO_IPV4_PACKETS,
130 + },
131 },
132 {
133 .protocol = "IPv6",
133 - .packets = {
134 - .received = { .key = "Datagrams Received/sec" },
135 - .sent = { .key = "Datagrams Sent/sec" },
136 - .delivered = { .key = "Datagrams Received Delivered/sec" },
137 - .forwarded = { .key = "Datagrams Forwarded/sec" },
138 - .type = "ipv6",
139 - .id = "packets",
140 - .family = "packets",
141 - .context = "ip6.packets",
142 - .title = "IPv6 Packets",
143 - .priority = NETDATA_CHART_PRIO_IPV6_PACKETS,
144 - },
134 + .packets =
135 + {
136 + .received = {.key = "Datagrams Received/sec"},
137 + .sent = {.key = "Datagrams Sent/sec"},
138 + .delivered = {.key = "Datagrams Received Delivered/sec"},
139 + .forwarded = {.key = "Datagrams Forwarded/sec"},
140 + .type = "ipv6",
141 + .id = "packets",
142 + .family = "packets",
143 + .context = "ip6.packets",
144 + .title = "IPv6 Packets",
145 + .priority = NETDATA_CHART_PRIO_IPV6_PACKETS,
146 + },
147 },
148 {
149 .protocol = "TCPv4",
148 - .packets = {
149 - .received = { .key = "Segments Received/sec" },
150 - .sent = { .key = "Segments Sent/sec" },
151 - .type = "ipv4",
152 - .id = "tcppackets",
153 - .family = "tcp",
154 - .context = "ipv4.tcppackets",
155 - .title = "IPv4 TCP Packets",
156 - .priority = NETDATA_CHART_PRIO_IPV4_TCP_PACKETS,
157 - },
150 + .packets =
151 + {
152 + .received = {.key = "Segments Received/sec"},
153 + .sent = {.key = "Segments Sent/sec"},
154 + .type = "ipv4",
155 + .id = "tcppackets",
156 + .family = "tcp",
157 + .context = "ipv4.tcppackets",
158 + .title = "IPv4 TCP Packets",
159 + .priority = NETDATA_CHART_PRIO_IPV4_TCP_PACKETS,
160 + },
161 },
162 {
163 .protocol = "TCPv6",
161 - .packets = {
162 - .received = { .key = "Segments Received/sec" },
163 - .sent = { .key = "Segments Sent/sec" },
164 - .type = "ipv6",
165 - .id = "tcppackets",
166 - .family = "tcp6",
167 - .context = "ipv6.tcppackets",
168 - .title = "IPv6 TCP Packets",
169 - .priority = NETDATA_CHART_PRIO_IPV6_TCP_PACKETS,
170 - },
164 + .packets =
165 + {
166 + .received = {.key = "Segments Received/sec"},
167 + .sent = {.key = "Segments Sent/sec"},
168 + .type = "ipv6",
169 + .id = "tcppackets",
170 + .family = "tcp6",
171 + .context = "ipv6.tcppackets",
172 + .title = "IPv6 TCP Packets",
173 + .priority = NETDATA_CHART_PRIO_IPV6_TCP_PACKETS,
174 + },
175 },
176 {
177 .protocol = "UDPv4",
174 - .packets = {
175 - .received = { .key = "Datagrams Received/sec" },
176 - .sent = { .key = "Datagrams Sent/sec" },
177 - .type = "ipv4",
178 - .id = "udppackets",
179 - .family = "udp",
180 - .context = "ipv4.udppackets",
181 - .title = "IPv4 UDP Packets",
182 - .priority = NETDATA_CHART_PRIO_IPV4_UDP_PACKETS,
183 - },
178 + .packets =
179 + {
180 + .received = {.key = "Datagrams Received/sec"},
181 + .sent = {.key = "Datagrams Sent/sec"},
182 + .type = "ipv4",
183 + .id = "udppackets",
184 + .family = "udp",
185 + .context = "ipv4.udppackets",
186 + .title = "IPv4 UDP Packets",
187 + .priority = NETDATA_CHART_PRIO_IPV4_UDP_PACKETS,
188 + },
189 },
190 {
191 .protocol = "UDPv6",
187 - .packets = {
188 - .received = { .key = "Datagrams Received/sec" },
189 - .sent = { .key = "Datagrams Sent/sec" },
190 - .type = "ipv6",
191 - .id = "udppackets",
192 - .family = "udp6",
193 - .context = "ipv6.udppackets",
194 - .title = "IPv6 UDP Packets",
195 - .priority = NETDATA_CHART_PRIO_IPV6_UDP_PACKETS,
196 - },
192 + .packets =
193 + {
194 + .received = {.key = "Datagrams Received/sec"},
195 + .sent = {.key = "Datagrams Sent/sec"},
196 + .type = "ipv6",
197 + .id = "udppackets",
198 + .family = "udp6",
199 + .context = "ipv6.udppackets",
200 + .title = "IPv6 UDP Packets",
201 + .priority = NETDATA_CHART_PRIO_IPV6_UDP_PACKETS,
202 + },
203 },
204 {
205 .protocol = "ICMP",
200 - .packets = {
201 - .received = { .key = "Messages Received/sec" },
202 - .sent = { .key = "Messages Sent/sec" },
203 - .type = "ipv4",
204 - .id = "icmp",
205 - .family = "icmp",
206 - .context = "ipv4.icmp",
207 - .title = "IPv4 ICMP Packets",
208 - .priority = NETDATA_CHART_PRIO_IPV4_ICMP_PACKETS,
209 - },
206 + .packets =
207 + {
208 + .received = {.key = "Messages Received/sec"},
209 + .sent = {.key = "Messages Sent/sec"},
210 + .type = "ipv4",
211 + .id = "icmp",
212 + .family = "icmp",
213 + .context = "ipv4.icmp",
214 + .title = "IPv4 ICMP Packets",
215 + .priority = NETDATA_CHART_PRIO_IPV4_ICMP_PACKETS,
216 + },
217 },
218 {
219 .protocol = "ICMPv6",
213 - .packets = {
214 - .received = { .key = "Messages Received/sec" },
215 - .sent = { .key = "Messages Sent/sec" },
216 - .type = "ipv6",
217 - .id = "icmp",
218 - .family = "icmp6",
219 - .context = "ipv6.icmp",
220 - .title = "IPv6 ICMP Packets",
221 - .priority = NETDATA_CHART_PRIO_IPV6_ICMP_PACKETS,
222 - },
220 + .packets =
221 + {
222 + .received = {.key = "Messages Received/sec"},
223 + .sent = {.key = "Messages Sent/sec"},
224 + .type = "ipv6",
225 + .id = "icmp",
226 + .family = "icmp6",
227 + .context = "ipv6.icmp",
228 + .title = "IPv6 ICMP Packets",
229 + .priority = NETDATA_CHART_PRIO_IPV6_ICMP_PACKETS,
230 + },
231 },
232
233 {
234 .protocol = "IPv4",
227 - .packets = {
228 - .InDiscards = { .key = "Datagrams Received Discarded" },
229 - .OutDiscards = { .key = "Datagrams Outbound Discarded" },
230 - .OutNoRoutes = { .key = "Datagrams Outbound No Route" },
231 - .InAddrErrors = { .key = "Datagrams Received Address Errors" },
232 - .InHdrErrors = { .key = "Datagrams Received Header Errors" },
233 - .InUnknownProtos = { .key = "Datagrams Received Unknown Protocol" },
234 - .type = "ipv4",
235 - .id = "errors",
236 - .family = "errors",
237 - .context = "ipv4.errors",
238 - .title = "IPv4 errors",
239 - .priority = NETDATA_CHART_PRIO_IPV4_ERRORS,
240 - },
235 + .packets =
236 + {
237 + .InDiscards = {.key = "Datagrams Received Discarded"},
238 + .OutDiscards = {.key = "Datagrams Outbound Discarded"},
239 + .OutNoRoutes = {.key = "Datagrams Outbound No Route"},
240 + .InAddrErrors = {.key = "Datagrams Received Address Errors"},
241 + .InHdrErrors = {.key = "Datagrams Received Header Errors"},
242 + .InUnknownProtos = {.key = "Datagrams Received Unknown Protocol"},
243 + .type = "ipv4",
244 + .id = "errors",
245 + .family = "errors",
246 + .context = "ipv4.errors",
247 + .title = "IPv4 errors",
248 + .priority = NETDATA_CHART_PRIO_IPV4_ERRORS,
249 + },
250 },
251 {
252 .protocol = "IPv6",
244 - .packets = {
245 - .InDiscards = { .key = "Datagrams Received Discarded" },
246 - .OutDiscards = { .key = "Datagrams Outbound Discarded" },
247 - .OutNoRoutes = { .key = "Datagrams Outbound No Route" },
248 - .InAddrErrors = { .key = "Datagrams Received Address Errors" },
249 - .InHdrErrors = { .key = "Datagrams Received Header Errors" },
250 - .InUnknownProtos = { .key = "Datagrams Received Unknown Protocol" },
251 - .type = "ipv6",
252 - .id = "errors",
253 - .family = "errors",
254 - .context = "ipv6.errors",
255 - .title = "IPv6 errors",
256 - .priority = NETDATA_CHART_PRIO_IPV6_ERRORS,
257 - },
253 + .packets =
254 + {
255 + .InDiscards = {.key = "Datagrams Received Discarded"},
256 + .OutDiscards = {.key = "Datagrams Outbound Discarded"},
257 + .OutNoRoutes = {.key = "Datagrams Outbound No Route"},
258 + .InAddrErrors = {.key = "Datagrams Received Address Errors"},
259 + .InHdrErrors = {.key = "Datagrams Received Header Errors"},
260 + .InUnknownProtos = {.key = "Datagrams Received Unknown Protocol"},
261 + .type = "ipv6",
262 + .id = "errors",
263 + .family = "errors",
264 + .context = "ipv6.errors",
265 + .title = "IPv6 errors",
266 + .priority = NETDATA_CHART_PRIO_IPV6_ERRORS,
267 + },
268 },
269 {
270 .protocol = "ICMP",
@@ -326,8 +336,7 @@ struct network_protocol {
336 // terminator
337 {
338 .protocol = NULL,
329 - }
330 -};
339 + }};
340
341 struct network_protocol tcp46 = {
342 .packets = {
@@ -337,28 +346,27 @@ struct network_protocol tcp46 = {
346 .context = "ip.tcppackets",
347 .title = "TCP Packets",
348 .priority = NETDATA_CHART_PRIO_IP_TCP_PACKETS,
340 - }
341 -};
349 + }};
350
343 -static void protocol_packets_chart_update(struct network_protocol *p, int update_every) {
344 - if(!p->packets.st) {
351 +static void protocol_packets_chart_update(struct network_protocol *p, int update_every)
352 +{
353 + if (!p->packets.st) {
354 p->packets.st = rrdset_create_localhost(
346 - p->packets.type
347 - , p->packets.id
348 - , NULL
349 - , p->packets.family
350 - , NULL
351 - , p->packets.title
352 - , "packets/s"
353 - , PLUGIN_WINDOWS_NAME
354 - , "PerflibNetwork"
355 - , p->packets.priority
356 - , update_every
357 - , RRDSET_TYPE_AREA
358 - );
355 + p->packets.type,
356 + p->packets.id,
357 + NULL,
358 + p->packets.family,
359 + NULL,
360 + p->packets.title,
361 + "packets/s",
362 + PLUGIN_WINDOWS_NAME,
363 + "PerflibNetwork",
364 + p->packets.priority,
365 + update_every,
366 + RRDSET_TYPE_AREA);
367
368 RRDSET *st = p->packets.st;
361 -
369 +
370 ADD_RRD_DIM_IF_KEY(received, "received", NULL, 1, RRD_ALGORITHM_INCREMENTAL);
371 ADD_RRD_DIM_IF_KEY(sent, "sent", NULL, -1, RRD_ALGORITHM_INCREMENTAL);
372 ADD_RRD_DIM_IF_KEY(forwarded, "forwarded", NULL, -1, RRD_ALGORITHM_INCREMENTAL);
@@ -392,7 +400,6 @@ static void protocol_packets_chart_update(struct network_protocol *p, int update
400 ADD_RRD_DIM_IF_KEY(OutTimestamps, "OutType13", "OutTimestamps", -1, RRD_ALGORITHM_INCREMENTAL);
401 ADD_RRD_DIM_IF_KEY(InTimestampReps, "InType14", "InTimestampReps", 1, RRD_ALGORITHM_INCREMENTAL);
402 ADD_RRD_DIM_IF_KEY(OutTimestampReps, "OutType14", "OutTimestampReps", -1, RRD_ALGORITHM_INCREMENTAL);
395 -
403 }
404
405 SET_DIM_IF_KEY_AND_UPDATED(p, received);
@@ -433,11 +440,14 @@ static void protocol_packets_chart_update(struct network_protocol *p, int update
440 rrdset_done(p->packets.st);
441 }
442
436 -static bool do_network_protocol(PERF_DATA_BLOCK *pDataBlock, int update_every, struct network_protocol *p) {
437 - if(!p || !p->protocol) return false;
443 +static bool do_network_protocol(PERF_DATA_BLOCK *pDataBlock, int update_every, struct network_protocol *p)
444 +{
445 + if (!p || !p->protocol)
446 + return false;
447
448 PERF_OBJECT_TYPE *pObjectType = perflibFindObjectTypeByName(pDataBlock, p->protocol);
440 - if(!pObjectType) return false;
449 + if (!pObjectType)
450 + return false;
451
452 size_t packets = 0;
453 ADD_PACKET_IF_KEY(p, packets, pDataBlock, pObjectType, received);
@@ -476,7 +486,7 @@ static bool do_network_protocol(PERF_DATA_BLOCK *pDataBlock, int update_every, s
486 ADD_PACKET_IF_KEY(p, packets, pDataBlock, pObjectType, InTimestampReps);
487 ADD_PACKET_IF_KEY(p, packets, pDataBlock, pObjectType, OutTimestampReps);
488
479 - if(packets)
489 + if (packets)
490 protocol_packets_chart_update(p, update_every);
491
492 return true;
@@ -567,7 +577,8 @@ struct network_interface {
577
578 static DICTIONARY *physical_interfaces = NULL, *virtual_interfaces = NULL;
579
570 -static void network_interface_init(struct network_interface *d) {
580 +static void network_interface_init(struct network_interface *d)
581 +{
582 d->packets.received.key = "Packets Received/sec";
583 d->packets.sent.key = "Packets Sent/sec";
584 d->traffic.received.key = "Bytes Received/sec";
@@ -585,7 +596,8 @@ static void network_interface_init(struct network_interface *d) {
596 d->rsc.average_packet_size.key = "TCP RSC Average Packet Size";
597 }
598
588 -static void network_interface_cleanup(struct network_interface *d) {
599 +static void network_interface_cleanup(struct network_interface *d)
600 +{
601 rrdvar_chart_variable_release(d->traffic.st, d->traffic.chart_var_speed);
602 rrdset_is_obsolete___safe_from_collector_thread(d->packets.st);
603 rrdset_is_obsolete___safe_from_collector_thread(d->traffic.st);
@@ -600,67 +612,74 @@ static void network_interface_cleanup(struct network_interface *d) {
612 rrdset_is_obsolete___safe_from_collector_thread(d->rsc.st_average_packet_size);
613 }
614
603 -void dict_interface_insert_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused) {
615 +void dict_interface_insert_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused)
616 +{
617 struct network_interface *ni = value;
618 network_interface_init(ni);
619 }
620
608 -static void initialize(void) {
609 - physical_interfaces = dictionary_create_advanced(DICT_OPTION_DONT_OVERWRITE_VALUE |
610 - DICT_OPTION_FIXED_SIZE, NULL, sizeof(struct network_interface));
621 +static void initialize(void)
622 +{
623 + physical_interfaces = dictionary_create_advanced(
624 + DICT_OPTION_DONT_OVERWRITE_VALUE | DICT_OPTION_FIXED_SIZE, NULL, sizeof(struct network_interface));
625
612 - virtual_interfaces = dictionary_create_advanced(DICT_OPTION_DONT_OVERWRITE_VALUE |
613 - DICT_OPTION_FIXED_SIZE, NULL, sizeof(struct network_interface));
626 + virtual_interfaces = dictionary_create_advanced(
627 + DICT_OPTION_DONT_OVERWRITE_VALUE | DICT_OPTION_FIXED_SIZE, NULL, sizeof(struct network_interface));
628
629 dictionary_register_insert_callback(physical_interfaces, dict_interface_insert_cb, NULL);
630 dictionary_register_insert_callback(virtual_interfaces, dict_interface_insert_cb, NULL);
631 }
632
619 -static void add_interface_labels(RRDSET *st, const char *name, bool physical) {
633 +static void add_interface_labels(RRDSET *st, const char *name, bool physical)
634 +{
635 rrdlabels_add(st->rrdlabels, "device", name, RRDLABEL_SRC_AUTO);
636 rrdlabels_add(st->rrdlabels, "interface_type", physical ? "real" : "virtual", RRDLABEL_SRC_AUTO);
637 }
638
624 -static bool is_physical_interface(const char *name) {
639 +static bool is_physical_interface(const char *name)
640 +{
641 void *d = dictionary_get(physical_interfaces, name);
642 return d ? true : false;
643 }
644
629 -static bool do_network_interface(PERF_DATA_BLOCK *pDataBlock, int update_every, bool physical, usec_t now_ut) {
645 +static bool do_network_interface(PERF_DATA_BLOCK *pDataBlock, int update_every, bool physical, usec_t now_ut)
646 +{
647 DICTIONARY *dict = physical ? physical_interfaces : virtual_interfaces;
648
632 - PERF_OBJECT_TYPE *pObjectType = perflibFindObjectTypeByName(pDataBlock, physical ? "Network Interface" : "Network Adapter");
633 - if(!pObjectType) return false;
649 + PERF_OBJECT_TYPE *pObjectType =
650 + perflibFindObjectTypeByName(pDataBlock, physical ? "Network Interface" : "Network Adapter");
651 + if (!pObjectType)
652 + return false;
653
654 uint64_t total_received = 0, total_sent = 0;
655
656 PERF_INSTANCE_DEFINITION *pi = NULL;
638 - for(LONG i = 0; i < pObjectType->NumInstances ; i++) {
657 + for (LONG i = 0; i < pObjectType->NumInstances; i++) {
658 pi = perflibForEachInstance(pDataBlock, pObjectType, pi);
640 - if(!pi) break;
659 + if (!pi)
660 + break;
661
642 - if(!getInstanceName(pDataBlock, pObjectType, pi, windows_shared_buffer, sizeof(windows_shared_buffer)))
662 + if (!getInstanceName(pDataBlock, pObjectType, pi, windows_shared_buffer, sizeof(windows_shared_buffer)))
663 strncpyz(windows_shared_buffer, "[unknown]", sizeof(windows_shared_buffer) - 1);
664
645 - if(strcasecmp(windows_shared_buffer, "_Total") == 0)
665 + if (strcasecmp(windows_shared_buffer, "_Total") == 0)
666 continue;
667
648 - if(!physical && is_physical_interface(windows_shared_buffer))
668 + if (!physical && is_physical_interface(windows_shared_buffer))
669 // this virtual interface is already reported as physical interface
670 continue;
671
672 struct network_interface *d = dictionary_set(dict, windows_shared_buffer, NULL, sizeof(*d));
673 d->last_collected = now_ut;
674
655 - if(!d->collected_metadata) {
675 + if (!d->collected_metadata) {
676 // TODO - get metadata about the network interface
677 d->collected_metadata = true;
678 }
679
660 - if(perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->traffic.received) &&
680 + if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->traffic.received) &&
681 perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->traffic.sent)) {
662 -
663 - if(d->traffic.received.current.Data == 0 && d->traffic.sent.current.Data == 0)
682 + if (d->traffic.received.current.Data == 0 && d->traffic.sent.current.Data == 0)
683 // this interface has not received or sent any traffic yet
684 continue;
685
@@ -681,8 +700,10 @@ static bool do_network_interface(PERF_DATA_BLOCK *pDataBlock, int update_every,
700
701 add_interface_labels(d->traffic.st, windows_shared_buffer, physical);
702
684 - d->traffic.rd_received = rrddim_add(d->traffic.st, "received", NULL, 8, BITS_IN_A_KILOBIT, RRD_ALGORITHM_INCREMENTAL);
685 - d->traffic.rd_sent = rrddim_add(d->traffic.st, "sent", NULL, -8, BITS_IN_A_KILOBIT, RRD_ALGORITHM_INCREMENTAL);
703 + d->traffic.rd_received =
704 + rrddim_add(d->traffic.st, "received", NULL, 8, BITS_IN_A_KILOBIT, RRD_ALGORITHM_INCREMENTAL);
705 + d->traffic.rd_sent =
706 + rrddim_add(d->traffic.st, "sent", NULL, -8, BITS_IN_A_KILOBIT, RRD_ALGORITHM_INCREMENTAL);
707
708 d->traffic.chart_var_speed = rrdvar_chart_variable_add_and_acquire(d->traffic.st, "nic_speed_max");
709 rrdvar_chart_variable_set(d->traffic.st, d->traffic.chart_var_speed, NAN);
@@ -691,14 +712,14 @@ static bool do_network_interface(PERF_DATA_BLOCK *pDataBlock, int update_every,
712 total_received += d->traffic.received.current.Data;
713 total_sent += d->traffic.sent.current.Data;
714
694 - rrddim_set_by_pointer(d->traffic.st, d->traffic.rd_received, (collected_number)d->traffic.received.current.Data);
715 + rrddim_set_by_pointer(
716 + d->traffic.st, d->traffic.rd_received, (collected_number)d->traffic.received.current.Data);
717 rrddim_set_by_pointer(d->traffic.st, d->traffic.rd_sent, (collected_number)d->traffic.sent.current.Data);
718 rrdset_done(d->traffic.st);
719 }
720
699 - if(perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->packets.received) &&
721 + if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->packets.received) &&
722 perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->packets.sent)) {
701 -
723 if (unlikely(!d->packets.st)) {
724 d->packets.st = rrdset_create_localhost(
725 "net_packets",
@@ -720,57 +741,58 @@ static bool do_network_interface(PERF_DATA_BLOCK *pDataBlock, int update_every,
741 d->packets.rd_sent = rrddim_add(d->packets.st, "sent", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
742 }
743
723 - rrddim_set_by_pointer(d->packets.st, d->packets.rd_received, (collected_number)d->packets.received.current.Data);
744 + rrddim_set_by_pointer(
745 + d->packets.st, d->packets.rd_received, (collected_number)d->packets.received.current.Data);
746 rrddim_set_by_pointer(d->packets.st, d->packets.rd_sent, (collected_number)d->packets.sent.current.Data);
747 rrdset_done(d->packets.st);
748 }
749
728 - if(perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->speed.current_bandwidth)) {
729 - if(unlikely(!d->speed.st)) {
750 + if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->speed.current_bandwidth)) {
751 + if (unlikely(!d->speed.st)) {
752 d->speed.st = rrdset_create_localhost(
731 - "net_speed"
732 - , windows_shared_buffer
733 - , NULL
734 - , windows_shared_buffer
735 - , "net.speed"
736 - , "Interface Speed"
737 - , "kilobits/s"
738 - , PLUGIN_WINDOWS_NAME
739 - , "PerflibNetwork"
740 - , NETDATA_CHART_PRIO_FIRST_NET_IFACE + 10
741 - , update_every
742 - , RRDSET_TYPE_LINE
743 - );
753 + "net_speed",
754 + windows_shared_buffer,
755 + NULL,
756 + windows_shared_buffer,
757 + "net.speed",
758 + "Interface Speed",
759 + "kilobits/s",
760 + PLUGIN_WINDOWS_NAME,
761 + "PerflibNetwork",
762 + NETDATA_CHART_PRIO_FIRST_NET_IFACE + 10,
763 + update_every,
764 + RRDSET_TYPE_LINE);
765
766 add_interface_labels(d->speed.st, windows_shared_buffer, physical);
767
747 - d->speed.rd = rrddim_add(d->speed.st, "speed", NULL, 1, BITS_IN_A_KILOBIT, RRD_ALGORITHM_ABSOLUTE);
768 + d->speed.rd = rrddim_add(d->speed.st, "speed", NULL, 1, BITS_IN_A_KILOBIT, RRD_ALGORITHM_ABSOLUTE);
769 }
770
771 rrddim_set_by_pointer(d->speed.st, d->speed.rd, (collected_number)d->speed.current_bandwidth.current.Data);
772 rrdset_done(d->speed.st);
773
753 - rrdvar_chart_variable_set(d->traffic.st, d->traffic.chart_var_speed,
754 - (NETDATA_DOUBLE)d->speed.current_bandwidth.current.Data / BITS_IN_A_KILOBIT);
774 + rrdvar_chart_variable_set(
775 + d->traffic.st,
776 + d->traffic.chart_var_speed,
777 + (NETDATA_DOUBLE)d->speed.current_bandwidth.current.Data / BITS_IN_A_KILOBIT);
778 }
779
757 - if(perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->errors.received) &&
758 - perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->errors.outbound)) {
759 -
780 + if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->errors.received) &&
781 + perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->errors.outbound)) {
782 if (unlikely(!d->errors.st)) {
783 d->errors.st = rrdset_create_localhost(
762 - "net_errors",
763 - windows_shared_buffer,
764 - NULL,
765 - windows_shared_buffer,
766 - "net.errors",
767 - "Interface Errors",
768 - "errors/s",
769 - PLUGIN_WINDOWS_NAME,
770 - "PerflibNetwork",
771 - NETDATA_CHART_PRIO_FIRST_NET_IFACE + 3,
772 - update_every,
773 - RRDSET_TYPE_LINE);
784 + "net_errors",
785 + windows_shared_buffer,
786 + NULL,
787 + windows_shared_buffer,
788 + "net.errors",
789 + "Interface Errors",
790 + "errors/s",
791 + PLUGIN_WINDOWS_NAME,
792 + "PerflibNetwork",
793 + NETDATA_CHART_PRIO_FIRST_NET_IFACE + 3,
794 + update_every,
795 + RRDSET_TYPE_LINE);
796
797 add_interface_labels(d->errors.st, windows_shared_buffer, physical);
798
@@ -778,55 +800,59 @@ static bool do_network_interface(PERF_DATA_BLOCK *pDataBlock, int update_every,
800 d->errors.rd_outbound = rrddim_add(d->errors.st, "outbound", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
801 }
802
781 - rrddim_set_by_pointer(d->errors.st, d->errors.rd_received, (collected_number)d->errors.received.current.Data);
782 - rrddim_set_by_pointer(d->errors.st, d->errors.rd_outbound, (collected_number)d->errors.outbound.current.Data);
803 + rrddim_set_by_pointer(
804 + d->errors.st, d->errors.rd_received, (collected_number)d->errors.received.current.Data);
805 + rrddim_set_by_pointer(
806 + d->errors.st, d->errors.rd_outbound, (collected_number)d->errors.outbound.current.Data);
807 rrdset_done(d->errors.st);
808 }
809
786 - if(perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->discards.received) &&
787 - perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->discards.outbound)) {
788 -
810 + if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->discards.received) &&
811 + perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->discards.outbound)) {
812 if (unlikely(!d->discards.st)) {
813 d->discards.st = rrdset_create_localhost(
791 - "net_drops",
792 - windows_shared_buffer,
793 - NULL,
794 - windows_shared_buffer,
795 - "net.drops",
796 - "Interface Drops",
797 - "drops/s",
798 - PLUGIN_WINDOWS_NAME,
799 - "PerflibNetwork",
800 - NETDATA_CHART_PRIO_FIRST_NET_IFACE + 4,
801 - update_every,
802 - RRDSET_TYPE_LINE);
814 + "net_drops",
815 + windows_shared_buffer,
816 + NULL,
817 + windows_shared_buffer,
818 + "net.drops",
819 + "Interface Drops",
820 + "drops/s",
821 + PLUGIN_WINDOWS_NAME,
822 + "PerflibNetwork",
823 + NETDATA_CHART_PRIO_FIRST_NET_IFACE + 4,
824 + update_every,
825 + RRDSET_TYPE_LINE);
826
827 add_interface_labels(d->discards.st, windows_shared_buffer, physical);
828
829 d->discards.rd_received = rrddim_add(d->discards.st, "inbound", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
807 - d->discards.rd_outbound = rrddim_add(d->discards.st, "outbound", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
830 + d->discards.rd_outbound =
831 + rrddim_add(d->discards.st, "outbound", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
832 }
833
810 - rrddim_set_by_pointer(d->discards.st, d->discards.rd_received, (collected_number)d->discards.received.current.Data);
811 - rrddim_set_by_pointer(d->discards.st, d->discards.rd_outbound, (collected_number)d->discards.outbound.current.Data);
834 + rrddim_set_by_pointer(
835 + d->discards.st, d->discards.rd_received, (collected_number)d->discards.received.current.Data);
836 + rrddim_set_by_pointer(
837 + d->discards.st, d->discards.rd_outbound, (collected_number)d->discards.outbound.current.Data);
838 rrdset_done(d->discards.st);
839 }
840
815 - if(perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->queue.length)) {
841 + if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->queue.length)) {
842 if (unlikely(!d->queue.st)) {
843 d->queue.st = rrdset_create_localhost(
818 - "net_queue_length",
819 - windows_shared_buffer,
820 - NULL,
821 - windows_shared_buffer,
822 - "net.queue_length",
823 - "Interface Output Queue Length",
824 - "packets",
825 - PLUGIN_WINDOWS_NAME,
826 - "PerflibNetwork",
827 - NETDATA_CHART_PRIO_FIRST_NET_IFACE + 5,
828 - update_every,
829 - RRDSET_TYPE_LINE);
844 + "net_queue_length",
845 + windows_shared_buffer,
846 + NULL,
847 + windows_shared_buffer,
848 + "net.queue_length",
849 + "Interface Output Queue Length",
850 + "packets",
851 + PLUGIN_WINDOWS_NAME,
852 + "PerflibNetwork",
853 + NETDATA_CHART_PRIO_FIRST_NET_IFACE + 5,
854 + update_every,
855 + RRDSET_TYPE_LINE);
856
857 add_interface_labels(d->queue.st, windows_shared_buffer, physical);
858
@@ -837,46 +863,48 @@ static bool do_network_interface(PERF_DATA_BLOCK *pDataBlock, int update_every,
863 rrdset_done(d->queue.st);
864 }
865
840 - if(perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->rsc.connections)) {
866 + if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->rsc.connections)) {
867 if (unlikely(!d->rsc.st_connections)) {
868 d->rsc.st_connections = rrdset_create_localhost(
843 - "net_rsc_connections",
844 - windows_shared_buffer,
845 - NULL,
846 - windows_shared_buffer,
847 - "net.rsc_connections",
848 - "Active TCP Connections Offloaded by RSC",
849 - "connections",
850 - PLUGIN_WINDOWS_NAME,
851 - "PerflibNetwork",
852 - NETDATA_CHART_PRIO_FIRST_NET_IFACE + 6,
853 - update_every,
854 - RRDSET_TYPE_LINE);
869 + "net_rsc_connections",
870 + windows_shared_buffer,
871 + NULL,
872 + windows_shared_buffer,
873 + "net.rsc_connections",
874 + "Active TCP Connections Offloaded by RSC",
875 + "connections",
876 + PLUGIN_WINDOWS_NAME,
877 + "PerflibNetwork",
878 + NETDATA_CHART_PRIO_FIRST_NET_IFACE + 6,
879 + update_every,
880 + RRDSET_TYPE_LINE);
881
882 add_interface_labels(d->rsc.st_connections, windows_shared_buffer, physical);
883
858 - d->rsc.rd_connections = rrddim_add(d->rsc.st_connections, "connections", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
884 + d->rsc.rd_connections =
885 + rrddim_add(d->rsc.st_connections, "connections", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
886 }
887
861 - rrddim_set_by_pointer(d->rsc.st_connections, d->rsc.rd_connections, (collected_number)d->rsc.connections.current.Data);
888 + rrddim_set_by_pointer(
889 + d->rsc.st_connections, d->rsc.rd_connections, (collected_number)d->rsc.connections.current.Data);
890 rrdset_done(d->rsc.st_connections);
891 }
892
865 - if(perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->rsc.packets)) {
893 + if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->rsc.packets)) {
894 if (unlikely(!d->rsc.st_packets)) {
895 d->rsc.st_packets = rrdset_create_localhost(
868 - "net_rsc_packets",
869 - windows_shared_buffer,
870 - NULL,
871 - windows_shared_buffer,
872 - "net.rsc_packets",
873 - "TCP RSC Coalesced Packets",
874 - "packets/s",
875 - PLUGIN_WINDOWS_NAME,
876 - "PerflibNetwork",
877 - NETDATA_CHART_PRIO_FIRST_NET_IFACE + 7,
878 - update_every,
879 - RRDSET_TYPE_LINE);
896 + "net_rsc_packets",
897 + windows_shared_buffer,
898 + NULL,
899 + windows_shared_buffer,
900 + "net.rsc_packets",
901 + "TCP RSC Coalesced Packets",
902 + "packets/s",
903 + PLUGIN_WINDOWS_NAME,
904 + "PerflibNetwork",
905 + NETDATA_CHART_PRIO_FIRST_NET_IFACE + 7,
906 + update_every,
907 + RRDSET_TYPE_LINE);
908
909 add_interface_labels(d->rsc.st_packets, windows_shared_buffer, physical);
910
@@ -887,71 +915,77 @@ static bool do_network_interface(PERF_DATA_BLOCK *pDataBlock, int update_every,
915 rrdset_done(d->rsc.st_packets);
916 }
917
890 - if(perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->rsc.exceptions)) {
918 + if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->rsc.exceptions)) {
919 if (unlikely(!d->rsc.st_exceptions)) {
920 d->rsc.st_exceptions = rrdset_create_localhost(
893 - "net_rsc_exceptions",
894 - windows_shared_buffer,
895 - NULL,
896 - windows_shared_buffer,
897 - "net.rsc_exceptions",
898 - "TCP RSC Exceptions",
899 - "exceptions/s",
900 - PLUGIN_WINDOWS_NAME,
901 - "PerflibNetwork",
902 - NETDATA_CHART_PRIO_FIRST_NET_IFACE + 8,
903 - update_every,
904 - RRDSET_TYPE_LINE);
921 + "net_rsc_exceptions",
922 + windows_shared_buffer,
923 + NULL,
924 + windows_shared_buffer,
925 + "net.rsc_exceptions",
926 + "TCP RSC Exceptions",
927 + "exceptions/s",
928 + PLUGIN_WINDOWS_NAME,
929 + "PerflibNetwork",
930 + NETDATA_CHART_PRIO_FIRST_NET_IFACE + 8,
931 + update_every,
932 + RRDSET_TYPE_LINE);
933
934 add_interface_labels(d->rsc.st_exceptions, windows_shared_buffer, physical);
935
908 - d->rsc.rd_exceptions = rrddim_add(d->rsc.st_exceptions, "exceptions", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
936 + d->rsc.rd_exceptions =
937 + rrddim_add(d->rsc.st_exceptions, "exceptions", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
938 }
939
911 - rrddim_set_by_pointer(d->rsc.st_exceptions, d->rsc.rd_exceptions, (collected_number)d->rsc.exceptions.current.Data);
940 + rrddim_set_by_pointer(
941 + d->rsc.st_exceptions, d->rsc.rd_exceptions, (collected_number)d->rsc.exceptions.current.Data);
942 rrdset_done(d->rsc.st_exceptions);
943 }
944
915 - if(perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->rsc.average_packet_size)) {
945 + if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->rsc.average_packet_size)) {
946 if (unlikely(!d->rsc.st_average_packet_size)) {
947 d->rsc.st_average_packet_size = rrdset_create_localhost(
918 - "net_rsc_average_packet_size",
919 - windows_shared_buffer,
920 - NULL,
921 - windows_shared_buffer,
922 - "net.rsc_average_packet_size",
923 - "TCP RSC Average Packet Size",
924 - "bytes",
925 - PLUGIN_WINDOWS_NAME,
926 - "PerflibNetwork",
927 - NETDATA_CHART_PRIO_FIRST_NET_IFACE + 9,
928 - update_every,
929 - RRDSET_TYPE_LINE);
948 + "net_rsc_average_packet_size",
949 + windows_shared_buffer,
950 + NULL,
951 + windows_shared_buffer,
952 + "net.rsc_average_packet_size",
953 + "TCP RSC Average Packet Size",
954 + "bytes",
955 + PLUGIN_WINDOWS_NAME,
956 + "PerflibNetwork",
957 + NETDATA_CHART_PRIO_FIRST_NET_IFACE + 9,
958 + update_every,
959 + RRDSET_TYPE_LINE);
960
961 add_interface_labels(d->rsc.st_average_packet_size, windows_shared_buffer, physical);
962
933 - d->rsc.rd_average_packet_size = rrddim_add(d->rsc.st_average_packet_size, "average", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
963 + d->rsc.rd_average_packet_size =
964 + rrddim_add(d->rsc.st_average_packet_size, "average", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
965 }
966
936 - rrddim_set_by_pointer(d->rsc.st_average_packet_size, d->rsc.rd_average_packet_size, (collected_number)d->rsc.average_packet_size.current.Data);
967 + rrddim_set_by_pointer(
968 + d->rsc.st_average_packet_size,
969 + d->rsc.rd_average_packet_size,
970 + (collected_number)d->rsc.average_packet_size.current.Data);
971 rrdset_done(d->rsc.st_average_packet_size);
972 }
973
940 - if(perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->chimney.connections)) {
974 + if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->chimney.connections)) {
975 if (unlikely(!d->chimney.st)) {
976 d->chimney.st = rrdset_create_localhost(
943 - "net_chimney_connections",
944 - windows_shared_buffer,
945 - NULL,
946 - windows_shared_buffer,
947 - "net.chimney_connections",
948 - "Active TCP Connections Offloaded with Chimney",
949 - "connections",
950 - PLUGIN_WINDOWS_NAME,
951 - "PerflibNetwork",
952 - NETDATA_CHART_PRIO_FIRST_NET_IFACE + 10,
953 - update_every,
954 - RRDSET_TYPE_LINE);
977 + "net_chimney_connections",
978 + windows_shared_buffer,
979 + NULL,
980 + windows_shared_buffer,
981 + "net.chimney_connections",
982 + "Active TCP Connections Offloaded with Chimney",
983 + "connections",
984 + PLUGIN_WINDOWS_NAME,
985 + "PerflibNetwork",
986 + NETDATA_CHART_PRIO_FIRST_NET_IFACE + 10,
987 + update_every,
988 + RRDSET_TYPE_LINE);
989
990 add_interface_labels(d->chimney.st, windows_shared_buffer, physical);
991
@@ -963,7 +997,7 @@ static bool do_network_interface(PERF_DATA_BLOCK *pDataBlock, int update_every,
997 }
998 }
999
966 - if(physical) {
1000 + if (physical) {
1001 static RRDSET *st = NULL;
1002 static RRDDIM *rd_received = NULL, *rd_sent = NULL;
1003
@@ -994,8 +1028,9 @@ static bool do_network_interface(PERF_DATA_BLOCK *pDataBlock, int update_every,
1028 // cleanup
1029 {
1030 struct network_interface *d;
997 - dfe_start_write(dict, d) {
998 - if(d->last_collected < now_ut) {
1031 + dfe_start_write(dict, d)
1032 + {
1033 + if (d->last_collected < now_ut) {
1034 network_interface_cleanup(d);
1035 dictionary_del(dict, d_dfe.name);
1036 }
@@ -1007,36 +1042,38 @@ static bool do_network_interface(PERF_DATA_BLOCK *pDataBlock, int update_every,
1042 return true;
1043 }
1044
1010 -int do_PerflibNetwork(int update_every, usec_t dt __maybe_unused) {
1045 +int do_PerflibNetwork(int update_every, usec_t dt __maybe_unused)
1046 +{
1047 static bool initialized = false;
1048
1013 - if(unlikely(!initialized)) {
1049 + if (unlikely(!initialized)) {
1050 initialize();
1051 initialized = true;
1052 }
1053
1054 DWORD id = RegistryFindIDByName("Network Interface");
1019 - if(id == PERFLIB_REGISTRY_NAME_NOT_FOUND)
1055 + if (id == PERFLIB_REGISTRY_NAME_NOT_FOUND)
1056 return -1;
1057
1058 PERF_DATA_BLOCK *pDataBlock = perflibGetPerformanceData(id);
1023 - if(!pDataBlock) return -1;
1059 + if (!pDataBlock)
1060 + return -1;
1061
1062 usec_t now_ut = now_monotonic_usec();
1063 do_network_interface(pDataBlock, update_every, true, now_ut);
1064 do_network_interface(pDataBlock, update_every, false, now_ut);
1065
1066 struct network_protocol *tcp4 = NULL, *tcp6 = NULL;
1030 - for(size_t i = 0; networks[i].protocol ;i++) {
1067 + for (size_t i = 0; networks[i].protocol; i++) {
1068 do_network_protocol(pDataBlock, update_every, &networks[i]);
1069
1033 - if(!tcp4 && strcmp(networks[i].protocol, "TCPv4") == 0)
1070 + if (!tcp4 && strcmp(networks[i].protocol, "TCPv4") == 0)
1071 tcp4 = &networks[i];
1035 - if(!tcp6 && strcmp(networks[i].protocol, "TCPv6") == 0)
1072 + if (!tcp6 && strcmp(networks[i].protocol, "TCPv6") == 0)
1073 tcp6 = &networks[i];
1074 }
1075
1039 - if(tcp4 && tcp6) {
1076 + if (tcp4 && tcp6) {
1077 tcp46.packets.received = tcp4->packets.received;
1078 tcp46.packets.sent = tcp4->packets.sent;
1079 tcp46.packets.received.current.Data += tcp6->packets.received.current.Data;
src/collectors/windows.plugin/perflib-objects.c
+12 -8
@@ -7,18 +7,20 @@
7 #define _COMMON_PLUGIN_MODULE_NAME "PerflibObjects"
8 #include "../common-contexts/common-contexts.h"
9
10 -static void initialize(void) {
10 +static void initialize(void)
11 +{
12 ;
13 }
14
14 -static bool do_objects(PERF_DATA_BLOCK *pDataBlock, int update_every) {
15 +static bool do_objects(PERF_DATA_BLOCK *pDataBlock, int update_every)
16 +{
17 PERF_OBJECT_TYPE *pObjectType = perflibFindObjectTypeByName(pDataBlock, "Objects");
18 if (!pObjectType)
19 return false;
20
19 - static COUNTER_DATA semaphores = { .key = "Semaphores" };
21 + static COUNTER_DATA semaphores = {.key = "Semaphores"};
22
21 - if(perflibGetObjectCounter(pDataBlock, pObjectType, &semaphores)) {
23 + if (perflibGetObjectCounter(pDataBlock, pObjectType, &semaphores)) {
24 ULONGLONG sem = semaphores.current.Data;
25 common_semaphore_ipc(sem, WINDOWS_MAX_KERNEL_OBJECT, _COMMON_PLUGIN_MODULE_NAME, update_every);
26 }
@@ -26,20 +28,22 @@ static bool do_objects(PERF_DATA_BLOCK *pDataBlock, int update_every) {
28 return true;
29 }
30
29 -int do_PerflibObjects(int update_every, usec_t dt __maybe_unused) {
31 +int do_PerflibObjects(int update_every, usec_t dt __maybe_unused)
32 +{
33 static bool initialized = false;
34
32 - if(unlikely(!initialized)) {
35 + if (unlikely(!initialized)) {
36 initialize();
37 initialized = true;
38 }
39
40 DWORD id = RegistryFindIDByName("Objects");
38 - if(id == PERFLIB_REGISTRY_NAME_NOT_FOUND)
41 + if (id == PERFLIB_REGISTRY_NAME_NOT_FOUND)
42 return -1;
43
44 PERF_DATA_BLOCK *pDataBlock = perflibGetPerformanceData(id);
42 - if(!pDataBlock) return -1;
45 + if (!pDataBlock)
46 + return -1;
47
48 do_objects(pDataBlock, update_every);
49
src/collectors/windows.plugin/perflib-processes.c
+17 -13
@@ -7,50 +7,54 @@
7 #define _COMMON_PLUGIN_MODULE_NAME "PerflibProcesses"
8 #include "../common-contexts/common-contexts.h"
9
10 -static void initialize(void) {
10 +static void initialize(void)
11 +{
12 ;
13 }
14
14 -static bool do_processes(PERF_DATA_BLOCK *pDataBlock, int update_every) {
15 +static bool do_processes(PERF_DATA_BLOCK *pDataBlock, int update_every)
16 +{
17 PERF_OBJECT_TYPE *pObjectType = perflibFindObjectTypeByName(pDataBlock, "System");
18 if (!pObjectType)
19 return false;
20
19 - static COUNTER_DATA processesRunning = { .key = "Processes" };
20 - static COUNTER_DATA contextSwitchPerSec = { .key = "Context Switches/sec" };
21 - static COUNTER_DATA threads = { .key = "Threads" };
21 + static COUNTER_DATA processesRunning = {.key = "Processes"};
22 + static COUNTER_DATA contextSwitchPerSec = {.key = "Context Switches/sec"};
23 + static COUNTER_DATA threads = {.key = "Threads"};
24
23 - if(perflibGetObjectCounter(pDataBlock, pObjectType, &processesRunning)) {
25 + if (perflibGetObjectCounter(pDataBlock, pObjectType, &processesRunning)) {
26 ULONGLONG running = processesRunning.current.Data;
27 common_system_processes(running, update_every);
28 }
29
28 - if(perflibGetObjectCounter(pDataBlock, pObjectType, &contextSwitchPerSec)) {
30 + if (perflibGetObjectCounter(pDataBlock, pObjectType, &contextSwitchPerSec)) {
31 ULONGLONG contexts = contextSwitchPerSec.current.Data;
32 common_system_context_switch(contexts, update_every);
33 }
34
33 - if(perflibGetObjectCounter(pDataBlock, pObjectType, &threads)) {
35 + if (perflibGetObjectCounter(pDataBlock, pObjectType, &threads)) {
36 ULONGLONG totalThreads = threads.current.Data;
35 - common_system_threads(totalThreads, update_every);
37 + common_system_threads(totalThreads, update_every);
38 }
39 return true;
40 }
41
40 -int do_PerflibProcesses(int update_every, usec_t dt __maybe_unused) {
42 +int do_PerflibProcesses(int update_every, usec_t dt __maybe_unused)
43 +{
44 static bool initialized = false;
45
43 - if(unlikely(!initialized)) {
46 + if (unlikely(!initialized)) {
47 initialize();
48 initialized = true;
49 }
50
51 DWORD id = RegistryFindIDByName("System");
49 - if(id == PERFLIB_REGISTRY_NAME_NOT_FOUND)
52 + if (id == PERFLIB_REGISTRY_NAME_NOT_FOUND)
53 return -1;
54
55 PERF_DATA_BLOCK *pDataBlock = perflibGetPerformanceData(id);
53 - if(!pDataBlock) return -1;
56 + if (!pDataBlock)
57 + return -1;
58
59 do_processes(pDataBlock, update_every);
60
src/collectors/windows.plugin/perflib-processor.c
+75 -68
@@ -17,8 +17,8 @@ struct processor {
17 RRDDIM *rd_dpc;
18 RRDDIM *rd_idle;
19
20 -// RRDSET *st2;
21 -// RRDDIM *rd2_busy;
20 + // RRDSET *st2;
21 + // RRDDIM *rd2_busy;
22
23 COUNTER_DATA percentProcessorTime;
24 COUNTER_DATA percentUserTime;
@@ -30,9 +30,10 @@ struct processor {
30 COUNTER_DATA interruptsPerSec;
31 };
32
33 -struct processor total = { 0 };
33 +struct processor total = {0};
34
35 -void initialize_processor_keys(struct processor *p) {
35 +void initialize_processor_keys(struct processor *p)
36 +{
37 p->percentProcessorTime.key = "% Processor Time";
38 p->percentUserTime.key = "% User Time";
39 p->percentPrivilegedTime.key = "% Privileged Time";
@@ -42,57 +43,61 @@ void initialize_processor_keys(struct processor *p) {
43 p->interruptsPerSec.key = "Interrupts/sec";
44 }
45
45 -void dict_processor_insert_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused) {
46 +void dict_processor_insert_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused)
47 +{
48 struct processor *p = value;
49 initialize_processor_keys(p);
50 }
51
52 static DICTIONARY *processors = NULL;
53
52 -static void initialize(void) {
54 +static void initialize(void)
55 +{
56 initialize_processor_keys(&total);
57
55 - processors = dictionary_create_advanced(DICT_OPTION_DONT_OVERWRITE_VALUE |
56 - DICT_OPTION_FIXED_SIZE, NULL, sizeof(struct processor));
58 + processors = dictionary_create_advanced(
59 + DICT_OPTION_DONT_OVERWRITE_VALUE | DICT_OPTION_FIXED_SIZE, NULL, sizeof(struct processor));
60
61 dictionary_register_insert_callback(processors, dict_processor_insert_cb, NULL);
62 }
63
61 -static bool do_processors(PERF_DATA_BLOCK *pDataBlock, int update_every) {
64 +static bool do_processors(PERF_DATA_BLOCK *pDataBlock, int update_every)
65 +{
66 PERF_OBJECT_TYPE *pObjectType = perflibFindObjectTypeByName(pDataBlock, "Processor");
63 - if(!pObjectType) return false;
67 + if (!pObjectType)
68 + return false;
69
70 static const RRDVAR_ACQUIRED *cpus_var = NULL;
71 int cores_found = 0;
72 uint64_t totalIPC = 0;
73
74 PERF_INSTANCE_DEFINITION *pi = NULL;
70 - for(LONG i = 0; i < pObjectType->NumInstances ; i++) {
75 + for (LONG i = 0; i < pObjectType->NumInstances; i++) {
76 pi = perflibForEachInstance(pDataBlock, pObjectType, pi);
72 - if(!pi) break;
77 + if (!pi)
78 + break;
79
74 - if(!getInstanceName(pDataBlock, pObjectType, pi, windows_shared_buffer, sizeof(windows_shared_buffer)))
80 + if (!getInstanceName(pDataBlock, pObjectType, pi, windows_shared_buffer, sizeof(windows_shared_buffer)))
81 strncpyz(windows_shared_buffer, "[unknown]", sizeof(windows_shared_buffer) - 1);
82
83 bool is_total = false;
84 struct processor *p;
85 int cpu = -1;
80 - if(strcasecmp(windows_shared_buffer, "_Total") == 0) {
86 + if (strcasecmp(windows_shared_buffer, "_Total") == 0) {
87 p = &total;
88 is_total = true;
89 cpu = -1;
84 - }
85 - else {
90 + } else {
91 p = dictionary_set(processors, windows_shared_buffer, NULL, sizeof(*p));
92 is_total = false;
93 cpu = str2i(windows_shared_buffer);
94 snprintfz(windows_shared_buffer, sizeof(windows_shared_buffer), "cpu%d", cpu);
95
91 - if(cpu + 1 > cores_found)
96 + if (cpu + 1 > cores_found)
97 cores_found = cpu + 1;
98 }
99
95 - if(!is_total && !p->collected_metadata) {
100 + if (!is_total && !p->collected_metadata) {
101 // TODO collect processor metadata
102 p->collected_metadata = true;
103 }
@@ -106,29 +111,29 @@ static bool do_processors(PERF_DATA_BLOCK *pDataBlock, int update_every) {
111
112 perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &p->interruptsPerSec);
113
109 - if(!p->st) {
114 + if (!p->st) {
115 p->st = rrdset_create_localhost(
111 - is_total ? "system" : "cpu"
112 - , is_total ? "cpu" : windows_shared_buffer, NULL
113 - , is_total ? "cpu" : "utilization"
114 - , is_total ? "system.cpu" : "cpu.cpu"
115 - , is_total ? "Total CPU Utilization" : "Core Utilization"
116 - , "percentage"
117 - , PLUGIN_WINDOWS_NAME
118 - , "PerflibProcessor"
119 - , is_total ? NETDATA_CHART_PRIO_SYSTEM_CPU : NETDATA_CHART_PRIO_CPU_PER_CORE
120 - , update_every
121 - , RRDSET_TYPE_STACKED
122 - );
123 -
124 - p->rd_irq = rrddim_add(p->st, "interrupts", "irq", 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
125 - p->rd_user = rrddim_add(p->st, "user", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
126 - p->rd_system = rrddim_add(p->st, "privileged", "system", 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
127 - p->rd_dpc = rrddim_add(p->st, "dpc", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
128 - p->rd_idle = rrddim_add(p->st, "idle", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
116 + is_total ? "system" : "cpu",
117 + is_total ? "cpu" : windows_shared_buffer,
118 + NULL,
119 + is_total ? "cpu" : "utilization",
120 + is_total ? "system.cpu" : "cpu.cpu",
121 + is_total ? "Total CPU Utilization" : "Core Utilization",
122 + "percentage",
123 + PLUGIN_WINDOWS_NAME,
124 + "PerflibProcessor",
125 + is_total ? NETDATA_CHART_PRIO_SYSTEM_CPU : NETDATA_CHART_PRIO_CPU_PER_CORE,
126 + update_every,
127 + RRDSET_TYPE_STACKED);
128 +
129 + p->rd_irq = rrddim_add(p->st, "interrupts", "irq", 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
130 + p->rd_user = rrddim_add(p->st, "user", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
131 + p->rd_system = rrddim_add(p->st, "privileged", "system", 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
132 + p->rd_dpc = rrddim_add(p->st, "dpc", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
133 + p->rd_idle = rrddim_add(p->st, "idle", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
134 rrddim_hide(p->st, "idle");
135
131 - if(!is_total)
136 + if (!is_total)
137 rrdlabels_add(p->st->rrdlabels, "cpu", windows_shared_buffer, RRDLABEL_SRC_AUTO);
138 else
139 cpus_var = rrdvar_host_variable_add_and_acquire(localhost, "active_processors");
@@ -149,34 +154,34 @@ static bool do_processors(PERF_DATA_BLOCK *pDataBlock, int update_every) {
154 rrddim_set_by_pointer(p->st, p->rd_idle, (collected_number)idle);
155 rrdset_done(p->st);
156
152 -// if(!p->st2) {
153 -// p->st2 = rrdset_create_localhost(
154 -// is_total ? "system" : "cpu2"
155 -// , is_total ? "cpu3" : buffer
156 -// , NULL
157 -// , is_total ? "utilization" : buffer
158 -// , is_total ? "system.cpu3" : "cpu2.cpu"
159 -// , is_total ? "Total CPU Utilization" : "Core Utilization"
160 -// , "percentage"
161 -// , PLUGIN_WINDOWS_NAME
162 -// , "PerflibProcessor"
163 -// , is_total ? NETDATA_CHART_PRIO_SYSTEM_CPU : NETDATA_CHART_PRIO_CPU_PER_CORE
164 -// , update_every
165 -// , RRDSET_TYPE_STACKED
166 -// );
167 -//
168 -// p->rd2_busy = perflib_rrddim_add(p->st2, "busy", NULL, 1, 1, &p->percentProcessorTime);
169 -// rrddim_hide(p->st2, "idle");
170 -//
171 -// if(!is_total)
172 -// rrdlabels_add(p->st->rrdlabels, "cpu", buffer, RRDLABEL_SRC_AUTO);
173 -// }
174 -//
175 -// perflib_rrddim_set_by_pointer(p->st2, p->rd2_busy, &p->percentProcessorTime);
176 -// rrdset_done(p->st2);
157 + // if(!p->st2) {
158 + // p->st2 = rrdset_create_localhost(
159 + // is_total ? "system" : "cpu2"
160 + // , is_total ? "cpu3" : buffer
161 + // , NULL
162 + // , is_total ? "utilization" : buffer
163 + // , is_total ? "system.cpu3" : "cpu2.cpu"
164 + // , is_total ? "Total CPU Utilization" : "Core Utilization"
165 + // , "percentage"
166 + // , PLUGIN_WINDOWS_NAME
167 + // , "PerflibProcessor"
168 + // , is_total ? NETDATA_CHART_PRIO_SYSTEM_CPU : NETDATA_CHART_PRIO_CPU_PER_CORE
169 + // , update_every
170 + // , RRDSET_TYPE_STACKED
171 + // );
172 + //
173 + // p->rd2_busy = perflib_rrddim_add(p->st2, "busy", NULL, 1, 1, &p->percentProcessorTime);
174 + // rrddim_hide(p->st2, "idle");
175 + //
176 + // if(!is_total)
177 + // rrdlabels_add(p->st->rrdlabels, "cpu", buffer, RRDLABEL_SRC_AUTO);
178 + // }
179 + //
180 + // perflib_rrddim_set_by_pointer(p->st2, p->rd2_busy, &p->percentProcessorTime);
181 + // rrdset_done(p->st2);
182 }
183
179 - if(cpus_var)
184 + if (cpus_var)
185 rrdvar_host_variable_set(localhost, cpus_var, cores_found);
186
187 common_interrupts(totalIPC, update_every, NULL);
@@ -184,20 +189,22 @@ static bool do_processors(PERF_DATA_BLOCK *pDataBlock, int update_every) {
189 return true;
190 }
191
187 -int do_PerflibProcessor(int update_every, usec_t dt __maybe_unused) {
192 +int do_PerflibProcessor(int update_every, usec_t dt __maybe_unused)
193 +{
194 static bool initialized = false;
195
190 - if(unlikely(!initialized)) {
196 + if (unlikely(!initialized)) {
197 initialize();
198 initialized = true;
199 }
200
201 DWORD id = RegistryFindIDByName("Processor");
196 - if(id == PERFLIB_REGISTRY_NAME_NOT_FOUND)
202 + if (id == PERFLIB_REGISTRY_NAME_NOT_FOUND)
203 return -1;
204
205 PERF_DATA_BLOCK *pDataBlock = perflibGetPerformanceData(id);
200 - if(!pDataBlock) return -1;
206 + if (!pDataBlock)
207 + return -1;
208
209 do_processors(pDataBlock, update_every);
210
src/collectors/windows.plugin/perflib-rrd.c
+26 -12
@@ -4,7 +4,14 @@
4
5 #define COLLECTED_NUMBER_PRECISION 10000
6
7 -RRDDIM *perflib_rrddim_add(RRDSET *st, const char *id, const char *name, collected_number multiplier, collected_number divider, COUNTER_DATA *cd) {
7 +RRDDIM *perflib_rrddim_add(
8 + RRDSET *st,
9 + const char *id,
10 + const char *name,
11 + collected_number multiplier,
12 + collected_number divider,
13 + COUNTER_DATA *cd)
14 +{
15 RRD_ALGORITHM algorithm = RRD_ALGORITHM_ABSOLUTE;
16
17 switch (cd->current.CounterType) {
@@ -22,7 +29,7 @@ RRDDIM *perflib_rrddim_add(RRDSET *st, const char *id, const char *name, collect
29 case PERF_COUNTER_100NS_QUEUELEN_TYPE:
30 case PERF_COUNTER_OBJ_TIME_QUEUELEN_TYPE:
31 case PERF_COUNTER_LARGE_QUEUELEN_TYPE:
25 - case PERF_AVERAGE_BULK: // normally not displayed
32 + case PERF_AVERAGE_BULK: // normally not displayed
33 // (N1 - N0) / (D1 - D0)
34 algorithm = RRD_ALGORITHM_INCREMENTAL;
35 break;
@@ -115,16 +122,17 @@ RRDDIM *perflib_rrddim_add(RRDSET *st, const char *id, const char *name, collect
122 return rrddim_add(st, id, name, multiplier, divider, algorithm);
123 }
124
118 -#define VALID_DELTA(cd) \
125 +#define VALID_DELTA(cd) \
126 ((cd)->previous.Time > 0 && (cd)->current.Data >= (cd)->previous.Data && (cd)->current.Time > (cd)->previous.Time)
127
121 -collected_number perflib_rrddim_set_by_pointer(RRDSET *st, RRDDIM *rd, COUNTER_DATA *cd) {
128 +collected_number perflib_rrddim_set_by_pointer(RRDSET *st, RRDDIM *rd, COUNTER_DATA *cd)
129 +{
130 ULONGLONG numerator = 0;
131 LONGLONG denominator = 0;
132 double doubleValue = 0.0;
133 collected_number value;
134
127 - switch(cd->current.CounterType) {
135 + switch (cd->current.CounterType) {
136 case PERF_COUNTER_COUNTER:
137 case PERF_SAMPLE_COUNTER:
138 case PERF_COUNTER_BULK_COUNT:
@@ -136,7 +144,7 @@ collected_number perflib_rrddim_set_by_pointer(RRDSET *st, RRDDIM *rd, COUNTER_D
144 case PERF_COUNTER_100NS_QUEUELEN_TYPE:
145 case PERF_COUNTER_OBJ_TIME_QUEUELEN_TYPE:
146 case PERF_COUNTER_LARGE_QUEUELEN_TYPE:
139 - case PERF_AVERAGE_BULK: // normally not displayed
147 + case PERF_AVERAGE_BULK: // normally not displayed
148 // (N1 - N0) / (D1 - D0)
149 value = (collected_number)cd->current.Data;
150 break;
@@ -155,7 +163,8 @@ collected_number perflib_rrddim_set_by_pointer(RRDSET *st, RRDDIM *rd, COUNTER_D
163 case PERF_COUNTER_TIMER_INV:
164 case PERF_100NSEC_TIMER_INV:
165 // 100 * (1 - ((N1 - N0) / (D1 - D0)))
158 - if(!VALID_DELTA(cd)) return 0;
166 + if (!VALID_DELTA(cd))
167 + return 0;
168 numerator = cd->current.Data - cd->previous.Data;
169 denominator = cd->current.Time - cd->previous.Time;
170 doubleValue = 100.0 * (1.0 - ((double)numerator / (double)denominator));
@@ -165,7 +174,8 @@ collected_number perflib_rrddim_set_by_pointer(RRDSET *st, RRDDIM *rd, COUNTER_D
174
175 case PERF_COUNTER_MULTI_TIMER:
176 // 100 * ((N1 - N0) / ((D1 - D0) / TB)) / B1
168 - if(!VALID_DELTA(cd)) return 0;
177 + if (!VALID_DELTA(cd))
178 + return 0;
179 numerator = cd->current.Data - cd->previous.Data;
180 denominator = cd->current.Time - cd->previous.Time;
181 denominator /= cd->current.Frequency;
@@ -176,7 +186,8 @@ collected_number perflib_rrddim_set_by_pointer(RRDSET *st, RRDDIM *rd, COUNTER_D
186
187 case PERF_100NSEC_MULTI_TIMER:
188 // 100 * ((N1 - N0) / (D1 - D0)) / B1
179 - if(!VALID_DELTA(cd)) return 0;
189 + if (!VALID_DELTA(cd))
190 + return 0;
191 numerator = cd->current.Data - cd->previous.Data;
192 denominator = cd->current.Time - cd->previous.Time;
193 doubleValue = 100.0 * ((double)numerator / (double)denominator) / (double)cd->current.MultiCounterData;
@@ -187,7 +198,8 @@ collected_number perflib_rrddim_set_by_pointer(RRDSET *st, RRDDIM *rd, COUNTER_D
198 case PERF_COUNTER_MULTI_TIMER_INV:
199 case PERF_100NSEC_MULTI_TIMER_INV:
200 // 100 * (B1 - ((N1 - N0) / (D1 - D0)))
190 - if(!VALID_DELTA(cd)) return 0;
201 + if (!VALID_DELTA(cd))
202 + return 0;
203 numerator = cd->current.Data - cd->previous.Data;
204 denominator = cd->current.Time - cd->previous.Time;
205 doubleValue = 100.0 * ((double)cd->current.MultiCounterData - ((double)numerator / (double)denominator));
@@ -209,14 +221,16 @@ collected_number perflib_rrddim_set_by_pointer(RRDSET *st, RRDDIM *rd, COUNTER_D
221
222 case PERF_COUNTER_DELTA:
223 case PERF_COUNTER_LARGE_DELTA:
212 - if(!VALID_DELTA(cd)) return 0;
224 + if (!VALID_DELTA(cd))
225 + return 0;
226 value = (collected_number)(cd->current.Data - cd->previous.Data);
227 break;
228
229 case PERF_RAW_FRACTION:
230 case PERF_LARGE_RAW_FRACTION:
231 // 100 * N / B
219 - if(!cd->current.Time) return 0;
232 + if (!cd->current.Time)
233 + return 0;
234 doubleValue = 100.0 * (double)cd->current.Data / (double)cd->current.Time;
235 // printf("Display value is (fraction): %f%%\n", doubleValue);
236 value = (collected_number)(doubleValue * COLLECTED_NUMBER_PRECISION);
src/collectors/windows.plugin/perflib-rrd.h
+7 -1
@@ -5,7 +5,13 @@
5
6 #include "database/rrd.h"
7
8 -RRDDIM *perflib_rrddim_add(RRDSET *st, const char *id, const char *name, collected_number multiplier, collected_number divider, COUNTER_DATA *cd);
8 +RRDDIM *perflib_rrddim_add(
9 + RRDSET *st,
10 + const char *id,
11 + const char *name,
12 + collected_number multiplier,
13 + collected_number divider,
14 + COUNTER_DATA *cd);
15 collected_number perflib_rrddim_set_by_pointer(RRDSET *st, RRDDIM *rd, COUNTER_DATA *cd);
16
17 #endif //NETDATA_PERFLIB_RRD_H
src/collectors/windows.plugin/perflib-storage.c
+219 -181
@@ -85,18 +85,22 @@ struct physical_disk system_physical_total = {
85 .collected_metadata = true,
86 };
87
88 -static void dict_logical_disk_insert_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused) {
88 +static void
89 +dict_logical_disk_insert_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused)
90 +{
91 struct logical_disk *d = value;
92
93 d->percentDiskFree.key = "% Free Space";
94 // d->freeMegabytes.key = "Free Megabytes";
95 }
96
95 -static void logical_disk_cleanup(struct logical_disk *d) {
97 +static void logical_disk_cleanup(struct logical_disk *d)
98 +{
99 rrdset_is_obsolete___safe_from_collector_thread(d->st_disk_space);
100 }
101
99 -static void physical_disk_initialize(struct physical_disk *d) {
102 +static void physical_disk_initialize(struct physical_disk *d)
103 +{
104 d->percentIdleTime.key = "% Idle Time";
105 d->percentDiskTime.key = "% Disk Time";
106 d->percentDiskReadTime.key = "% Disk Read Time";
@@ -120,7 +124,8 @@ static void physical_disk_initialize(struct physical_disk *d) {
124 d->splitIoPerSec.key = "Split IO/Sec";
125 }
126
123 -static void physical_disk_cleanup(struct physical_disk *d) {
127 +static void physical_disk_cleanup(struct physical_disk *d)
128 +{
129 string_freez(d->device);
130 string_freez(d->mount_point);
131 string_freez(d->manufacturer);
@@ -141,31 +146,35 @@ static void physical_disk_cleanup(struct physical_disk *d) {
146 rrdset_is_obsolete___safe_from_collector_thread(d->st_split);
147 }
148
144 -void dict_physical_disk_insert_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused) {
149 +void dict_physical_disk_insert_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused)
150 +{
151 struct physical_disk *pd = value;
152 physical_disk_initialize(pd);
153 }
154
155 static DICTIONARY *logicalDisks = NULL, *physicalDisks = NULL;
150 -static void initialize(void) {
156 +static void initialize(void)
157 +{
158 physical_disk_initialize(&system_physical_total);
159
153 - logicalDisks = dictionary_create_advanced(DICT_OPTION_DONT_OVERWRITE_VALUE |
154 - DICT_OPTION_FIXED_SIZE, NULL, sizeof(struct logical_disk));
160 + logicalDisks = dictionary_create_advanced(
161 + DICT_OPTION_DONT_OVERWRITE_VALUE | DICT_OPTION_FIXED_SIZE, NULL, sizeof(struct logical_disk));
162
163 dictionary_register_insert_callback(logicalDisks, dict_logical_disk_insert_cb, NULL);
164
158 - physicalDisks = dictionary_create_advanced(DICT_OPTION_DONT_OVERWRITE_VALUE |
159 - DICT_OPTION_FIXED_SIZE, NULL, sizeof(struct physical_disk));
165 + physicalDisks = dictionary_create_advanced(
166 + DICT_OPTION_DONT_OVERWRITE_VALUE | DICT_OPTION_FIXED_SIZE, NULL, sizeof(struct physical_disk));
167
168 dictionary_register_insert_callback(physicalDisks, dict_physical_disk_insert_cb, NULL);
169 }
170
164 -static STRING *getFileSystemType(struct logical_disk *d, const char* diskName) {
165 - if (!diskName || !*diskName) return NULL;
171 +static STRING *getFileSystemType(struct logical_disk *d, const char *diskName)
172 +{
173 + if (!diskName || !*diskName)
174 + return NULL;
175
167 - char fileSystemNameBuffer[128] = {0}; // Buffer for file system name
168 - char pathBuffer[256] = {0}; // Path buffer to accommodate different formats
176 + char fileSystemNameBuffer[128] = {0}; // Buffer for file system name
177 + char pathBuffer[256] = {0}; // Path buffer to accommodate different formats
178 DWORD serialNumber = 0;
179 DWORD maxComponentLength = 0;
180 DWORD fileSystemFlags = 0;
@@ -173,75 +182,86 @@ static STRING *getFileSystemType(struct logical_disk *d, const char* diskName) {
182
183 // Check if the input is likely a drive letter (e.g., "C:")
184 if (isalpha((uint8_t)diskName[0]) && diskName[1] == ':' && diskName[2] == '\0')
176 - snprintf(pathBuffer, sizeof(pathBuffer), "%s\\", diskName); // Format as "C:\"
185 + snprintf(pathBuffer, sizeof(pathBuffer), "%s\\", diskName); // Format as "C:\"
186 else
187 // Assume it's a Volume GUID path or a device path
179 - snprintf(pathBuffer, sizeof(pathBuffer), "\\\\.\\%s\\", diskName); // Format as "\\.\HarddiskVolume1\"
188 + snprintf(pathBuffer, sizeof(pathBuffer), "\\\\.\\%s\\", diskName); // Format as "\\.\HarddiskVolume1\"
189
190 d->DriveType = GetDriveTypeA(pathBuffer);
191
192 // Attempt to get the volume information
193 success = GetVolumeInformationA(
185 - pathBuffer, // Path to the disk
186 - NULL, // We don't need the volume name
187 - 0, // Size of volume name buffer is 0
188 - &serialNumber, // Volume serial number
189 - &maxComponentLength, // Maximum component length
190 - &fileSystemFlags, // File system flags
191 - fileSystemNameBuffer, // File system name buffer
194 + pathBuffer, // Path to the disk
195 + NULL, // We don't need the volume name
196 + 0, // Size of volume name buffer is 0
197 + &serialNumber, // Volume serial number
198 + &maxComponentLength, // Maximum component length
199 + &fileSystemFlags, // File system flags
200 + fileSystemNameBuffer, // File system name buffer
201 sizeof(fileSystemNameBuffer) // Size of file system name buffer
202 );
203
195 - if(success) {
204 + if (success) {
205 d->readonly = fileSystemFlags & FILE_READ_ONLY_VOLUME;
206 d->SerialNumber = serialNumber;
207
208 if (fileSystemNameBuffer[0]) {
209 char *s = fileSystemNameBuffer;
210 while (*s) {
202 - *s = tolower((uint8_t) *s);
211 + *s = tolower((uint8_t)*s);
212 s++;
213 }
205 - return string_strdupz(fileSystemNameBuffer); // Duplicate the file system name
214 + return string_strdupz(fileSystemNameBuffer); // Duplicate the file system name
215 }
216 }
217 return NULL;
218 }
219
211 -static const char *drive_type_to_str(UINT type) {
212 - switch(type) {
220 +static const char *drive_type_to_str(UINT type)
221 +{
222 + switch (type) {
223 default:
214 - case 0: return "unknown";
215 - case 1: return "norootdir";
216 - case 2: return "removable";
217 - case 3: return "fixed";
218 - case 4: return "remote";
219 - case 5: return "cdrom";
220 - case 6: return "ramdisk";
224 + case 0:
225 + return "unknown";
226 + case 1:
227 + return "norootdir";
228 + case 2:
229 + return "removable";
230 + case 3:
231 + return "fixed";
232 + case 4:
233 + return "remote";
234 + case 5:
235 + return "cdrom";
236 + case 6:
237 + return "ramdisk";
238 }
239 }
240
224 -static bool do_logical_disk(PERF_DATA_BLOCK *pDataBlock, int update_every, usec_t now_ut) {
241 +static bool do_logical_disk(PERF_DATA_BLOCK *pDataBlock, int update_every, usec_t now_ut)
242 +{
243 DICTIONARY *dict = logicalDisks;
244
245 PERF_OBJECT_TYPE *pObjectType = perflibFindObjectTypeByName(pDataBlock, "LogicalDisk");
228 - if(!pObjectType) return false;
246 + if (!pObjectType)
247 + return false;
248
249 PERF_INSTANCE_DEFINITION *pi = NULL;
231 - for(LONG i = 0; i < pObjectType->NumInstances ; i++) {
250 + for (LONG i = 0; i < pObjectType->NumInstances; i++) {
251 pi = perflibForEachInstance(pDataBlock, pObjectType, pi);
233 - if(!pi) break;
252 + if (!pi)
253 + break;
254
235 - if(!getInstanceName(pDataBlock, pObjectType, pi, windows_shared_buffer, sizeof(windows_shared_buffer)))
255 + if (!getInstanceName(pDataBlock, pObjectType, pi, windows_shared_buffer, sizeof(windows_shared_buffer)))
256 strncpyz(windows_shared_buffer, "[unknown]", sizeof(windows_shared_buffer) - 1);
257
238 - if(strcasecmp(windows_shared_buffer, "_Total") == 0)
258 + if (strcasecmp(windows_shared_buffer, "_Total") == 0)
259 continue;
260
261 struct logical_disk *d = dictionary_set(dict, windows_shared_buffer, NULL, sizeof(*d));
262 d->last_collected = now_ut;
263
244 - if(!d->collected_metadata) {
264 + if (!d->collected_metadata) {
265 d->filesystem = getFileSystemType(d, windows_shared_buffer);
266 d->collected_metadata = true;
267 }
@@ -249,25 +269,29 @@ static bool do_logical_disk(PERF_DATA_BLOCK *pDataBlock, int update_every, usec_
269 perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->percentDiskFree);
270 // perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->freeMegabytes);
271
252 - if(!d->st_disk_space) {
272 + if (!d->st_disk_space) {
273 d->st_disk_space = rrdset_create_localhost(
254 - "disk_space"
255 - , windows_shared_buffer
256 - , NULL
257 - , windows_shared_buffer
258 - , "disk.space"
259 - , "Disk Space Usage"
260 - , "GiB"
261 - , PLUGIN_WINDOWS_NAME
262 - , "PerflibStorage"
263 - , NETDATA_CHART_PRIO_DISKSPACE_SPACE
264 - , update_every
265 - , RRDSET_TYPE_STACKED
266 - );
274 + "disk_space",
275 + windows_shared_buffer,
276 + NULL,
277 + windows_shared_buffer,
278 + "disk.space",
279 + "Disk Space Usage",
280 + "GiB",
281 + PLUGIN_WINDOWS_NAME,
282 + "PerflibStorage",
283 + NETDATA_CHART_PRIO_DISKSPACE_SPACE,
284 + update_every,
285 + RRDSET_TYPE_STACKED);
286
287 rrdlabels_add(d->st_disk_space->rrdlabels, "mount_point", windows_shared_buffer, RRDLABEL_SRC_AUTO);
269 - rrdlabels_add(d->st_disk_space->rrdlabels, "drive_type", drive_type_to_str(d->DriveType), RRDLABEL_SRC_AUTO);
270 - rrdlabels_add(d->st_disk_space->rrdlabels, "filesystem", d->filesystem ? string2str(d->filesystem) : "unknown", RRDLABEL_SRC_AUTO);
288 + rrdlabels_add(
289 + d->st_disk_space->rrdlabels, "drive_type", drive_type_to_str(d->DriveType), RRDLABEL_SRC_AUTO);
290 + rrdlabels_add(
291 + d->st_disk_space->rrdlabels,
292 + "filesystem",
293 + d->filesystem ? string2str(d->filesystem) : "unknown",
294 + RRDLABEL_SRC_AUTO);
295 rrdlabels_add(d->st_disk_space->rrdlabels, "rw_mode", d->readonly ? "ro" : "rw", RRDLABEL_SRC_AUTO);
296
297 {
@@ -281,16 +305,21 @@ static bool do_logical_disk(PERF_DATA_BLOCK *pDataBlock, int update_every, usec_
305 }
306
307 // percentDiskFree has the free space in Data and the size of the disk in Time, in MiB.
284 - rrddim_set_by_pointer(d->st_disk_space, d->rd_disk_space_free, (collected_number)d->percentDiskFree.current.Data);
285 - rrddim_set_by_pointer(d->st_disk_space, d->rd_disk_space_used, (collected_number)(d->percentDiskFree.current.Time - d->percentDiskFree.current.Data));
308 + rrddim_set_by_pointer(
309 + d->st_disk_space, d->rd_disk_space_free, (collected_number)d->percentDiskFree.current.Data);
310 + rrddim_set_by_pointer(
311 + d->st_disk_space,
312 + d->rd_disk_space_used,
313 + (collected_number)(d->percentDiskFree.current.Time - d->percentDiskFree.current.Data));
314 rrdset_done(d->st_disk_space);
315 }
316
317 // cleanup
318 {
319 struct logical_disk *d;
292 - dfe_start_write(dict, d) {
293 - if(d->last_collected < now_ut) {
320 + dfe_start_write(dict, d)
321 + {
322 + if (d->last_collected < now_ut) {
323 logical_disk_cleanup(d);
324 dictionary_del(dict, d_dfe.name);
325 }
@@ -302,38 +331,44 @@ static bool do_logical_disk(PERF_DATA_BLOCK *pDataBlock, int update_every, usec_
331 return true;
332 }
333
305 -static void physical_disk_labels(RRDSET *st, void *data) {
334 +static void physical_disk_labels(RRDSET *st, void *data)
335 +{
336 struct physical_disk *d = data;
337
308 - if(d->device)
338 + if (d->device)
339 rrdlabels_add(st->rrdlabels, "device", string2str(d->device), RRDLABEL_SRC_AUTO);
340
341 if (d->mount_point)
342 rrdlabels_add(st->rrdlabels, "mount_point", string2str(d->mount_point), RRDLABEL_SRC_AUTO);
343
314 -// if (d->manufacturer)
315 -// rrdlabels_add(st->rrdlabels, "manufacturer", string2str(d->manufacturer), RRDLABEL_SRC_AUTO);
344 + // if (d->manufacturer)
345 + // rrdlabels_add(st->rrdlabels, "manufacturer", string2str(d->manufacturer), RRDLABEL_SRC_AUTO);
346
347 if (d->model)
348 rrdlabels_add(st->rrdlabels, "model", string2str(d->model), RRDLABEL_SRC_AUTO);
349
320 -// if (d->media_type)
321 -// rrdlabels_add(st->rrdlabels, "media_type", string2str(d->media_type), RRDLABEL_SRC_AUTO);
350 + // if (d->media_type)
351 + // rrdlabels_add(st->rrdlabels, "media_type", string2str(d->media_type), RRDLABEL_SRC_AUTO);
352
323 -// if (d->name)
324 -// rrdlabels_add(st->rrdlabels, "name", string2str(d->name), RRDLABEL_SRC_AUTO);
353 + // if (d->name)
354 + // rrdlabels_add(st->rrdlabels, "name", string2str(d->name), RRDLABEL_SRC_AUTO);
355
356 if (d->device_id)
357 rrdlabels_add(st->rrdlabels, "device_id", string2str(d->device_id), RRDLABEL_SRC_AUTO);
358 }
359
330 -static bool str_is_numeric(const char *s) {
331 - while(*s) if(!isdigit((uint8_t)*s++)) return false;
360 +static bool str_is_numeric(const char *s)
361 +{
362 + while (*s)
363 + if (!isdigit((uint8_t)*s++))
364 + return false;
365 return true;
366 }
367
335 -static inline double perflib_average_timer_ms(COUNTER_DATA *d) {
336 - if(!d->updated) return 0.0;
368 +static inline double perflib_average_timer_ms(COUNTER_DATA *d)
369 +{
370 + if (!d->updated)
371 + return 0.0;
372
373 ULONGLONG data1 = d->current.Data;
374 ULONGLONG data0 = d->previous.Data;
@@ -341,35 +376,39 @@ static inline double perflib_average_timer_ms(COUNTER_DATA *d) {
376 LONGLONG time0 = d->previous.Time;
377 LONGLONG freq1 = d->current.Frequency;
378
344 - if(data1 >= data0 && time1 > time0 && time0 && freq1)
379 + if (data1 >= data0 && time1 > time0 && time0 && freq1)
380 return ((double)(data1 - data0) / (double)(freq1 / MSEC_PER_SEC)) / (double)(time1 - time0);
381
382 return 0;
383 }
384
350 -static inline uint64_t perflib_average_bulk(COUNTER_DATA *d) {
351 - if(!d->updated) return 0;
385 +static inline uint64_t perflib_average_bulk(COUNTER_DATA *d)
386 +{
387 + if (!d->updated)
388 + return 0;
389
390 ULONGLONG data1 = d->current.Data;
391 ULONGLONG data0 = d->previous.Data;
392 LONGLONG time1 = d->current.Time;
393 LONGLONG time0 = d->previous.Time;
394
358 - if(data1 >= data0 && time1 > time0 && time0)
395 + if (data1 >= data0 && time1 > time0 && time0)
396 return (data1 - data0) / (time1 - time0);
397
398 return 0;
399 }
400
364 -static inline uint64_t perflib_idle_time_percent(COUNTER_DATA *d) {
365 - if(!d->updated) return 0.0;
401 +static inline uint64_t perflib_idle_time_percent(COUNTER_DATA *d)
402 +{
403 + if (!d->updated)
404 + return 0.0;
405
406 ULONGLONG data1 = d->current.Data;
407 ULONGLONG data0 = d->previous.Data;
408 LONGLONG time1 = d->current.Time;
409 LONGLONG time0 = d->previous.Time;
410
372 - if(data1 >= data0 && time1 > time0 && time0) {
411 + if (data1 >= data0 && time1 > time0 && time0) {
412 uint64_t pcent = 100 * (data1 - data0) / (time1 - time0);
413 return pcent > 100 ? 100 : pcent;
414 }
@@ -380,11 +419,13 @@ static inline uint64_t perflib_idle_time_percent(COUNTER_DATA *d) {
419 #define MAX_WMI_DRIVES 100
420 static DiskDriveInfoWMI infos[MAX_WMI_DRIVES];
421
383 -static bool do_physical_disk(PERF_DATA_BLOCK *pDataBlock, int update_every, usec_t now_ut) {
422 +static bool do_physical_disk(PERF_DATA_BLOCK *pDataBlock, int update_every, usec_t now_ut)
423 +{
424 DICTIONARY *dict = physicalDisks;
425
426 PERF_OBJECT_TYPE *pObjectType = perflibFindObjectTypeByName(pDataBlock, "PhysicalDisk");
387 - if(!pObjectType) return false;
427 + if (!pObjectType)
428 + return false;
429
430 PERF_INSTANCE_DEFINITION *pi = NULL;
431 for (LONG i = 0; i < pObjectType->NumInstances; i++) {
@@ -397,22 +438,22 @@ static bool do_physical_disk(PERF_DATA_BLOCK *pDataBlock, int update_every, usec
438
439 int device_index = -1;
440 char *device = windows_shared_buffer;
400 - char mount_point[128]; mount_point[0] = '\0';
441 + char mount_point[128];
442 + mount_point[0] = '\0';
443
444 struct physical_disk *d;
445 bool is_system;
446 if (strcasecmp(windows_shared_buffer, "_Total") == 0) {
447 d = &system_physical_total;
448 is_system = true;
407 - }
408 - else {
449 + } else {
450 char *space;
410 - if((space = strchr(windows_shared_buffer, ' '))) {
451 + if ((space = strchr(windows_shared_buffer, ' '))) {
452 *space++ = '\0';
453 strncpyz(mount_point, space, sizeof(mount_point) - 1);
454 }
455
415 - if(str_is_numeric(windows_shared_buffer)) {
456 + if (str_is_numeric(windows_shared_buffer)) {
457 device_index = str2ull(device, NULL);
458 snprintfz(windows_shared_buffer, sizeof(windows_shared_buffer), "Disk %d", device_index);
459 device = windows_shared_buffer;
@@ -424,10 +465,10 @@ static bool do_physical_disk(PERF_DATA_BLOCK *pDataBlock, int update_every, usec
465 d->last_collected = now_ut;
466
467 if (!d->collected_metadata) {
427 - if(!is_system && device_index != -1) {
468 + if (!is_system && device_index != -1) {
469 size_t infoCount = GetDiskDriveInfo(infos, _countof(infos));
429 - for(size_t k = 0; k < infoCount ; k++) {
430 - if(infos[k].Index != device_index)
470 + for (size_t k = 0; k < infoCount; k++) {
471 + if (infos[k].Index != device_index)
472 continue;
473
474 d->manufacturer = string_strdupz(infos[k].Manufacturer);
@@ -447,11 +488,9 @@ static bool do_physical_disk(PERF_DATA_BLOCK *pDataBlock, int update_every, usec
488
489 if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->diskReadBytesPerSec) &&
490 perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->diskWriteBytesPerSec)) {
450 - if(is_system)
491 + if (is_system)
492 common_system_io(
452 - d->diskReadBytesPerSec.current.Data,
453 - d->diskWriteBytesPerSec.current.Data,
454 - update_every);
493 + d->diskReadBytesPerSec.current.Data, d->diskWriteBytesPerSec.current.Data, update_every);
494 else
495 common_disk_io(
496 &d->disk_io,
@@ -464,124 +503,120 @@ static bool do_physical_disk(PERF_DATA_BLOCK *pDataBlock, int update_every, usec
503 d);
504 }
505
467 - if(is_system) continue;
506 + if (is_system)
507 + continue;
508
509 if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->diskReadsPerSec) &&
510 perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->diskWritesPerSec)) {
471 -
511 common_disk_ops(
473 - &d->disk_ops,
474 - device,
475 - NULL,
476 - d->diskReadsPerSec.current.Data,
477 - d->diskWritesPerSec.current.Data,
478 - update_every,
479 - physical_disk_labels,
480 - d);
512 + &d->disk_ops,
513 + device,
514 + NULL,
515 + d->diskReadsPerSec.current.Data,
516 + d->diskWritesPerSec.current.Data,
517 + update_every,
518 + physical_disk_labels,
519 + d);
520 }
521
522 if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->percentIdleTime)) {
523 common_disk_util(
485 - &d->disk_util,
486 - device,
487 - NULL,
488 - 100 - perflib_idle_time_percent(&d->percentIdleTime),
489 - update_every,
490 - physical_disk_labels,
491 - d);
524 + &d->disk_util,
525 + device,
526 + NULL,
527 + 100 - perflib_idle_time_percent(&d->percentIdleTime),
528 + update_every,
529 + physical_disk_labels,
530 + d);
531 }
532
533 if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->percentDiskTime)) {
534 common_disk_busy(
496 - &d->disk_busy,
497 - device,
498 - NULL,
499 - d->percentDiskTime.current.Data / NS100_PER_MS,
500 - update_every,
501 - physical_disk_labels,
502 - d);
535 + &d->disk_busy,
536 + device,
537 + NULL,
538 + d->percentDiskTime.current.Data / NS100_PER_MS,
539 + update_every,
540 + physical_disk_labels,
541 + d);
542 }
543
544 if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->percentDiskReadTime) &&
545 perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->percentDiskWriteTime)) {
507 -
546 common_disk_iotime(
509 - &d->disk_iotime,
510 - device,
511 - NULL,
512 - d->percentDiskReadTime.current.Data / NS100_PER_MS,
513 - d->percentDiskWriteTime.current.Data / NS100_PER_MS,
514 - update_every,
515 - physical_disk_labels,
516 - d);
547 + &d->disk_iotime,
548 + device,
549 + NULL,
550 + d->percentDiskReadTime.current.Data / NS100_PER_MS,
551 + d->percentDiskWriteTime.current.Data / NS100_PER_MS,
552 + update_every,
553 + physical_disk_labels,
554 + d);
555 }
556
519 - if(perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->currentDiskQueueLength)) {
557 + if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->currentDiskQueueLength)) {
558 common_disk_qops(
521 - &d->disk_qops,
522 - device,
523 - NULL,
524 - d->currentDiskQueueLength.current.Data,
525 - update_every,
526 - physical_disk_labels,
527 - d);
559 + &d->disk_qops,
560 + device,
561 + NULL,
562 + d->currentDiskQueueLength.current.Data,
563 + update_every,
564 + physical_disk_labels,
565 + d);
566 }
567
568 if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->averageDiskSecondsPerRead) &&
569 perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->averageDiskSecondsPerWrite)) {
532 -
570 common_disk_await(
534 - &d->disk_await,
535 - device,
536 - NULL,
537 - perflib_average_timer_ms(&d->averageDiskSecondsPerRead),
538 - perflib_average_timer_ms(&d->averageDiskSecondsPerWrite),
539 - update_every,
540 - physical_disk_labels,
541 - d);
571 + &d->disk_await,
572 + device,
573 + NULL,
574 + perflib_average_timer_ms(&d->averageDiskSecondsPerRead),
575 + perflib_average_timer_ms(&d->averageDiskSecondsPerWrite),
576 + update_every,
577 + physical_disk_labels,
578 + d);
579 }
580
581 if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->averageDiskSecondsPerTransfer)) {
582 common_disk_svctm(
546 - &d->disk_svctm,
547 - device,
548 - NULL,
549 - perflib_average_timer_ms(&d->averageDiskSecondsPerTransfer),
550 - update_every,
551 - physical_disk_labels,
552 - d);
583 + &d->disk_svctm,
584 + device,
585 + NULL,
586 + perflib_average_timer_ms(&d->averageDiskSecondsPerTransfer),
587 + update_every,
588 + physical_disk_labels,
589 + d);
590 }
591
592 if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->averageDiskBytesPerRead) &&
593 perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->averageDiskBytesPerWrite)) {
557 -
594 common_disk_avgsz(
559 - &d->disk_avgsz,
560 - device,
561 - NULL,
562 - perflib_average_bulk(&d->averageDiskBytesPerRead),
563 - perflib_average_bulk(&d->averageDiskBytesPerWrite),
564 - update_every,
565 - physical_disk_labels,
566 - d);
595 + &d->disk_avgsz,
596 + device,
597 + NULL,
598 + perflib_average_bulk(&d->averageDiskBytesPerRead),
599 + perflib_average_bulk(&d->averageDiskBytesPerWrite),
600 + update_every,
601 + physical_disk_labels,
602 + d);
603 }
604
569 - if(perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->splitIoPerSec)) {
605 + if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->splitIoPerSec)) {
606 if (!d->st_split) {
607 d->st_split = rrdset_create_localhost(
572 - "disk_split",
573 - device,
574 - NULL,
575 - "iops",
576 - "disk.split",
577 - "Split I/O Operations",
578 - "operations/s",
579 - _COMMON_PLUGIN_NAME,
580 - _COMMON_PLUGIN_MODULE_NAME,
581 - NETDATA_CHART_PRIO_DISK_SPLIT,
582 - update_every,
583 - RRDSET_TYPE_LINE
584 - );
608 + "disk_split",
609 + device,
610 + NULL,
611 + "iops",
612 + "disk.split",
613 + "Split I/O Operations",
614 + "operations/s",
615 + _COMMON_PLUGIN_NAME,
616 + _COMMON_PLUGIN_MODULE_NAME,
617 + NETDATA_CHART_PRIO_DISK_SPLIT,
618 + update_every,
619 + RRDSET_TYPE_LINE);
620
621 d->rd_split = rrddim_add(d->st_split, "discards", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
622
@@ -596,8 +631,9 @@ static bool do_physical_disk(PERF_DATA_BLOCK *pDataBlock, int update_every, usec
631 // cleanup
632 {
633 struct physical_disk *d;
599 - dfe_start_write(dict, d) {
600 - if(d->last_collected < now_ut) {
634 + dfe_start_write(dict, d)
635 + {
636 + if (d->last_collected < now_ut) {
637 physical_disk_cleanup(d);
638 dictionary_del(dict, d_dfe.name);
639 }
@@ -609,20 +645,22 @@ static bool do_physical_disk(PERF_DATA_BLOCK *pDataBlock, int update_every, usec
645 return true;
646 }
647
612 -int do_PerflibStorage(int update_every, usec_t dt __maybe_unused) {
648 +int do_PerflibStorage(int update_every, usec_t dt __maybe_unused)
649 +{
650 static bool initialized = false;
651
615 - if(unlikely(!initialized)) {
652 + if (unlikely(!initialized)) {
653 initialize();
654 initialized = true;
655 }
656
657 DWORD id = RegistryFindIDByName("LogicalDisk");
621 - if(id == PERFLIB_REGISTRY_NAME_NOT_FOUND)
658 + if (id == PERFLIB_REGISTRY_NAME_NOT_FOUND)
659 return -1;
660
661 PERF_DATA_BLOCK *pDataBlock = perflibGetPerformanceData(id);
625 - if(!pDataBlock) return -1;
662 + if (!pDataBlock)
663 + return -1;
664
665 usec_t now_ut = now_monotonic_usec();
666 do_logical_disk(pDataBlock, update_every, now_ut);
src/collectors/windows.plugin/perflib-thermalzone.c
+10 -5
@@ -10,25 +10,29 @@ struct thermal_zone {
10 COUNTER_DATA thermalZoneTemperature;
11 };
12
13 -static inline void initialize_thermal_zone_keys(struct thermal_zone *p) {
13 +static inline void initialize_thermal_zone_keys(struct thermal_zone *p)
14 +{
15 p->thermalZoneTemperature.key = "Temperature";
16 }
17
17 -void dict_thermal_zone_insert_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused) {
18 +void dict_thermal_zone_insert_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused)
19 +{
20 struct thermal_zone *p = value;
21 initialize_thermal_zone_keys(p);
22 }
23
24 static DICTIONARY *thermal_zones = NULL;
25
24 -static void initialize(void) {
26 +static void initialize(void)
27 +{
28 thermal_zones = dictionary_create_advanced(
29 DICT_OPTION_DONT_OVERWRITE_VALUE | DICT_OPTION_FIXED_SIZE, NULL, sizeof(struct thermal_zone));
30
31 dictionary_register_insert_callback(thermal_zones, dict_thermal_zone_insert_cb, NULL);
32 }
33
31 -static bool do_thermal_zones(PERF_DATA_BLOCK *pDataBlock, int update_every) {
34 +static bool do_thermal_zones(PERF_DATA_BLOCK *pDataBlock, int update_every)
35 +{
36 PERF_OBJECT_TYPE *pObjectType = perflibFindObjectTypeByName(pDataBlock, "Thermal Zone Information");
37 if (!pObjectType)
38 return false;
@@ -81,7 +85,8 @@ static bool do_thermal_zones(PERF_DATA_BLOCK *pDataBlock, int update_every) {
85 return true;
86 }
87
84 -int do_PerflibThermalZone(int update_every, usec_t dt __maybe_unused) {
88 +int do_PerflibThermalZone(int update_every, usec_t dt __maybe_unused)
89 +{
90 static bool initialized = false;
91
92 if (unlikely(!initialized)) {
src/collectors/windows.plugin/perflib-web-service.c
+56 -46
@@ -93,7 +93,8 @@ struct web_service {
93 COUNTER_DATA IISRequestsOther;
94 };
95
96 -static inline void initialize_web_service_keys(struct web_service *p) {
96 +static inline void initialize_web_service_keys(struct web_service *p)
97 +{
98 p->IISCurrentAnonymousUser.key = "Current Anonymous Users";
99 p->IISCurrentNonAnonymousUsers.key = "Current NonAnonymous Users";
100 p->IISCurrentConnections.key = "Current Connections";
@@ -128,21 +129,24 @@ static inline void initialize_web_service_keys(struct web_service *p) {
129 p->IISRequestsOther.key = "Other Request Methods/sec";
130 }
131
131 -void dict_web_service_insert_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused) {
132 +void dict_web_service_insert_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused)
133 +{
134 struct web_service *p = value;
135 initialize_web_service_keys(p);
136 }
137
138 static DICTIONARY *web_services = NULL;
139
138 -static void initialize(void) {
140 +static void initialize(void)
141 +{
142 web_services = dictionary_create_advanced(
143 DICT_OPTION_DONT_OVERWRITE_VALUE | DICT_OPTION_FIXED_SIZE, NULL, sizeof(struct web_service));
144
145 dictionary_register_insert_callback(web_services, dict_web_service_insert_cb, NULL);
146 }
147
145 -static bool do_web_services(PERF_DATA_BLOCK *pDataBlock, int update_every) {
148 +static bool do_web_services(PERF_DATA_BLOCK *pDataBlock, int update_every)
149 +{
150 char id[RRD_ID_LENGTH_MAX + 1];
151 PERF_OBJECT_TYPE *pObjectType = perflibFindObjectTypeByName(pDataBlock, "Web Service");
152 if (!pObjectType)
@@ -215,7 +219,8 @@ static bool do_web_services(PERF_DATA_BLOCK *pDataBlock, int update_every) {
219 update_every,
220 RRDSET_TYPE_LINE);
221
218 - p->rd_files_received = rrddim_add(p->st_file_transfer, "received", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
222 + p->rd_files_received =
223 + rrddim_add(p->st_file_transfer, "received", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
224 p->rd_files_sent = rrddim_add(p->st_file_transfer, "sent", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
225 rrdlabels_add(p->st_file_transfer->rrdlabels, "website", windows_shared_buffer, RRDLABEL_SRC_AUTO);
226 }
@@ -246,7 +251,8 @@ static bool do_web_services(PERF_DATA_BLOCK *pDataBlock, int update_every) {
251 update_every,
252 RRDSET_TYPE_LINE);
253
249 - p->rd_curr_connections = rrddim_add(p->st_curr_connections, "active", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
254 + p->rd_curr_connections =
255 + rrddim_add(p->st_curr_connections, "active", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
256 rrdlabels_add(p->st_curr_connections->rrdlabels, "website", windows_shared_buffer, RRDLABEL_SRC_AUTO);
257 }
258
@@ -555,24 +561,41 @@ static bool do_web_services(PERF_DATA_BLOCK *pDataBlock, int update_every) {
561 update_every,
562 RRDSET_TYPE_STACKED);
563
558 - p->rd_request_options_rate = rrddim_add(p->st_request_by_type_rate, "options", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
559 - p->rd_request_get_rate = rrddim_add(p->st_request_by_type_rate, "get", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
560 - p->rd_request_post_rate = rrddim_add(p->st_request_by_type_rate, "post", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
561 - p->rd_request_head_rate = rrddim_add(p->st_request_by_type_rate, "head", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
562 - p->rd_request_put_rate = rrddim_add(p->st_request_by_type_rate, "put", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
563 - p->rd_request_delete_rate = rrddim_add(p->st_request_by_type_rate, "delete", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
564 - p->rd_request_trace_rate = rrddim_add(p->st_request_by_type_rate, "trace", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
565 - p->rd_request_move_rate = rrddim_add(p->st_request_by_type_rate, "move", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
566 - p->rd_request_copy_rate = rrddim_add(p->st_request_by_type_rate, "copy", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
567 - p->rd_request_mkcol_rate = rrddim_add(p->st_request_by_type_rate, "mkcol", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
568 - p->rd_request_propfind_rate = rrddim_add(p->st_request_by_type_rate, "propfind", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
569 - p->rd_request_proppatch_rate = rrddim_add(p->st_request_by_type_rate, "proppatch", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
570 - p->rd_request_search_rate = rrddim_add(p->st_request_by_type_rate, "search", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
571 - p->rd_request_lock_rate = rrddim_add(p->st_request_by_type_rate, "lock", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
572 - p->rd_request_unlock_rate = rrddim_add(p->st_request_by_type_rate, "unlock", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
573 - p->rd_request_other_rate = rrddim_add(p->st_request_by_type_rate, "other", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
574 -
575 - rrdlabels_add(p->st_request_by_type_rate->rrdlabels, "website", windows_shared_buffer, RRDLABEL_SRC_AUTO);
564 + p->rd_request_options_rate =
565 + rrddim_add(p->st_request_by_type_rate, "options", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
566 + p->rd_request_get_rate =
567 + rrddim_add(p->st_request_by_type_rate, "get", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
568 + p->rd_request_post_rate =
569 + rrddim_add(p->st_request_by_type_rate, "post", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
570 + p->rd_request_head_rate =
571 + rrddim_add(p->st_request_by_type_rate, "head", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
572 + p->rd_request_put_rate =
573 + rrddim_add(p->st_request_by_type_rate, "put", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
574 + p->rd_request_delete_rate =
575 + rrddim_add(p->st_request_by_type_rate, "delete", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
576 + p->rd_request_trace_rate =
577 + rrddim_add(p->st_request_by_type_rate, "trace", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
578 + p->rd_request_move_rate =
579 + rrddim_add(p->st_request_by_type_rate, "move", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
580 + p->rd_request_copy_rate =
581 + rrddim_add(p->st_request_by_type_rate, "copy", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
582 + p->rd_request_mkcol_rate =
583 + rrddim_add(p->st_request_by_type_rate, "mkcol", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
584 + p->rd_request_propfind_rate =
585 + rrddim_add(p->st_request_by_type_rate, "propfind", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
586 + p->rd_request_proppatch_rate =
587 + rrddim_add(p->st_request_by_type_rate, "proppatch", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
588 + p->rd_request_search_rate =
589 + rrddim_add(p->st_request_by_type_rate, "search", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
590 + p->rd_request_lock_rate =
591 + rrddim_add(p->st_request_by_type_rate, "lock", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
592 + p->rd_request_unlock_rate =
593 + rrddim_add(p->st_request_by_type_rate, "unlock", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
594 + p->rd_request_other_rate =
595 + rrddim_add(p->st_request_by_type_rate, "other", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
596 +
597 + rrdlabels_add(
598 + p->st_request_by_type_rate->rrdlabels, "website", windows_shared_buffer, RRDLABEL_SRC_AUTO);
599 }
600
601 rrddim_set_by_pointer(
@@ -580,21 +603,13 @@ static bool do_web_services(PERF_DATA_BLOCK *pDataBlock, int update_every) {
603 p->rd_request_options_rate,
604 (collected_number)p->IISRequestsOptions.current.Data);
605 rrddim_set_by_pointer(
583 - p->st_request_by_type_rate,
584 - p->rd_request_get_rate,
585 - (collected_number)p->IISRequestsGet.current.Data);
606 + p->st_request_by_type_rate, p->rd_request_get_rate, (collected_number)p->IISRequestsGet.current.Data);
607 rrddim_set_by_pointer(
587 - p->st_request_by_type_rate,
588 - p->rd_request_post_rate,
589 - (collected_number)p->IISRequestsPost.current.Data);
608 + p->st_request_by_type_rate, p->rd_request_post_rate, (collected_number)p->IISRequestsPost.current.Data);
609 rrddim_set_by_pointer(
591 - p->st_request_by_type_rate,
592 - p->rd_request_head_rate,
593 - (collected_number)p->IISRequestsHead.current.Data);
610 + p->st_request_by_type_rate, p->rd_request_head_rate, (collected_number)p->IISRequestsHead.current.Data);
611 rrddim_set_by_pointer(
595 - p->st_request_by_type_rate,
596 - p->rd_request_put_rate,
597 - (collected_number)p->IISRequestsPut.current.Data);
612 + p->st_request_by_type_rate, p->rd_request_put_rate, (collected_number)p->IISRequestsPut.current.Data);
613 rrddim_set_by_pointer(
614 p->st_request_by_type_rate,
615 p->rd_request_delete_rate,
@@ -604,13 +619,9 @@ static bool do_web_services(PERF_DATA_BLOCK *pDataBlock, int update_every) {
619 p->rd_request_trace_rate,
620 (collected_number)p->IISRequestsTrace.current.Data);
621 rrddim_set_by_pointer(
607 - p->st_request_by_type_rate,
608 - p->rd_request_move_rate,
609 - (collected_number)p->IISRequestsMove.current.Data);
622 + p->st_request_by_type_rate, p->rd_request_move_rate, (collected_number)p->IISRequestsMove.current.Data);
623 rrddim_set_by_pointer(
611 - p->st_request_by_type_rate,
612 - p->rd_request_copy_rate,
613 - (collected_number)p->IISRequestsCopy.current.Data);
624 + p->st_request_by_type_rate, p->rd_request_copy_rate, (collected_number)p->IISRequestsCopy.current.Data);
625 rrddim_set_by_pointer(
626 p->st_request_by_type_rate,
627 p->rd_request_mkcol_rate,
@@ -628,9 +639,7 @@ static bool do_web_services(PERF_DATA_BLOCK *pDataBlock, int update_every) {
639 p->rd_request_search_rate,
640 (collected_number)p->IISRequestsSearch.current.Data);
641 rrddim_set_by_pointer(
631 - p->st_request_by_type_rate,
632 - p->rd_request_lock_rate,
633 - (collected_number)p->IISRequestsLock.current.Data);
642 + p->st_request_by_type_rate, p->rd_request_lock_rate, (collected_number)p->IISRequestsLock.current.Data);
643 rrddim_set_by_pointer(
644 p->st_request_by_type_rate,
645 p->rd_request_unlock_rate,
@@ -647,7 +656,8 @@ static bool do_web_services(PERF_DATA_BLOCK *pDataBlock, int update_every) {
656 return true;
657 }
658
650 -int do_PerflibWebService(int update_every, usec_t dt __maybe_unused) {
659 +int do_PerflibWebService(int update_every, usec_t dt __maybe_unused)
660 +{
661 static bool initialized = false;
662
663 if (unlikely(!initialized)) {
src/collectors/windows.plugin/windows-internals.h
+2 -1
@@ -5,7 +5,8 @@
5
6 #include "libnetdata/libnetdata.h"
7
8 -static inline ULONGLONG FileTimeToULL(FILETIME ft) {
8 +static inline ULONGLONG FileTimeToULL(FILETIME ft)
9 +{
10 ULARGE_INTEGER ul;
11 ul.LowPart = ft.dwLowDateTime;
12 ul.HighPart = ft.dwHighDateTime;