Windows storage fixes (#18880)
* fix gaps on windows storage charts * removed obsolete labels
Costa Tsaousis committed
Oct 27, 2024 at 20:33 UTC
d6d7b9389931069532fbe2db506fa5ea4b7015fb
2 files changed
+67
-72
src/collectors/windows.plugin/perflib-storage.c
+66
-71
@@ -311,17 +311,17 @@ static void physical_disk_labels(RRDSET *st, void *data) {
311
if (d->mount_point)
312
rrdlabels_add(st->rrdlabels, "mount_point", string2str(d->mount_point), RRDLABEL_SRC_AUTO);
313
314
- if (d->manufacturer)
315
- rrdlabels_add(st->rrdlabels, "manufacturer", string2str(d->manufacturer), RRDLABEL_SRC_AUTO);
314
+// if (d->manufacturer)
315
+// rrdlabels_add(st->rrdlabels, "manufacturer", string2str(d->manufacturer), RRDLABEL_SRC_AUTO);
316
317
if (d->model)
318
rrdlabels_add(st->rrdlabels, "model", string2str(d->model), RRDLABEL_SRC_AUTO);
319
320
- if (d->media_type)
321
- rrdlabels_add(st->rrdlabels, "media_type", string2str(d->media_type), RRDLABEL_SRC_AUTO);
320
+// if (d->media_type)
321
+// rrdlabels_add(st->rrdlabels, "media_type", string2str(d->media_type), RRDLABEL_SRC_AUTO);
322
323
- if (d->name)
324
- rrdlabels_add(st->rrdlabels, "name", string2str(d->name), RRDLABEL_SRC_AUTO);
323
+// if (d->name)
324
+// rrdlabels_add(st->rrdlabels, "name", string2str(d->name), RRDLABEL_SRC_AUTO);
325
326
if (d->device_id)
327
rrdlabels_add(st->rrdlabels, "device_id", string2str(d->device_id), RRDLABEL_SRC_AUTO);
@@ -333,34 +333,48 @@ static bool str_is_numeric(const char *s) {
333
}
334
335
static inline double perflib_average_timer_ms(COUNTER_DATA *d) {
336
+ if(!d->updated) return 0.0;
337
+
338
ULONGLONG data1 = d->current.Data;
339
ULONGLONG data0 = d->previous.Data;
340
LONGLONG time1 = d->current.Time;
341
LONGLONG time0 = d->previous.Time;
342
LONGLONG freq1 = d->current.Frequency;
343
342
- LONGLONG dt = (time1 - time0);
343
- if(dt > 0)
344
- return ((double)(data1 - data0) / (double)(freq1 / MSEC_PER_SEC)) / dt;
345
- else
346
- return 0;
344
+ if(data1 >= data0 && time1 > time0 && time0 && freq1)
345
+ return ((double)(data1 - data0) / (double)(freq1 / MSEC_PER_SEC)) / (double)(time1 - time0);
346
+
347
+ return 0;
348
}
349
350
static inline uint64_t perflib_average_bulk(COUNTER_DATA *d) {
351
+ if(!d->updated) return 0;
352
+
353
ULONGLONG data1 = d->current.Data;
354
ULONGLONG data0 = d->previous.Data;
355
LONGLONG time1 = d->current.Time;
356
LONGLONG time0 = d->previous.Time;
357
355
- LONGLONG dt = (time1 - time0);
356
- if(dt > 0)
357
- return (data1 - data0) / dt;
358
- else
359
- return 0;
358
+ if(data1 >= data0 && time1 > time0 && time0)
359
+ return (data1 - data0) / (time1 - time0);
360
+
361
+ return 0;
362
}
363
362
-static inline bool perflib_previous_is_set(COUNTER_DATA *d) {
363
- return d->updated && d->previous.Data && d->previous.Time && d->current.Time > d->previous.Time;
364
+static inline uint64_t perflib_idle_time_percent(COUNTER_DATA *d) {
365
+ if(!d->updated) return 0.0;
366
+
367
+ ULONGLONG data1 = d->current.Data;
368
+ ULONGLONG data0 = d->previous.Data;
369
+ LONGLONG time1 = d->current.Time;
370
+ LONGLONG time0 = d->previous.Time;
371
+
372
+ if(data1 >= data0 && time1 > time0 && time0) {
373
+ uint64_t pcent = 100 * (data1 - data0) / (time1 - time0);
374
+ return pcent > 100 ? 100 : pcent;
375
+ }
376
+
377
+ return 0;
378
}
379
380
#define MAX_WMI_DRIVES 100
@@ -467,23 +481,14 @@ static bool do_physical_disk(PERF_DATA_BLOCK *pDataBlock, int update_every, usec
481
}
482
483
if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->percentIdleTime)) {
470
- if (perflib_previous_is_set(&d->percentIdleTime)) {
471
- collected_number idle_percentage =
472
- 100 * (d->percentIdleTime.current.Data - d->percentIdleTime.previous.Data)
473
- / (d->percentIdleTime.current.Time - d->percentIdleTime.previous.Time);
474
-
475
- if (idle_percentage > 100)
476
- idle_percentage = 100;
477
-
478
- common_disk_util(
479
- &d->disk_util,
480
- device,
481
- NULL,
482
- 100 - idle_percentage,
483
- update_every,
484
- physical_disk_labels,
485
- d);
486
- }
484
+ 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);
492
}
493
494
if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->percentDiskTime)) {
@@ -525,50 +530,40 @@ static bool do_physical_disk(PERF_DATA_BLOCK *pDataBlock, int update_every, usec
530
if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->averageDiskSecondsPerRead) &&
531
perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->averageDiskSecondsPerWrite)) {
532
528
- if (perflib_previous_is_set(&d->averageDiskSecondsPerRead) &&
529
- perflib_previous_is_set(&d->averageDiskSecondsPerWrite)) {
530
-
531
- common_disk_await(
532
- &d->disk_await,
533
- device,
534
- NULL,
535
- perflib_average_timer_ms(&d->averageDiskSecondsPerRead),
536
- perflib_average_timer_ms(&d->averageDiskSecondsPerWrite),
537
- update_every,
538
- physical_disk_labels,
539
- d);
540
- }
533
+ 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);
542
}
543
544
if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->averageDiskSecondsPerTransfer)) {
544
- if (perflib_previous_is_set(&d->averageDiskSecondsPerTransfer)) {
545
- 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);
553
- }
545
+ 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);
553
}
554
555
if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->averageDiskBytesPerRead) &&
556
perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->averageDiskBytesPerWrite)) {
557
559
- if (perflib_previous_is_set(&d->averageDiskBytesPerRead) &&
560
- perflib_previous_is_set(&d->averageDiskBytesPerWrite)) {
561
-
562
- common_disk_avgsz(
563
- &d->disk_avgsz,
564
- device,
565
- NULL,
566
- perflib_average_bulk(&d->averageDiskBytesPerRead),
567
- perflib_average_bulk(&d->averageDiskBytesPerWrite),
568
- update_every,
569
- physical_disk_labels,
570
- d);
571
- }
558
+ 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);
567
}
568
569
if(perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->splitIoPerSec)) {
src/collectors/windows.plugin/windows-internals.h
+1
-1
@@ -3,7 +3,7 @@
3
#ifndef NETDATA_WINDOWS_INTERNALS_H
4
#define NETDATA_WINDOWS_INTERNALS_H
5
6
-#include "libnetdata/common.h"
6
+#include "libnetdata/libnetdata.h"
7
8
static inline ULONGLONG FileTimeToULL(FILETIME ft) {
9
ULARGE_INTEGER ul;