]> git.ipfire.org Git - thirdparty/collectd.git/commitdiff
disk plugin: Add `system.disk.io_time`, `system.disk.weighted_io_time`, and `system...
authorFlorian Forster <octo@collectd.org>
Mon, 22 Jan 2024 16:00:35 +0000 (17:00 +0100)
committerFlorian Forster <octo@collectd.org>
Mon, 22 Jan 2024 18:28:50 +0000 (19:28 +0100)
src/disk.c

index 545e16e70a9802d2d16621df2fa9ace385fa21b3..a435cc01e85a39a78ba4072177fdffc0613ea6d4 100644 (file)
@@ -1049,16 +1049,12 @@ static int disk_read(void) {
 #define KIO_WOCTETS writes
 #define KIO_ROPS nreads
 #define KIO_WOPS nwrites
-#define KIO_RTIME rtime
-#define KIO_WTIME wtime
 #elif HAVE_KSTAT_IO_T_NWRITTEN && HAVE_KSTAT_IO_T_WRITES &&                    \
     HAVE_KSTAT_IO_T_WTIME
 #define KIO_ROCTETS nread
 #define KIO_WOCTETS nwritten
 #define KIO_ROPS reads
 #define KIO_WOPS writes
-#define KIO_RTIME rtime
-#define KIO_WTIME wtime
 #else
 #error "kstat_io_t does not have the required members"
 #endif
@@ -1092,6 +1088,21 @@ static int disk_read(void) {
     metric_family_append(&fam_ops, direction_label, write_direction,
                          (value_t){.counter = kio.KIO_WOPS}, &m);
 
+    if (strncmp(ksp[i]->ks_class, "disk", strlen("disk")) == 0) {
+      hrtime_t run_time_ns = kio.rtime;
+      m.value.derive = (derive_t)(run_time_ns / 1000);
+      metric_family_metric_append(&fam_disk_io_time, m);
+
+      hrtime_t weighted_io_time_ns = kio.rlentime;
+      m.value.derive = (derive_t)(weighted_io_time_ns / 1000000);
+      metric_family_metric_append(&fam_disk_io_weighted_time, m);
+
+      uint_t ops_waiting = kio.wcnt;
+      uint_t ops_running = kio.rcnt;
+      m.value.gauge = (gauge_t)(ops_running + ops_waiting);
+      metric_family_metric_append(&fam_disk_pending_operations, m);
+    }
+
     metric_reset(&m);
   }
   /* #endif defined(HAVE_LIBKSTAT) */