Perflib fixes (Windows.plugin) (#21458)
thiagoftsm committed
Dec 15, 2025 at 15:12 UTC
23e396458b194c8e9bc6b358e7ccb30289ea144d
15 files changed
+134
-118
src/collectors/windows.plugin/GetHardwareInfo.c
+12
-2
@@ -77,8 +77,18 @@ int netdata_install_driver()
77
return -1;
78
}
79
80
+ char expanded_path[MAX_PATH];
81
+ if (ExpandEnvironmentStringsA(drv_path, expanded_path, sizeof(expanded_path)) == 0) {
82
+ nd_log(
83
+ NDLS_COLLECTORS,
84
+ NDLP_ERR,
85
+ "Cannot expand environment strings. Error= %lu \n", GetLastError());
86
+ CloseServiceHandle(scm);
87
+ return -1;
88
+ }
89
+
90
// Create the service entry for the driver
81
- SC_HANDLE service = CreateService(
91
+ SC_HANDLE service = CreateServiceA(
92
scm,
93
srv_name,
94
srv_name,
@@ -86,7 +96,7 @@ int netdata_install_driver()
96
SERVICE_KERNEL_DRIVER,
97
SERVICE_DEMAND_START,
98
SERVICE_ERROR_NORMAL,
89
- drv_path,
99
+ expanded_path,
100
NULL,
101
NULL,
102
NULL,
src/collectors/windows.plugin/GetPowerSupply.c
+1
-1
@@ -79,7 +79,7 @@ int do_GetPowerSupply(int update_every, usec_t dt __maybe_unused)
79
80
HDEVINFO hdev = SetupDiGetClassDevs(&GUID_DEVCLASS_BATTERY, 0, 0, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
81
if (hdev == INVALID_HANDLE_VALUE)
82
- return 1;
82
+ return -1;
83
84
SP_DEVICE_INTERFACE_DATA did = {0};
85
did.cbSize = sizeof(did);
src/collectors/windows.plugin/GetSensors.c
+33
-10
@@ -13,6 +13,7 @@
13
14
static ISensorManager *pSensorManager = NULL;
15
static ND_THREAD *sensors_thread_update = NULL;
16
+static netdata_mutex_t sensors_mutex;
17
18
#define NETDATA_WIN_SENSOR_STATES (6)
19
#define NETDATA_WIN_VECTOR_POS (3)
@@ -403,8 +404,11 @@ static inline char *netdata_pvar_to_char(const PROPERTYKEY *key, ISensor *pSenso
404
HRESULT hr = pSensor->lpVtbl->GetProperty(pSensor, key, &pv);
405
if (SUCCEEDED(hr) && pv.vt == VT_LPWSTR) {
406
char value[8192];
406
- size_t len = wcslen(pv.pwszVal);
407
+ int len = wcslen(pv.pwszVal);
408
len = wcstombs(value, pv.pwszVal, len);
409
+ if (len < 0) {
410
+ return NULL;
411
+ }
412
value[len] = '\0';
413
PropVariantClear(&pv);
414
return strdupz(value);
@@ -428,12 +432,11 @@ static int netdata_collect_sensor_data(collected_number *value, ISensor *pSensor
432
PROPVARIANT pv = {};
433
HRESULT hr;
434
431
- int defined = 0;
435
hr = pSensor->lpVtbl->GetData(pSensor, &pReport);
436
if (SUCCEEDED(hr) && pReport) {
437
PropVariantInit(&pv);
438
hr = pReport->lpVtbl->GetSensorValue(pReport, key, &pv);
436
- if (SUCCEEDED(hr) && (pv.vt == VT_R4 || pv.vt == VT_R8 || pv.vt == VT_UI4 || pv.vt == VT_BOOL)) {
439
+ if (SUCCEEDED(hr)) {
440
switch (pv.vt) {
441
case VT_UI4:
442
*value = (collected_number)(pv.ulVal * 100);
@@ -447,16 +450,25 @@ static int netdata_collect_sensor_data(collected_number *value, ISensor *pSensor
450
case VT_BOOL:
451
*value = (pv.boolVal == VARIANT_TRUE) ? 100 : 0;
452
break;
453
+ default:
454
+ goto error_collect_sensor_data;
455
}
451
- defined = 1;
456
+ pReport->lpVtbl->Release(pReport);
457
+ } else {
458
+ pReport->lpVtbl->Release(pReport);
459
+ goto error_collect_sensor_data;
460
}
461
PropVariantClear(&pv);
454
- pReport->lpVtbl->Release(pReport);
455
- } else {
456
- *value = 0;
457
- }
462
+ } else
463
+ goto error_collect_sensor_data;
464
+
465
+ return 1;
466
+error_collect_sensor_data:
467
+ if (pv.vt != VT_EMPTY)
468
+ PropVariantClear(&pv);
469
459
- return defined;
470
+ *value = 0;
471
+ return 0;
472
}
473
474
static void netdata_sensors_get_data(struct sensor_data *sd, ISensor *pSensor)
@@ -527,7 +539,7 @@ static void netdata_sensors_get_custom_data(struct sensor_data *sd, ISensor *pSe
539
static struct netdata_sensors_extra_config *netdata_sensors_fill_configuration(const char *name)
540
{
541
#define NETDATA_DEFAULT_SENSOR_SECTION "plugin:windows:GetSensors"
530
- char section_name[CONFIG_MAX_NAME];
542
+ char section_name[CONFIG_MAX_NAME + 1];
543
snprintfz(section_name, CONFIG_MAX_NAME, "%s:%s", NETDATA_DEFAULT_SENSOR_SECTION, name);
544
545
const char *units = inicfg_get(&netdata_config, section_name, "units", NULL);
@@ -564,6 +576,8 @@ static void netdata_get_sensors()
576
ISensor *pSensor = NULL;
577
hr = pSensorCollection->lpVtbl->GetAt(pSensorCollection, i, &pSensor);
578
if (FAILED(hr) || !pSensor) {
579
+ if (pSensor)
580
+ pSensor->lpVtbl->Release(pSensor);
581
continue;
582
}
583
@@ -579,6 +593,7 @@ static void netdata_get_sensors()
593
continue;
594
}
595
596
+ __netdata_mutex_lock(&sensors_mutex);
597
struct sensor_data *sd = dictionary_set(sensors, thread_values, NULL, sizeof(*sd));
598
599
if (unlikely(!sd->initialized)) {
@@ -628,6 +643,7 @@ static void netdata_get_sensors()
643
}
644
}
645
}
646
+ __netdata_mutex_unlock(&sensors_mutex);
647
648
pSensor->lpVtbl->Release(pSensor);
649
}
@@ -702,6 +718,9 @@ static int initialize(int update_every)
718
// (netdata_sensors_monitor) because COM must be initialized per-thread.
719
// The sensor thread owns the pSensorManager instance and handles its cleanup.
720
721
+ if (unlikely(__netdata_mutex_init(&sensors_mutex)))
722
+ return -1;
723
+
724
sensors = dictionary_create_advanced(
725
DICT_OPTION_DONT_OVERWRITE_VALUE | DICT_OPTION_FIXED_SIZE, NULL, sizeof(struct sensor_data));
726
dictionary_register_insert_callback(sensors, dict_sensor_insert, NULL);
@@ -875,7 +894,9 @@ int do_GetSensors(int update_every, usec_t dt __maybe_unused)
894
initialized = true;
895
}
896
897
+ __netdata_mutex_lock(&sensors_mutex);
898
dictionary_sorted_walkthrough_read(sensors, dict_sensors_charts_cb, &update_every);
899
+ __netdata_mutex_unlock(&sensors_mutex);
900
return 0;
901
}
902
@@ -886,6 +907,8 @@ void do_Sensors_cleanup()
907
if (nd_thread_join(sensors_thread_update))
908
nd_log_daemon(NDLP_ERR, "Failed to join sensors thread update");
909
910
+ __netdata_mutex_destroy(&sensors_mutex);
911
+ dictionary_destroy(sensors);
912
// Note: pSensorManager is owned and cleaned up by the sensor thread itself
913
// No additional cleanup needed here since the thread has already released resources
914
}
src/collectors/windows.plugin/perflib-adfs.c
+4
-4
@@ -247,8 +247,8 @@ struct adfs_certificate {
247
.ADFSOauthClientWindowsAuthenticationsFailure.key = "OAuth Client Windows Integrated Authentication Failures",
248
.ADFSOauthLogonCertificateRequestsSuccess.key = "OAuth Logon Certificate Token Requests",
249
.ADFSOauthLogonCertificateRequestsFailure.key = "OAuth Logon Certificate Request Failures",
250
- .ADFSOauthPasswordGrantRequestsSuccess.key = "OAuth Password Grant Request Failures",
251
- .ADFSOauthPasswordGrantRequestsFailure.key = "OAuth Password Grant Request",
250
+ .ADFSOauthPasswordGrantRequestsSuccess.key = "OAuth Password Grant Requests",
251
+ .ADFSOauthPasswordGrantRequestsFailure.key = "OAuth Password Grant Request Failures",
252
.ADFSOauthTokenRequestsSuccess.key = "OAuth Token Requests",
253
254
// Requests
@@ -988,7 +988,7 @@ void netdata_adfs_oauth_password_grant_requests(
988
"authentications/s",
989
PLUGIN_WINDOWS_NAME,
990
"PerflibADFS",
991
- PRIO_ADFS_OAUTH_CLIENT_WINDOWS_AUTH,
991
+ PRIO_ADFS_OAUTH_TOKEN_REQUESTS_SUCCESS,
992
update_every,
993
RRDSET_TYPE_LINE);
994
@@ -1032,7 +1032,7 @@ void netdata_adfs_oauth_token_requests_success(
1032
"requests/s",
1033
PLUGIN_WINDOWS_NAME,
1034
"PerflibADFS",
1035
- PRIO_ADFS_OAUTH_TOKEN_REQUESTS_SUCCESS,
1035
+ PRIO_ADFS_OAUTH_CLIENT_CREDENTIAL_REQUEST,
1036
update_every,
1037
RRDSET_TYPE_LINE);
1038
src/collectors/windows.plugin/perflib-asp.c
+3
-3
@@ -505,7 +505,7 @@ static void netdata_aspnet_requests_executing(struct aspnet_app *aa, char *app,
505
rrddim_set_by_pointer(
506
aa->st_aspnet_requests_executing,
507
aa->rd_aspnet_requests_executing,
508
- (collected_number)aa->aspnetRequestsBytesTotalIn.current.Data);
508
+ (collected_number)aa->aspnetRequestsExecuting.current.Data);
509
rrdset_done(aa->st_aspnet_requests_executing);
510
}
511
@@ -999,10 +999,10 @@ static inline void netdata_aspnet_apps_transactions(
999
netdata_aspnet_transactions_committed(aa, windows_shared_buffer, update_every);
1000
1001
if (perflibGetObjectCounter(pDataBlock, pObjectType, &aa->aspnetTransactionsPending))
1002
- netdata_aspnet_transactions_aborted(aa, windows_shared_buffer, update_every);
1002
+ netdata_aspnet_transactions_pending(aa, windows_shared_buffer, update_every);
1003
1004
if (perflibGetObjectCounter(pDataBlock, pObjectType, &aa->aspnetTransactionsPerSec))
1005
- netdata_aspnet_transactions_aborted(aa, windows_shared_buffer, update_every);
1005
+ netdata_aspnet_transactions_per_sec(aa, windows_shared_buffer, update_every);
1006
}
1007
1008
static void netdata_aspnet_events_raised(struct aspnet_app *aa, char *app, int update_every)
src/collectors/windows.plugin/perflib-exchange.c
+12
-12
@@ -62,7 +62,7 @@ struct exchange_queue {
62
63
COUNTER_DATA exchangeTransportQueuesActiveMailboxDelivery;
64
COUNTER_DATA exchangeTransportQueuesExternalActiveRemoteDelivery;
65
- COUNTER_DATA exchangeTransportQueuesInternalActiveRemoteDeliery;
65
+ COUNTER_DATA exchangeTransportQueuesInternalActiveRemoteDelivery;
66
COUNTER_DATA exchangeTransportQueuesUnreachable;
67
COUNTER_DATA exchangeTransportQueuesPoison;
68
};
@@ -99,7 +99,7 @@ static void exchange_workload_initialize_variables(struct exchange_workload *ew)
99
}
100
101
static void
102
-dict_exchange_insert_worload_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused)
102
+dict_exchange_insert_workload_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused)
103
{
104
struct exchange_workload *ew = value;
105
@@ -110,7 +110,7 @@ static void exchange_queue_initialize_variables(struct exchange_queue *eq)
110
{
111
eq->exchangeTransportQueuesActiveMailboxDelivery.key = "Active Mailbox Delivery Queue Length";
112
eq->exchangeTransportQueuesExternalActiveRemoteDelivery.key = "External Active Remote Delivery Queue Length";
113
- eq->exchangeTransportQueuesInternalActiveRemoteDeliery.key = "Internal Active Remote Delivery Queue Length";
113
+ eq->exchangeTransportQueuesInternalActiveRemoteDelivery.key = "Internal Active Remote Delivery Queue Length";
114
eq->exchangeTransportQueuesPoison.key = "Poison Queue Length";
115
eq->exchangeTransportQueuesUnreachable.key = "Unreachable Queue Length";
116
}
@@ -131,7 +131,7 @@ static void initialize(void)
131
132
exchange_workloads = dictionary_create_advanced(
133
DICT_OPTION_DONT_OVERWRITE_VALUE | DICT_OPTION_FIXED_SIZE, NULL, sizeof(struct exchange_workload));
134
- dictionary_register_insert_callback(exchange_workloads, dict_exchange_insert_worload_cb, NULL);
134
+ dictionary_register_insert_callback(exchange_workloads, dict_exchange_insert_workload_cb, NULL);
135
136
exchange_queues = dictionary_create_advanced(
137
DICT_OPTION_DONT_OVERWRITE_VALUE | DICT_OPTION_FIXED_SIZE, NULL, sizeof(struct exchange_queue));
@@ -573,7 +573,7 @@ static void netdata_exchange_rpc(PERF_DATA_BLOCK *pDataBlock, PERF_OBJECT_TYPE *
573
netdata_exchange_rpc_requests(&exchangeRPCRequest, update_every);
574
575
if (perflibGetObjectCounter(pDataBlock, pObjectType, &exchangeRPCActiveUserCount))
576
- netdata_exchange_rpc_active_user_count(&exchangeRPCRequest, update_every);
576
+ netdata_exchange_rpc_active_user_count(&exchangeRPCActiveUserCount, update_every);
577
578
if (perflibGetObjectCounter(pDataBlock, pObjectType, &exchangeRPCConnectionCount))
579
netdata_exchange_rpc_connection_count(&exchangeRPCConnectionCount, update_every);
@@ -841,7 +841,7 @@ static void netdata_exchange_workload_active_tasks(struct exchange_workload *ew,
841
"tasks",
842
PLUGIN_WINDOWS_NAME,
843
"PerflibExchange",
844
- PRIO_EXCHANGE_WORKlOAD_ACTIVE_TASKS,
844
+ PRIO_EXCHANGE_WORKLOAD_ACTIVE_TASKS,
845
update_every,
846
RRDSET_TYPE_LINE);
847
@@ -874,7 +874,7 @@ static void netdata_exchange_workload_completed_tasks(struct exchange_workload *
874
"tasks/s",
875
PLUGIN_WINDOWS_NAME,
876
"PerflibExchange",
877
- PRIO_EXCHANGE_WORKlOAD_COMPLETE_TASKS,
877
+ PRIO_EXCHANGE_WORKLOAD_COMPLETE_TASKS,
878
update_every,
879
RRDSET_TYPE_LINE);
880
@@ -907,7 +907,7 @@ static void netdata_exchange_workload_queued_tasks(struct exchange_workload *ew,
907
"tasks/s",
908
PLUGIN_WINDOWS_NAME,
909
"PerflibExchange",
910
- PRIO_EXCHANGE_WORKlOAD_QUEUE_TASKS,
910
+ PRIO_EXCHANGE_WORKLOAD_QUEUE_TASKS,
911
update_every,
912
RRDSET_TYPE_LINE);
913
@@ -940,7 +940,7 @@ static void netdata_exchange_workload_yielded_tasks(struct exchange_workload *ew
940
"tasks/s",
941
PLUGIN_WINDOWS_NAME,
942
"PerflibExchange",
943
- PRIO_EXCHANGE_WORKlOAD_YIELDED_TASKS,
943
+ PRIO_EXCHANGE_WORKLOAD_YIELDED_TASKS,
944
update_every,
945
RRDSET_TYPE_LINE);
946
@@ -973,7 +973,7 @@ static void netdata_exchange_workload_activity_status(struct exchange_workload *
973
"status",
974
PLUGIN_WINDOWS_NAME,
975
"PerflibExchange",
976
- PRIO_EXCHANGE_WORKlOAD_ACTIVITY,
976
+ PRIO_EXCHANGE_WORKLOAD_ACTIVITY,
977
update_every,
978
RRDSET_TYPE_LINE);
979
@@ -1131,7 +1131,7 @@ static void netdata_exchange_queue_internal_active_remote_delivery(struct exchan
1131
rrddim_set_by_pointer(
1132
eq->st_exchange_queue_internal_active_remote_delivery,
1133
eq->rd_exchange_queue_internal_active_remote_delivery,
1134
- (collected_number)eq->exchangeTransportQueuesInternalActiveRemoteDeliery.current.Data);
1134
+ (collected_number)eq->exchangeTransportQueuesInternalActiveRemoteDelivery.current.Data);
1135
rrdset_done(eq->st_exchange_queue_internal_active_remote_delivery);
1136
}
1137
@@ -1230,7 +1230,7 @@ static void netdata_exchange_queues(PERF_DATA_BLOCK *pDataBlock, PERF_OBJECT_TYP
1230
if (perflibGetObjectCounter(pDataBlock, pObjectType, &eq->exchangeTransportQueuesExternalActiveRemoteDelivery))
1231
netdata_exchange_queue_external_active_remote_delivery(eq, windows_shared_buffer, update_every);
1232
1233
- if (perflibGetObjectCounter(pDataBlock, pObjectType, &eq->exchangeTransportQueuesInternalActiveRemoteDeliery))
1233
+ if (perflibGetObjectCounter(pDataBlock, pObjectType, &eq->exchangeTransportQueuesInternalActiveRemoteDelivery))
1234
netdata_exchange_queue_internal_active_remote_delivery(eq, windows_shared_buffer, update_every);
1235
1236
if (perflibGetObjectCounter(pDataBlock, pObjectType, &eq->exchangeTransportQueuesUnreachable))
src/collectors/windows.plugin/perflib-memory.c
+5
-11
@@ -42,11 +42,11 @@ void initialize_swap_keys(struct swap *p)
42
{
43
// SWAP Operations
44
p->pageReadsTotal.key = "Page Reads/sec";
45
- p->pageWritesTotal.key = "Page Writes/s";
45
+ p->pageWritesTotal.key = "Page Writes/sec";
46
47
// Swap Pages
48
p->pageInputTotal.key = "Pages Input/sec";
49
- p->pageOutputTotal.key = "Pages Output/s";
49
+ p->pageOutputTotal.key = "Pages Output/sec";
50
}
51
52
void initialize_pool_keys(struct system_pool *p)
@@ -75,9 +75,7 @@ static void do_memory_swap(PERF_DATA_BLOCK *pDataBlock, PERF_OBJECT_TYPE *pObjec
75
"swap_operations",
76
NULL,
77
"swap",
78
- "mem.swap_iops"
79
-
80
- ,
78
+ "mem.swap_iops",
79
"Swap Operations",
80
"operations/s",
81
PLUGIN_WINDOWS_NAME,
@@ -103,9 +101,7 @@ static void do_memory_swap(PERF_DATA_BLOCK *pDataBlock, PERF_OBJECT_TYPE *pObjec
101
"swap_pages",
102
NULL,
103
"swap",
106
- "mem.swap_pages_io"
107
-
108
- ,
104
+ "mem.swap_pages_io",
105
"Swap Pages",
106
"pages/s",
107
PLUGIN_WINDOWS_NAME,
@@ -137,9 +133,7 @@ static void do_memory_system_pool(PERF_DATA_BLOCK *pDataBlock, PERF_OBJECT_TYPE
133
"system_pool",
134
NULL,
135
"mem",
140
- "mem.system_pool_size"
141
-
142
- ,
136
+ "mem.system_pool_size",
137
"System Memory Pool",
138
"bytes",
139
PLUGIN_WINDOWS_NAME,
src/collectors/windows.plugin/perflib-netframework.c
+18
-18
@@ -1073,7 +1073,7 @@ static void netdata_framework_clr_remoting(PERF_DATA_BLOCK *pDataBlock, PERF_OBJ
1073
rrddim_set_by_pointer(
1074
p->st_clrremoting_remote_calls,
1075
p->rd_clrremoting_remote_calls,
1076
- (collected_number)p->NETFrameworkCLRRemotingContexts.current.Data);
1076
+ (collected_number)p->NETFrameworkCLRRemotingRemoteCalls.current.Data);
1077
rrdset_done(p->st_clrremoting_remote_calls);
1078
}
1079
}
@@ -1132,9 +1132,9 @@ static void netdata_framework_clr_security(PERF_DATA_BLOCK *pDataBlock, PERF_OBJ
1132
1133
if (perflibGetObjectCounter(pDataBlock, pObjectType, &p->NETFrameworkCLRSecurityPercentTimeinRTChecks) &&
1134
perflibGetObjectCounter(pDataBlock, pObjectType, &p->NETFrameworkCLRSecurityFrequency_PerfTime)) {
1135
- if (!p->st_clrsecurity_link_time_checks) {
1135
+ if (!p->st_clrsecurity_rt_checks_time) {
1136
snprintfz(id, RRD_ID_LENGTH_MAX, "%s_clrsecurity_checks_time", windows_shared_buffer);
1137
- p->st_clrsecurity_link_time_checks = rrdset_create_localhost(
1137
+ p->st_clrsecurity_rt_checks_time = rrdset_create_localhost(
1138
"netframework",
1139
id,
1140
NULL,
@@ -1150,21 +1150,21 @@ static void netdata_framework_clr_security(PERF_DATA_BLOCK *pDataBlock, PERF_OBJ
1150
1151
snprintfz(
1152
id, RRD_ID_LENGTH_MAX, "netframework_%s_clrsecurity_checks_time_percent", windows_shared_buffer);
1153
- p->rd_clrsecurity_link_time_checks =
1154
- rrddim_add(p->st_clrsecurity_link_time_checks, id, "time", 1, 100, RRD_ALGORITHM_ABSOLUTE);
1153
+ p->rd_clrsecurity_rt_checks_time =
1154
+ rrddim_add(p->st_clrsecurity_rt_checks_time, id, "time", 1, 100, RRD_ALGORITHM_ABSOLUTE);
1155
1156
rrdlabels_add(
1157
- p->st_clrsecurity_link_time_checks->rrdlabels, "process", windows_shared_buffer, RRDLABEL_SRC_AUTO);
1157
+ p->st_clrsecurity_rt_checks_time->rrdlabels, "process", windows_shared_buffer, RRDLABEL_SRC_AUTO);
1158
}
1159
1160
NETDATA_DOUBLE value = (NETDATA_DOUBLE)p->NETFrameworkCLRSecurityPercentTimeinRTChecks.current.Data;
1161
value /= (NETDATA_DOUBLE)p->NETFrameworkCLRSecurityFrequency_PerfTime.current.Data;
1162
1163
rrddim_set_by_pointer(
1164
- p->st_clrsecurity_link_time_checks,
1165
- p->rd_clrsecurity_link_time_checks,
1164
+ p->st_clrsecurity_rt_checks_time,
1165
+ p->rd_clrsecurity_rt_checks_time,
1166
(collected_number)(value * 100.0));
1167
- rrdset_done(p->st_clrsecurity_link_time_checks);
1167
+ rrdset_done(p->st_clrsecurity_rt_checks_time);
1168
}
1169
1170
if (perflibGetObjectCounter(pDataBlock, pObjectType, &p->NETFrameworkCLRSecurityStackWalkDepth)) {
@@ -1200,9 +1200,9 @@ static void netdata_framework_clr_security(PERF_DATA_BLOCK *pDataBlock, PERF_OBJ
1200
}
1201
1202
if (perflibGetObjectCounter(pDataBlock, pObjectType, &p->NETFrameworkCLRSecurityRunTimeChecks)) {
1203
- if (!p->st_clrsecurity_stack_walk_depth) {
1203
+ if (!p->st_clrsecurity_run_time_checks) {
1204
snprintfz(id, RRD_ID_LENGTH_MAX, "%s_clrsecurity_runtime_checks", windows_shared_buffer);
1205
- p->st_clrsecurity_stack_walk_depth = rrdset_create_localhost(
1205
+ p->st_clrsecurity_run_time_checks = rrdset_create_localhost(
1206
"netframework",
1207
id,
1208
NULL,
@@ -1218,18 +1218,18 @@ static void netdata_framework_clr_security(PERF_DATA_BLOCK *pDataBlock, PERF_OBJ
1218
1219
snprintfz(
1220
id, RRD_ID_LENGTH_MAX, "netframework_%s_clrsecurity_runtime_checks_total", windows_shared_buffer);
1221
- p->rd_clrsecurity_stack_walk_depth =
1222
- rrddim_add(p->st_clrsecurity_stack_walk_depth, id, "runtime", 1, 1, RRD_ALGORITHM_INCREMENTAL);
1221
+ p->rd_clrsecurity_run_time_checks =
1222
+ rrddim_add(p->st_clrsecurity_run_time_checks, id, "runtime", 1, 1, RRD_ALGORITHM_INCREMENTAL);
1223
1224
rrdlabels_add(
1225
- p->st_clrsecurity_stack_walk_depth->rrdlabels, "process", windows_shared_buffer, RRDLABEL_SRC_AUTO);
1225
+ p->st_clrsecurity_run_time_checks->rrdlabels, "process", windows_shared_buffer, RRDLABEL_SRC_AUTO);
1226
}
1227
1228
rrddim_set_by_pointer(
1229
- p->st_clrsecurity_stack_walk_depth,
1230
- p->rd_clrsecurity_stack_walk_depth,
1229
+ p->st_clrsecurity_run_time_checks,
1230
+ p->rd_clrsecurity_run_time_checks,
1231
(collected_number)p->NETFrameworkCLRSecurityRunTimeChecks.current.Data);
1232
- rrdset_done(p->st_clrsecurity_stack_walk_depth);
1232
+ rrdset_done(p->st_clrsecurity_run_time_checks);
1233
}
1234
}
1235
}
@@ -1273,7 +1273,7 @@ netdata_framework_clr_locks_and_threads(PERF_DATA_BLOCK *pDataBlock, PERF_OBJECT
1273
snprintfz(
1274
id,
1275
RRD_ID_LENGTH_MAX,
1276
- "netframework_%s_clrlocksandthreads_recognized_threads_total",
1276
+ "netframework_%s_clrlocksandthreads_queue_length_total",
1277
windows_shared_buffer);
1278
p->rd_locksandthreads_queue_length =
1279
rrddim_add(p->st_clrlocksandthreads_queue_length, id, "threads", 1, 1, RRD_ALGORITHM_INCREMENTAL);
src/collectors/windows.plugin/perflib-network.c
+2
-2
@@ -271,7 +271,7 @@ struct network_protocol {
271
.packets =
272
{
273
.InEchoReps = {.key = "Received Echo Reply/sec"},
274
- .OutEchoReps = {.key = "Received Echo Reply/sec"},
274
+ .OutEchoReps = {.key = "Sent Echo Reply/sec"},
275
.InDestUnreachs = {.key = "Received Dest. Unreachable"},
276
.OutDestUnreachs = {.key = "Sent Destination Unreachable"},
277
.InRedirects = {.key = "Received Redirect/sec"},
@@ -304,7 +304,7 @@ struct network_protocol {
304
.packets =
305
{
306
.InEchoReps = {.key = "Received Echo Reply/sec"},
307
- .OutEchoReps = {.key = "Received Echo Reply/sec"},
307
+ .OutEchoReps = {.key = "Sent Echo Reply/sec"},
308
.InDestUnreachs = {.key = "Received Dest. Unreachable"},
309
.OutDestUnreachs = {.key = "Sent Destination Unreachable"},
310
.InRedirects = {.key = "Received Redirect/sec"},
src/collectors/windows.plugin/perflib-numa.c
+5
-5
@@ -37,7 +37,7 @@ static void netdata_numa_chart(struct netdata_numa *nn, int update_every)
37
{
38
if (unlikely(!nn->st_numa)) {
39
char id[RRD_ID_LENGTH_MAX + 1];
40
- snprintfz(id, RRD_ID_LENGTH_MAX, "numae_node_%s_mem_usage", windows_shared_buffer);
40
+ snprintfz(id, RRD_ID_LENGTH_MAX, "numa_node_%s_mem_usage", windows_shared_buffer);
41
42
nn->st_numa = rrdset_create_localhost(
43
"numa_node_mem_usage",
@@ -91,10 +91,10 @@ static bool do_numa(PERF_DATA_BLOCK *pDataBlock, int update_every)
91
92
struct netdata_numa *nn = dictionary_set(numa_dict, windows_shared_buffer, NULL, sizeof(*nn));
93
94
- if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &nn->standby) ||
95
- perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &nn->available) ||
96
- perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &nn->free_zero))
97
- netdata_numa_chart(nn, update_every);
94
+ perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &nn->standby);
95
+ perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &nn->available);
96
+ perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &nn->free_zero);
97
+ netdata_numa_chart(nn, update_every);
98
}
99
100
return true;
src/collectors/windows.plugin/perflib-objects.c
+4
-3
@@ -21,8 +21,8 @@ static bool do_objects(PERF_DATA_BLOCK *pDataBlock, int update_every)
21
static COUNTER_DATA semaphores = {.key = "Semaphores"};
22
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);
24
+ ULONGLONG sem = (ULONGLONG)semaphores.current.Data;
25
+ common_semaphore_ipc(sem, (NETDATA_DOUBLE)WINDOWS_MAX_KERNEL_OBJECT, _COMMON_PLUGIN_MODULE_NAME, update_every);
26
}
27
28
return true;
@@ -45,7 +45,8 @@ int do_PerflibObjects(int update_every, usec_t dt __maybe_unused)
45
if (!pDataBlock)
46
return -1;
47
48
- do_objects(pDataBlock, update_every);
48
+ if (!do_objects(pDataBlock, update_every))
49
+ return -1;
50
51
return 0;
52
}
src/collectors/windows.plugin/perflib-processes.c
-12
@@ -7,11 +7,6 @@
7
#define _COMMON_PLUGIN_MODULE_NAME "PerflibProcesses"
8
#include "../common-contexts/common-contexts.h"
9
10
-static void initialize(void)
11
-{
12
- ;
13
-}
14
-
10
static void do_processor_queue(PERF_DATA_BLOCK *pDataBlock, PERF_OBJECT_TYPE *pObjectType, int update_every)
11
{
12
static RRDSET *st_queue = NULL;
@@ -74,13 +69,6 @@ static bool do_processes(PERF_DATA_BLOCK *pDataBlock, int update_every)
69
70
int do_PerflibProcesses(int update_every, usec_t dt __maybe_unused)
71
{
77
- static bool initialized = false;
78
-
79
- if (unlikely(!initialized)) {
80
- initialize();
81
- initialized = true;
82
- }
83
-
72
DWORD id = RegistryFindIDByName("System");
73
if (id == PERFLIB_REGISTRY_NAME_NOT_FOUND)
74
return -1;
src/collectors/windows.plugin/perflib-storage.c
+2
-2
@@ -176,7 +176,7 @@ static STRING *getFileSystemType(struct logical_disk *d, const char *diskName)
176
177
char fileSystemNameBuffer[128] = {0}; // Buffer for file system name
178
char pathBuffer[260] = {0}; // Path buffer to accommodate different formats
179
- char volumeName[260] = {0};
179
+ char volumeName[260 + 1] = {0};
180
DWORD serialNumber = 0;
181
DWORD maxComponentLength = 0;
182
DWORD fileSystemFlags = 0;
@@ -195,7 +195,7 @@ static STRING *getFileSystemType(struct logical_disk *d, const char *diskName)
195
success = GetVolumeInformationA(
196
pathBuffer, // Path to the disk
197
volumeName, // Volume name buffer
198
- 259, // Size of volume name bufferr
198
+ 260, // Size of volume name buffer
199
&serialNumber, // Volume serial number
200
&maxComponentLength, // Maximum component length
201
&fileSystemFlags, // File system flags
src/collectors/windows.plugin/perflib-web-service.c
+27
-27
@@ -36,8 +36,8 @@ struct web_service {
36
RRDSET *st_curr_connections;
37
RRDDIM *rd_curr_connections;
38
39
- RRDSET *st_connections_attemps;
40
- RRDDIM *rd_connections_attemps;
39
+ RRDSET *st_connections_attempts;
40
+ RRDDIM *rd_connections_attempts;
41
42
RRDSET *st_user_count;
43
RRDDIM *rd_user_anonymous;
@@ -53,8 +53,8 @@ struct web_service {
53
RRDDIM *rd_error_rate_locked;
54
RRDDIM *rd_error_rate_not_found;
55
56
- RRDSET *st_logon_attemps;
57
- RRDDIM *rd_logon_attemps;
56
+ RRDSET *st_logon_attempts;
57
+ RRDDIM *rd_logon_attempts;
58
59
RRDSET *st_service_uptime;
60
RRDDIM *rd_service_uptime;
@@ -440,7 +440,7 @@ static inline void netdata_webservice_active_connection(
440
}
441
}
442
443
-static inline void netdata_webservice_connection_attemp_rate(
443
+static inline void netdata_webservice_connection_attempt_rate(
444
PERF_DATA_BLOCK *pDataBlock,
445
PERF_OBJECT_TYPE *pObjectType,
446
PERF_INSTANCE_DEFINITION *pi,
@@ -448,11 +448,11 @@ static inline void netdata_webservice_connection_attemp_rate(
448
int update_every)
449
{
450
if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &p->IISConnAttemptsAllInstancesTotal)) {
451
- if (!p->st_connections_attemps) {
451
+ if (!p->st_connections_attempts) {
452
char id[RRD_ID_LENGTH_MAX + 1];
453
snprintfz(id, RRD_ID_LENGTH_MAX, "website_%s_connection_attempts_rate", windows_shared_buffer);
454
netdata_fix_chart_name(id);
455
- p->st_connections_attemps = rrdset_create_localhost(
455
+ p->st_connections_attempts = rrdset_create_localhost(
456
"iis",
457
id,
458
NULL,
@@ -462,22 +462,22 @@ static inline void netdata_webservice_connection_attemp_rate(
462
"attempts/s",
463
PLUGIN_WINDOWS_NAME,
464
"PerflibWebService",
465
- PRIO_WEBSITE_IIS_CONNECTIONS_ATTEMP,
465
+ PRIO_WEBSITE_IIS_CONNECTIONS_ATTEMPT,
466
update_every,
467
RRDSET_TYPE_LINE);
468
469
- p->rd_connections_attemps =
470
- rrddim_add(p->st_connections_attemps, "connection", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
469
+ p->rd_connections_attempts =
470
+ rrddim_add(p->st_connections_attempts, "connection", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
471
472
- rrdlabels_add(p->st_connections_attemps->rrdlabels, "website", windows_shared_buffer, RRDLABEL_SRC_AUTO);
472
+ rrdlabels_add(p->st_connections_attempts->rrdlabels, "website", windows_shared_buffer, RRDLABEL_SRC_AUTO);
473
}
474
475
rrddim_set_by_pointer(
476
- p->st_connections_attemps,
477
- p->rd_connections_attemps,
478
- (collected_number)p->IISCurrentConnections.current.Data);
476
+ p->st_connections_attempts,
477
+ p->rd_connections_attempts,
478
+ (collected_number)p->IISConnAttemptsAllInstancesTotal.current.Data);
479
480
- rrdset_done(p->st_connections_attemps);
480
+ rrdset_done(p->st_connections_attempts);
481
}
482
}
483
@@ -653,7 +653,7 @@ static inline void netdata_webservice_errors_rate(
653
}
654
}
655
656
-static inline void netdata_webservice_logon_attemp_rate(
656
+static inline void netdata_webservice_logon_attempt_rate(
657
PERF_DATA_BLOCK *pDataBlock,
658
PERF_OBJECT_TYPE *pObjectType,
659
PERF_INSTANCE_DEFINITION *pi,
@@ -661,11 +661,11 @@ static inline void netdata_webservice_logon_attemp_rate(
661
int update_every)
662
{
663
if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &p->IISLogonAttemptsTotal)) {
664
- if (!p->st_logon_attemps) {
664
+ if (!p->st_logon_attempts) {
665
char id[RRD_ID_LENGTH_MAX + 1];
666
snprintfz(id, RRD_ID_LENGTH_MAX, "website_%s_logon_attempts_rate", windows_shared_buffer);
667
netdata_fix_chart_name(id);
668
- p->st_logon_attemps = rrdset_create_localhost(
668
+ p->st_logon_attempts = rrdset_create_localhost(
669
"iis",
670
id,
671
NULL,
@@ -679,15 +679,15 @@ static inline void netdata_webservice_logon_attemp_rate(
679
update_every,
680
RRDSET_TYPE_LINE);
681
682
- p->rd_logon_attemps = rrddim_add(p->st_logon_attemps, "logon", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
682
+ p->rd_logon_attempts = rrddim_add(p->st_logon_attempts, "logon", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
683
684
- rrdlabels_add(p->st_logon_attemps->rrdlabels, "website", windows_shared_buffer, RRDLABEL_SRC_AUTO);
684
+ rrdlabels_add(p->st_logon_attempts->rrdlabels, "website", windows_shared_buffer, RRDLABEL_SRC_AUTO);
685
}
686
687
rrddim_set_by_pointer(
688
- p->st_logon_attemps, p->rd_logon_attemps, (collected_number)p->IISLogonAttemptsTotal.current.Data);
688
+ p->st_logon_attempts, p->rd_logon_attempts, (collected_number)p->IISLogonAttemptsTotal.current.Data);
689
690
- rrdset_done(p->st_logon_attemps);
690
+ rrdset_done(p->st_logon_attempts);
691
}
692
}
693
@@ -907,12 +907,12 @@ static bool do_web_services(PERF_DATA_BLOCK *pDataBlock, int update_every)
907
netdata_webservice_traffic(pDataBlock, pObjectType, pi, p, update_every);
908
netdata_webservice_file_transfer_rate(pDataBlock, pObjectType, pi, p, update_every);
909
netdata_webservice_active_connection(pDataBlock, pObjectType, pi, p, update_every);
910
- netdata_webservice_connection_attemp_rate(pDataBlock, pObjectType, pi, p, update_every);
910
+ netdata_webservice_connection_attempt_rate(pDataBlock, pObjectType, pi, p, update_every);
911
netdata_webservice_user_count(pDataBlock, pObjectType, pi, p, update_every);
912
netdata_webservice_isapi_extension_request_count(pDataBlock, pObjectType, pi, p, update_every);
913
netdata_webservice_isapi_extension_request_rate(pDataBlock, pObjectType, pi, p, update_every);
914
netdata_webservice_errors_rate(pDataBlock, pObjectType, pi, p, update_every);
915
- netdata_webservice_logon_attemp_rate(pDataBlock, pObjectType, pi, p, update_every);
915
+ netdata_webservice_logon_attempt_rate(pDataBlock, pObjectType, pi, p, update_every);
916
netdata_webservice_uptime(pDataBlock, pObjectType, pi, p, update_every);
917
netdata_webservice_requests(pDataBlock, pObjectType, pi, p, update_every);
918
}
@@ -1176,7 +1176,7 @@ static inline void app_pool_recycles(
1176
}
1177
}
1178
1179
-static inline void app_pool_upime(
1179
+static inline void app_pool_uptime(
1180
struct iis_app *p,
1181
PERF_DATA_BLOCK *pDataBlock,
1182
PERF_OBJECT_TYPE *pObjectType,
@@ -1357,7 +1357,7 @@ static bool do_app_pool(PERF_DATA_BLOCK *pDataBlock, int update_every)
1357
app_pool_worker_process_failures(p, pDataBlock, pObjectType, pi, update_every);
1358
1359
app_pool_recycles(p, pDataBlock, pObjectType, pi, update_every);
1360
- app_pool_upime(p, pDataBlock, pObjectType, pi, update_every);
1360
+ app_pool_uptime(p, pDataBlock, pObjectType, pi, update_every);
1361
}
1362
1363
return true;
@@ -1511,7 +1511,7 @@ static inline void w3svc_w3wp_file_cache_mem_usage(
1511
if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &p->WESCVW3WPFileCacheMemUsage)) {
1512
if (!p->st_wescv_w3wp_file_cache_mem_usage) {
1513
char id[RRD_ID_LENGTH_MAX + 1];
1514
- snprintfz(id, RRD_ID_LENGTH_MAX, "w3svc_w3wp_%s_file_cache_mem_usage", windows_shared_buffer);
1514
+ snprintfz(id, RRD_ID_LENGTH_MAX, "w3svc_w3wp_%s_file_cache_mem_usage", app_name);
1515
netdata_fix_chart_name(id);
1516
p->st_wescv_w3wp_file_cache_mem_usage = rrdset_create_localhost(
1517
"iis",
src/collectors/windows.plugin/windows_plugin.h
+6
-6
@@ -72,7 +72,7 @@ enum PERFLIB_PRIO {
72
PRIO_WEBSITE_IIS_TRAFFIC,
73
PRIO_WEBSITE_IIS_FTP_FILE_TRANSFER_RATE,
74
PRIO_WEBSITE_IIS_ACTIVE_CONNECTIONS_COUNT,
75
- PRIO_WEBSITE_IIS_CONNECTIONS_ATTEMP,
75
+ PRIO_WEBSITE_IIS_CONNECTIONS_ATTEMPT,
76
PRIO_WEBSITE_IIS_USERS,
77
PRIO_WEBSITE_IIS_ISAPI_EXT_REQUEST_COUNT,
78
PRIO_WEBSITE_IIS_ISAPI_EXT_REQUEST_RATE,
@@ -287,11 +287,11 @@ enum PERFLIB_PRIO {
287
PRIO_EXCHANGE_RPC_USER_COUNT,
288
PRIO_EXCHANGE_OWA_REQUESTS_TOTAL,
289
PRIO_EXCHANGE_OWA_UNIQUE_USERS,
290
- PRIO_EXCHANGE_WORKlOAD_ACTIVE_TASKS,
291
- PRIO_EXCHANGE_WORKlOAD_COMPLETE_TASKS,
292
- PRIO_EXCHANGE_WORKlOAD_QUEUE_TASKS,
293
- PRIO_EXCHANGE_WORKlOAD_YIELDED_TASKS,
294
- PRIO_EXCHANGE_WORKlOAD_ACTIVITY,
290
+ PRIO_EXCHANGE_WORKLOAD_ACTIVE_TASKS,
291
+ PRIO_EXCHANGE_WORKLOAD_COMPLETE_TASKS,
292
+ PRIO_EXCHANGE_WORKLOAD_QUEUE_TASKS,
293
+ PRIO_EXCHANGE_WORKLOAD_YIELDED_TASKS,
294
+ PRIO_EXCHANGE_WORKLOAD_ACTIVITY,
295
PRIO_EXCHANGE_PROXY_AVG_AUTH_LATENCY,
296
PRIO_EXCHANGE_PROXY_AVG_CAS_PROCESSING_LATENCY,
297
PRIO_EXCHANGE_PROXY_MAILBOX_PROXY_FAILURE,