@cryptotaxi247 / netdata-1 / commits / d6d7b9389

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;