DEBUG ("CFStringCreateWithCString (%s) failed.", key);
return (-1LL);
}
-
+
/* get => we don't need to release (== free) the object */
val_obj = (CFNumberRef) CFDictionaryGetValue (dict, key_obj);
#elif KERNEL_FREEBSD
int retry, dirty;
- void *snap_present = NULL;
- struct devstat *snap_present_iter;
+ void *snap = NULL;
+ struct devstat *snap_iter;
struct gident *geom_id;
const char *disk_name;
- uint64_t read_bytes, write_bytes;
- uint64_t read_ops, write_ops;
long double read_time, write_time;
for (retry = 0, dirty = 1; retry < 5 && dirty == 1; retry++) {
- if (snap_present != NULL)
- geom_stats_snapshot_free(snap_present);
+ if (snap != NULL)
+ geom_stats_snapshot_free(snap);
/* Get a fresh copy of stats snapshot */
- snap_present = geom_stats_snapshot_get();
- if (snap_present == NULL) {
+ snap = geom_stats_snapshot_get();
+ if (snap == NULL) {
ERROR("disk plugin: geom_stats_snapshot_get() failed.");
return (-1);
}
/* Check if we have dirty read from this snapshot */
dirty = 0;
- geom_stats_snapshot_reset(snap_present);
- while ((snap_present_iter = geom_stats_snapshot_next(snap_present)) != NULL) {
- if (snap_present_iter->id == NULL)
+ geom_stats_snapshot_reset(snap);
+ while ((snap_iter = geom_stats_snapshot_next(snap)) != NULL) {
+ if (snap_iter->id == NULL)
continue;
- geom_id = geom_lookupid(&geom_tree, snap_present_iter->id);
+ geom_id = geom_lookupid(&geom_tree, snap_iter->id);
/* New device? refresh GEOM tree */
if (geom_id == NULL) {
geom_deletetree(&geom_tree);
if (geom_gettree(&geom_tree) != 0) {
ERROR("disk plugin: geom_gettree() failed");
- geom_stats_snapshot_free(snap_present);
+ geom_stats_snapshot_free(snap);
return (-1);
}
- geom_id = geom_lookupid(&geom_tree, snap_present_iter->id);
+ geom_id = geom_lookupid(&geom_tree, snap_iter->id);
}
/*
* This should be rare: the device come right before we take the
continue;
/* Check if this is a dirty read quit for another try */
- if (snap_present_iter->sequence0 != snap_present_iter->sequence1) {
+ if (snap_iter->sequence0 != snap_iter->sequence1) {
dirty = 1;
break;
}
}
}
- /* Reset iterators for both snapshots */
- geom_stats_snapshot_reset(snap_present);
+ /* Reset iterator */
+ geom_stats_snapshot_reset(snap);
for (;;) {
- snap_present_iter = geom_stats_snapshot_next(snap_present);
- if (snap_present_iter == NULL)
+ snap_iter = geom_stats_snapshot_next(snap);
+ if (snap_iter == NULL)
break;
- if (snap_present_iter->id == NULL)
+ if (snap_iter->id == NULL)
continue;
- geom_id = geom_lookupid(&geom_tree, snap_present_iter->id);
+ geom_id = geom_lookupid(&geom_tree, snap_iter->id);
if (geom_id == NULL)
continue;
if (geom_id->lg_what != ISPROVIDER)
if (((struct gprovider *)(geom_id->lg_ptr))->lg_geom->lg_rank != 1)
continue;
/* Skip dirty reads, if present */
- if (dirty && (snap_present_iter->sequence0 != snap_present_iter->sequence1))
+ if (dirty && (snap_iter->sequence0 != snap_iter->sequence1))
continue;
- devstat_compute_statistics(snap_present_iter, NULL, 10.0,
- DSM_TOTAL_TRANSFERS_READ, &read_ops,
- DSM_TOTAL_BYTES_READ, &read_bytes,
- DSM_TOTAL_DURATION_READ, &read_time,
-
- DSM_TOTAL_TRANSFERS_WRITE, &write_ops,
- DSM_TOTAL_BYTES_WRITE, &write_bytes,
- DSM_TOTAL_DURATION_WRITE, &write_time,
-
- DSM_NONE);
-
disk_name = ((struct gprovider *)geom_id->lg_ptr)->lg_name;
- if ((read_bytes != 0) || (write_bytes != 0))
+ if ((snap_iter->bytes[DEVSTAT_READ] != 0) || (snap_iter->bytes[DEVSTAT_WRITE] != 0)) {
disk_submit(disk_name, "disk_octets",
- (derive_t)read_bytes, (derive_t)write_bytes);
+ (derive_t)snap_iter->bytes[DEVSTAT_READ],
+ (derive_t)snap_iter->bytes[DEVSTAT_WRITE]);
+ }
- if ((read_ops != 0) || (write_ops != 0))
+ if ((snap_iter->operations[DEVSTAT_READ] != 0) || (snap_iter->operations[DEVSTAT_WRITE] != 0)) {
disk_submit(disk_name, "disk_ops",
- (derive_t)read_ops, (derive_t)write_ops);
+ (derive_t)snap_iter->operations[DEVSTAT_READ],
+ (derive_t)snap_iter->operations[DEVSTAT_WRITE]);
+ }
+ read_time = devstat_compute_etime(&snap_iter->duration[DEVSTAT_READ], NULL);
+ write_time = devstat_compute_etime(&snap_iter->duration[DEVSTAT_WRITE], NULL);
if ((read_time != 0) || (write_time != 0)) {
disk_submit (disk_name, "disk_time",
(derive_t)(read_time*1000), (derive_t)(write_time*1000));
}
}
- geom_stats_snapshot_free(snap_present);
+ geom_stats_snapshot_free(snap);
#elif KERNEL_LINUX
FILE *fh;
char buffer[1024];
-
+
char *fields[32];
int numfields;
int fieldshift = 0;
{
char *disk_name;
char *output_name;
- char *alt_name;
numfields = strsplit (buffer, fields, 32);
output_name = disk_name;
#if HAVE_LIBUDEV
- alt_name = disk_udev_attr_name (handle_udev, disk_name,
- conf_udev_name_attr);
-#else
- alt_name = NULL;
-#endif
+ char *alt_name = disk_udev_attr_name (handle_udev, disk_name, conf_udev_name_attr);
if (alt_name != NULL)
output_name = alt_name;
+#endif
if ((ds->read_bytes != 0) || (ds->write_bytes != 0))
disk_submit (output_name, "disk_octets",
submit_io_time (output_name, io_time, weighted_time);
} /* if (is_disk) */
+#if HAVE_LIBUDEV
/* release udev-based alternate name, if allocated */
- free(alt_name);
+ sfree (alt_name);
+#endif
} /* while (fgets (buffer, sizeof (buffer), fh) != NULL) */
#if HAVE_LIBUDEV
#endif
int counter;
char name[DATA_MAX_NAME_LEN];
-
+
if ((ds = sg_get_disk_io_stats(&disks)) == NULL)
return (0);
-
+
for (counter=0; counter < disks; counter++) {
strncpy(name, ds->disk_name, sizeof(name));
name[sizeof(name)-1] = '\0'; /* strncpy doesn't terminate longer strings */
int rnumdisk;
int i;
- if ((numdisk = perfstat_disk(NULL, NULL, sizeof(perfstat_disk_t), 0)) < 0)
+ if ((numdisk = perfstat_disk(NULL, NULL, sizeof(perfstat_disk_t), 0)) < 0)
{
char errbuf[1024];
WARNING ("disk plugin: perfstat_disk: %s",
}
if (numdisk != pnumdisk || stat_disk==NULL) {
- if (stat_disk!=NULL)
+ if (stat_disk!=NULL)
free(stat_disk);
stat_disk = (perfstat_disk_t *)calloc(numdisk, sizeof(perfstat_disk_t));
- }
+ }
pnumdisk = numdisk;
firstpath.name[0]='\0';
- if ((rnumdisk = perfstat_disk(&firstpath, stat_disk, sizeof(perfstat_disk_t), numdisk)) < 0)
+ if ((rnumdisk = perfstat_disk(&firstpath, stat_disk, sizeof(perfstat_disk_t), numdisk)) < 0)
{
char errbuf[1024];
WARNING ("disk plugin: perfstat_disk : %s",
return (-1);
}
- for (i = 0; i < rnumdisk; i++)
+ for (i = 0; i < rnumdisk; i++)
{
read_sectors = stat_disk[i].rblks*stat_disk[i].bsize;
write_sectors = stat_disk[i].wblks*stat_disk[i].bsize;