X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fdisk.c;h=c0408cecce76a6891e394bf96a00e308942ebe13;hb=009c673408d3e05f8604b3fb818cf3358f984be3;hp=206862baab4ebea4cfa809a7e4e57774e7be5a5a;hpb=06a86a60a7dabc685bdbd81ce3d36ea5f7e2c2d4;p=collectd.git diff --git a/src/disk.c b/src/disk.c index 206862ba..c0408cec 100644 --- a/src/disk.c +++ b/src/disk.c @@ -303,9 +303,7 @@ static void submit_io_time(char const *plugin_instance, derive_t io_time, plugin_dispatch_values(&vl); } /* void submit_io_time */ -#endif /* KERNEL_FREEBSD || KERNEL_LINUX */ -#if KERNEL_LINUX static void submit_in_progress(char const *disk_name, gauge_t in_progress) { value_list_t vl = VALUE_LIST_INIT; @@ -317,7 +315,9 @@ static void submit_in_progress(char const *disk_name, gauge_t in_progress) { plugin_dispatch_values(&vl); } +#endif /* KERNEL_FREEBSD || KERNEL_LINUX */ +#if KERNEL_LINUX static counter_t disk_calc_time_incr(counter_t delta_time, counter_t delta_ops) { double interval = CDTIME_T_TO_DOUBLE(plugin_get_interval()); @@ -544,6 +544,7 @@ static int disk_read(void) { const char *disk_name; long double read_time, write_time, busy_time, total_duration; + uint64_t queue_length; for (retry = 0, dirty = 1; retry < 5 && dirty == 1; retry++) { if (snap != NULL) @@ -646,10 +647,12 @@ static int disk_read(void) { } if (devstat_compute_statistics(snap_iter, NULL, 1.0, DSM_TOTAL_BUSY_TIME, &busy_time, DSM_TOTAL_DURATION, - &total_duration, DSM_NONE) != 0) { + &total_duration, DSM_QUEUE_LENGTH, + &queue_length, DSM_NONE) != 0) { WARNING("%s", devstat_errbuf); } else { submit_io_time(disk_name, busy_time, total_duration); + submit_in_progress(disk_name, (gauge_t)queue_length); } } geom_stats_snapshot_free(snap); @@ -660,7 +663,6 @@ static int disk_read(void) { char *fields[32]; int numfields; - int fieldshift = 0; int minor = 0; @@ -681,14 +683,8 @@ static int disk_read(void) { diskstats_t *ds, *pre_ds; if ((fh = fopen("/proc/diskstats", "r")) == NULL) { - fh = fopen("/proc/partitions", "r"); - if (fh == NULL) { - ERROR("disk plugin: fopen (/proc/{diskstats,partitions}) failed."); - return -1; - } - - /* Kernel is 2.4.* */ - fieldshift = 1; + ERROR("disk plugin: fopen(\"/proc/diskstats\"): %s", STRERRNO); + return -1; } while (fgets(buffer, sizeof(buffer), fh) != NULL) { @@ -696,13 +692,12 @@ static int disk_read(void) { char *output_name; numfields = strsplit(buffer, fields, 32); - - if ((numfields != (14 + fieldshift)) && (numfields != 7)) + if ((numfields != 14) && (numfields != 7)) continue; minor = atoll(fields[1]); - disk_name = fields[2 + fieldshift]; + disk_name = fields[2]; for (ds = disklist, pre_ds = disklist; ds != NULL; pre_ds = ds, ds = ds->next) @@ -731,24 +726,24 @@ static int disk_read(void) { read_sectors = atoll(fields[4]); write_ops = atoll(fields[5]); write_sectors = atoll(fields[6]); - } else if (numfields == (14 + fieldshift)) { - read_ops = atoll(fields[3 + fieldshift]); - write_ops = atoll(fields[7 + fieldshift]); + } else if (numfields == 14) { + read_ops = atoll(fields[3]); + write_ops = atoll(fields[7]); - read_sectors = atoll(fields[5 + fieldshift]); - write_sectors = atoll(fields[9 + fieldshift]); + read_sectors = atoll(fields[5]); + write_sectors = atoll(fields[9]); - if ((fieldshift == 0) || (minor == 0)) { + if (minor == 0) { is_disk = 1; - read_merged = atoll(fields[4 + fieldshift]); - read_time = atoll(fields[6 + fieldshift]); - write_merged = atoll(fields[8 + fieldshift]); - write_time = atoll(fields[10 + fieldshift]); + read_merged = atoll(fields[4]); + read_time = atoll(fields[6]); + write_merged = atoll(fields[8]); + write_time = atoll(fields[10]); - in_progress = atof(fields[11 + fieldshift]); + in_progress = atof(fields[11]); - io_time = atof(fields[12 + fieldshift]); - weighted_time = atof(fields[13 + fieldshift]); + io_time = atof(fields[12]); + weighted_time = atof(fields[13]); } } else { DEBUG("numfields = %i; => unknown file format.", numfields);