X-Git-Url: https://git.octo.it/?p=collectd.git;a=blobdiff_plain;f=src%2Fdrbd.c;h=69dc4ef9326289baa833c642ed3f4e1d27d24df8;hp=70f03cab280ce8426cbaaa99ea8c2f20d244fa4b;hb=a9e50e9e30ecde17e167e271060c8183bfcbf407;hpb=5523a080010dcb7a61dc0dccc3969a2a048e52f9 diff --git a/src/drbd.c b/src/drbd.c index 70f03cab..69dc4ef9 100644 --- a/src/drbd.c +++ b/src/drbd.c @@ -30,8 +30,8 @@ version: 8.3.11 (api:88/proto:86-96) srcversion: 71955441799F513ACA6DA60 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate B r----- - ns:64363752 nr:0 dw:357799284 dr:846902273 al:34987022 bm:18062 lo:0 \ - pe:0 ua:0 ap:0 ep:1 wo:f oos:0 + ns:64363752 nr:0 dw:357799284 dr:846902273 al:34987022 bm:18062 lo:0 \ + pe:0 ua:0 ap:0 ep:1 wo:f oos:0 */ #include "collectd.h" @@ -40,135 +40,112 @@ #include "plugin.h" static const char *drbd_stats = "/proc/drbd"; -static const char *drbd_names[] = -{ - "network_send", /* ns (network send) */ - "network_recv", /* nr (network receive) */ - "disk_write", /* dw (disk write) */ - "disk_read", /* dr (disk read) */ - "activity_log", /* al (activity log) */ - "bitmap", /* bm (bit map) */ - "local_count", /* lo (local count) */ - "pending", /* pe (pending) */ - "unacknowledged", /* ua (unacknowledged) */ - "app pending", /* ap (application pending) */ - "epochs", /* ep (epochs) */ - NULL, /* wo (write order) */ - "oos" /* oos (out of sync) */ +static const char *drbd_names[] = { + "network_send", /* ns (network send) */ + "network_recv", /* nr (network receive) */ + "disk_write", /* dw (disk write) */ + "disk_read", /* dr (disk read) */ + "activity_log", /* al (activity log) */ + "bitmap", /* bm (bit map) */ + "local_count", /* lo (local count) */ + "pending", /* pe (pending) */ + "unacknowledged", /* ua (unacknowledged) */ + "app pending", /* ap (application pending) */ + "epochs", /* ep (epochs) */ + NULL, /* wo (write order) */ + "oos" /* oos (out of sync) */ }; -static size_t drbd_names_num = STATIC_ARRAY_SIZE (drbd_names); - -static int drbd_init (void) -{ - return (0); -} - - -static int drbd_submit_fields (long int resource, - char **fields, size_t fields_num) -{ - char plugin_instance[DATA_MAX_NAME_LEN]; - value_t values[fields_num]; - value_list_t vl = VALUE_LIST_INIT; - - if (resource < 0) - { - WARNING ("drbd plugin: Unable to parse resource"); - return (EINVAL); - } - - if (fields_num != drbd_names_num) - { - WARNING ("drbd plugin: Wrong number of fields for " - "r%ld statistics. Expected %zu, got %zu.", - resource, drbd_names_num, fields_num); - return (EINVAL); - } - - ssnprintf (plugin_instance, sizeof (plugin_instance), "r%ld", - resource); - - for (size_t i = 0; i < drbd_names_num; i++) - { - char *data; - /* skip non numeric wo */ - if (strncmp(fields[i], "wo", 2) == 0) - continue; - data = strchr(fields[i], ':'); - if (data == NULL) - return (EINVAL); - (void) parse_value (++data, &values[i], DS_TYPE_DERIVE); - } - - vl.values_len = 1; - sstrncpy (vl.host, hostname_g, sizeof (vl.host)); - sstrncpy (vl.plugin, "drbd", sizeof (vl.plugin)); - sstrncpy (vl.plugin_instance, plugin_instance, - sizeof (vl.plugin_instance)); - sstrncpy (vl.type, "drbd_resource", sizeof (vl.type)); - - for (size_t i = 0; i < fields_num; i++) - { - if (drbd_names[i] == NULL) - continue; - vl.values = values + i; - sstrncpy (vl.type_instance, drbd_names[i], - sizeof (vl.type_instance)); - plugin_dispatch_values (&vl); - } - - return (0); +static size_t drbd_names_num = STATIC_ARRAY_SIZE(drbd_names); + +static int drbd_init(void) { return 0; } + +static int drbd_submit_fields(long int resource, char **fields, + size_t fields_num) { + char plugin_instance[DATA_MAX_NAME_LEN]; + value_t values[fields_num]; + value_list_t vl = VALUE_LIST_INIT; + + if (resource < 0) { + WARNING("drbd plugin: Unable to parse resource"); + return EINVAL; + } + + if (fields_num != drbd_names_num) { + WARNING("drbd plugin: Wrong number of fields for " + "r%ld statistics. Expected %" PRIsz ", got %" PRIsz ".", + resource, drbd_names_num, fields_num); + return EINVAL; + } + + snprintf(plugin_instance, sizeof(plugin_instance), "r%ld", resource); + + for (size_t i = 0; i < drbd_names_num; i++) { + char *data; + /* skip non numeric wo */ + if (strncmp(fields[i], "wo", 2) == 0) + continue; + data = strchr(fields[i], ':'); + if (data == NULL) + return EINVAL; + (void)parse_value(++data, &values[i], DS_TYPE_DERIVE); + } + + vl.values_len = 1; + sstrncpy(vl.plugin, "drbd", sizeof(vl.plugin)); + sstrncpy(vl.plugin_instance, plugin_instance, sizeof(vl.plugin_instance)); + sstrncpy(vl.type, "drbd_resource", sizeof(vl.type)); + + for (size_t i = 0; i < fields_num; i++) { + if (drbd_names[i] == NULL) + continue; + vl.values = values + i; + sstrncpy(vl.type_instance, drbd_names[i], sizeof(vl.type_instance)); + plugin_dispatch_values(&vl); + } + + return 0; } /* drbd_submit_fields */ -static int drbd_read (void) -{ - FILE *fh; - char buffer[256]; - - long int resource = -1; - char *fields[16]; - int fields_num = 0; - - fh = fopen (drbd_stats, "r"); - if (fh == NULL) - { - WARNING ("drbd plugin: Unable to open %s", drbd_stats); - return (EINVAL); - } - - while (fgets (buffer, sizeof (buffer), fh) != NULL) - { - fields_num = strsplit (buffer, - fields, STATIC_ARRAY_SIZE (fields)); - - /* ignore headers (first two iterations) */ - if ((strcmp(fields[0], "version:") == 0) || - (strcmp(fields[0], "srcversion:") == 0) || - (strcmp(fields[0], "GIT-hash:") == 0)) - { - continue; - } - - if (isdigit(fields[0][0])) - { - /* parse the resource line, next loop iteration - will submit values for this resource */ - resource = strtol(fields[0], NULL, 10); - } - else - { - /* handle stats data for the resource defined in the - previous iteration */ - drbd_submit_fields(resource, fields, fields_num); - } - } /* while (fgets) */ - - fclose (fh); - return (0); +static int drbd_read(void) { + FILE *fh; + char buffer[256]; + + long int resource = -1; + char *fields[16]; + int fields_num = 0; + + fh = fopen(drbd_stats, "r"); + if (fh == NULL) { + WARNING("drbd plugin: Unable to open %s", drbd_stats); + return EINVAL; + } + + while (fgets(buffer, sizeof(buffer), fh) != NULL) { + fields_num = strsplit(buffer, fields, STATIC_ARRAY_SIZE(fields)); + + /* ignore headers (first two iterations) */ + if ((strcmp(fields[0], "version:") == 0) || + (strcmp(fields[0], "srcversion:") == 0) || + (strcmp(fields[0], "GIT-hash:") == 0)) { + continue; + } + + if (isdigit(fields[0][0])) { + /* parse the resource line, next loop iteration + will submit values for this resource */ + resource = strtol(fields[0], NULL, 10); + } else { + /* handle stats data for the resource defined in the + previous iteration */ + drbd_submit_fields(resource, fields, fields_num); + } + } /* while (fgets) */ + + fclose(fh); + return 0; } /* void drbd_read */ -void module_register (void) -{ - plugin_register_init ("drbd", drbd_init); - plugin_register_read ("drbd", drbd_read); +void module_register(void) { + plugin_register_init("drbd", drbd_init); + plugin_register_read("drbd", drbd_read); } /* void module_register */