diff --git a/include/sigar.h b/include/sigar.h index 5355b87d..e52bfa47 100644 --- a/include/sigar.h +++ b/include/sigar.h @@ -432,22 +432,26 @@ SIGAR_DECLARE(int) sigar_file_system_list_destroy(sigar_t *sigar, sigar_file_system_list_t *fslist); -#define SIGAR_DISK_USAGE_T \ - sigar_uint64_t disk_reads; \ - sigar_uint64_t disk_writes; \ - sigar_uint64_t disk_write_bytes; \ - sigar_uint64_t disk_read_bytes; \ - sigar_uint64_t disk_queue; \ - sigar_uint64_t disk_rtime; \ - sigar_uint64_t disk_wtime; \ - sigar_uint64_t disk_time - typedef struct { - SIGAR_DISK_USAGE_T; + sigar_uint64_t reads; + sigar_uint64_t writes; + sigar_uint64_t write_bytes; + sigar_uint64_t read_bytes; + sigar_uint64_t queue; + sigar_uint64_t rtime; + sigar_uint64_t wtime; + sigar_uint64_t time; } sigar_disk_usage_t; +/* XXX for sigar_file_system_usage_t compat */ +#define disk_reads disk.reads +#define disk_writes disk.writes +#define disk_write_bytes disk.write_bytes +#define disk_read_bytes disk.read_bytes +#define disk_queue disk.queue + typedef struct { - SIGAR_DISK_USAGE_T; + sigar_disk_usage_t disk; double use_percent; sigar_uint64_t total; sigar_uint64_t free; @@ -466,7 +470,7 @@ sigar_file_system_usage_get(sigar_t *sigar, SIGAR_DECLARE(int) sigar_disk_usage_get(sigar_t *sigar, const char *name, - sigar_disk_usage_t *usage); + sigar_disk_usage_t *disk); SIGAR_DECLARE(int) sigar_file_system_ping(sigar_t *sigar, diff --git a/include/sigar_private.h b/include/sigar_private.h index 7ff5618e..462cefd6 100644 --- a/include/sigar_private.h +++ b/include/sigar_private.h @@ -309,10 +309,13 @@ int sigar_group_name_get(sigar_t *sigar, int gid, char *buf, int buflen); return SIGAR_OK; \ } +#define SIGAR_DISK_STATS_INIT(disk) \ + (disk)->reads = (disk)->writes = \ + (disk)->read_bytes = (disk)->write_bytes = \ + (disk)->queue = (disk)->time = SIGAR_FIELD_NOTIMPL; + #define SIGAR_DISK_STATS_NOTIMPL(fsusage) \ - fsusage->disk_reads = fsusage->disk_writes = \ - fsusage->disk_read_bytes = fsusage->disk_write_bytes = \ - fsusage->disk_queue = fsusage->disk_time = SIGAR_FIELD_NOTIMPL; + SIGAR_DISK_STATS_INIT(&fsusage->disk) /* key used for filesystem (/) -> device (/dev/hda1) mapping */ #define SIGAR_FSDEV_ID(sb) ((sb).st_ino + (sb).st_dev) diff --git a/src/os/linux/linux_sigar.c b/src/os/linux/linux_sigar.c index e50ae393..f3ead7b0 100644 --- a/src/os/linux/linux_sigar.c +++ b/src/os/linux/linux_sigar.c @@ -1302,7 +1302,7 @@ static iodev_t *get_fsdev(sigar_t *sigar, static int get_iostat_sys(sigar_t *sigar, const char *dirname, - sigar_disk_usage_t *fsusage) + sigar_disk_usage_t *disk) { char stat[1025], dev[1025]; char *name, *ptr, *fsdev; @@ -1336,20 +1336,20 @@ static int get_iostat_sys(sigar_t *sigar, ptr = dev; ptr = sigar_skip_token(ptr); - fsusage->disk_reads = sigar_strtoull(ptr); + disk->reads = sigar_strtoull(ptr); ptr = sigar_skip_token(ptr); - fsusage->disk_writes = sigar_strtoull(ptr); + disk->writes = sigar_strtoull(ptr); - fsusage->disk_read_bytes = SIGAR_FIELD_NOTIMPL; - fsusage->disk_write_bytes = SIGAR_FIELD_NOTIMPL; - fsusage->disk_queue = SIGAR_FIELD_NOTIMPL; + disk->read_bytes = SIGAR_FIELD_NOTIMPL; + disk->write_bytes = SIGAR_FIELD_NOTIMPL; + disk->queue = SIGAR_FIELD_NOTIMPL; return SIGAR_OK; } static int get_iostat_proc_dstat(sigar_t *sigar, const char *dirname, - sigar_disk_usage_t *fsusage) + sigar_disk_usage_t *disk) { FILE *fp; char buffer[1025]; @@ -1408,29 +1408,29 @@ static int get_iostat_proc_dstat(sigar_t *sigar, &aveq); /* 11 # of millis spent doing I/Os (weighted) */ if (num == 11) { - fsusage->disk_rtime = ruse; - fsusage->disk_wtime = wuse; - fsusage->disk_time = use; - fsusage->disk_queue = aveq / 1000; + disk->rtime = ruse; + disk->wtime = wuse; + disk->time = use; + disk->queue = aveq / 1000; } else if (num == 4) { wio = rsect; rsect = rmerge; wsect = ruse; - fsusage->disk_queue = SIGAR_FIELD_NOTIMPL; + disk->queue = SIGAR_FIELD_NOTIMPL; } else { status = ENOENT; } - fsusage->disk_reads = rio; - fsusage->disk_writes = wio; - fsusage->disk_read_bytes = rsect; - fsusage->disk_write_bytes = wsect; + disk->reads = rio; + disk->writes = wio; + disk->read_bytes = rsect; + disk->write_bytes = wsect; /* convert sectors to bytes (512 is fixed size in 2.6 kernels) */ - fsusage->disk_read_bytes *= 512; - fsusage->disk_write_bytes *= 512; + disk->read_bytes *= 512; + disk->write_bytes *= 512; fclose(fp); return status; @@ -1444,7 +1444,7 @@ static int get_iostat_proc_dstat(sigar_t *sigar, static int get_iostat_procp(sigar_t *sigar, const char *dirname, - sigar_disk_usage_t *fsusage) + sigar_disk_usage_t *disk) { FILE *fp; char buffer[1025]; @@ -1481,22 +1481,22 @@ static int get_iostat_procp(sigar_t *sigar, if ((major == ST_MAJOR(sb)) && (minor == ST_MINOR(sb))) { ptr = sigar_skip_token(ptr); /* blocks */ ptr = sigar_skip_token(ptr); /* name */ - fsusage->disk_reads = sigar_strtoull(ptr); /* rio */ + disk->reads = sigar_strtoull(ptr); /* rio */ ptr = sigar_skip_token(ptr); /* rmerge */ - fsusage->disk_read_bytes = sigar_strtoull(ptr); /* rsect */ - fsusage->disk_rtime = sigar_strtoull(ptr); /* ruse */ + disk->read_bytes = sigar_strtoull(ptr); /* rsect */ + disk->rtime = sigar_strtoull(ptr); /* ruse */ ptr = sigar_skip_token(ptr); /* wmerge */ - fsusage->disk_write_bytes = sigar_strtoull(ptr); /* wsect */ - fsusage->disk_writes = sigar_strtoull(ptr); /* wio */ - fsusage->disk_wtime = sigar_strtoull(ptr); /* wuse */ + disk->write_bytes = sigar_strtoull(ptr); /* wsect */ + disk->writes = sigar_strtoull(ptr); /* wio */ + disk->wtime = sigar_strtoull(ptr); /* wuse */ ptr = sigar_skip_token(ptr); /* running */ - fsusage->disk_time = sigar_strtoull(ptr); /* use */ - fsusage->disk_queue = sigar_strtoull(ptr); /* aveq */ - fsusage->disk_queue /= 1000; + disk->time = sigar_strtoull(ptr); /* use */ + disk->queue = sigar_strtoull(ptr); /* aveq */ + disk->queue /= 1000; /* convert sectors to bytes (512 is fixed size in 2.6 kernels) */ - fsusage->disk_read_bytes *= 512; - fsusage->disk_write_bytes *= 512; + disk->read_bytes *= 512; + disk->write_bytes *= 512; fclose(fp); return SIGAR_OK; @@ -1509,9 +1509,9 @@ static int get_iostat_procp(sigar_t *sigar, } int sigar_disk_usage_get(sigar_t *sigar, const char *name, - sigar_disk_usage_t *usage) + sigar_disk_usage_t *disk) { - SIGAR_DISK_STATS_NOTIMPL(usage); /* init */ + SIGAR_DISK_STATS_INIT(disk); /* * 2.2 has metrics /proc/stat, but wtf is the device mapping? @@ -1522,11 +1522,11 @@ int sigar_disk_usage_get(sigar_t *sigar, const char *name, */ switch (sigar->iostat) { case IOSTAT_SYS: - return get_iostat_sys(sigar, name, usage); + return get_iostat_sys(sigar, name, disk); case IOSTAT_DISKSTATS: - return get_iostat_proc_dstat(sigar, name, usage); + return get_iostat_proc_dstat(sigar, name, disk); case IOSTAT_PARTITIONS: - return get_iostat_procp(sigar, name, usage); + return get_iostat_procp(sigar, name, disk); /* * case IOSTAT_SOME_OTHER_WIERD_THING: * break; @@ -1560,8 +1560,7 @@ int sigar_file_system_usage_get(sigar_t *sigar, fsusage->free_files = buf.f_ffree; fsusage->use_percent = sigar_file_system_usage_calc_used(sigar, fsusage); - (void)sigar_disk_usage_get(sigar, dirname, - (sigar_disk_usage_t *)fsusage); + (void)sigar_disk_usage_get(sigar, dirname, &fsusage->disk); return SIGAR_OK; }