X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fceph.c;h=d928a7ba4b5db1d71e87449f635783e44000f621;hb=d561993fd1bfb93df203484c4c225aca8b45f041;hp=4ae6e54b34b432deae4478a8c21aa8287b2bfa80;hpb=82f7cee169bd303db5a1e80ca8125bcdcba48d4d;p=collectd.git diff --git a/src/ceph.c b/src/ceph.c index 4ae6e54b..d928a7ba 100644 --- a/src/ceph.c +++ b/src/ceph.c @@ -21,6 +21,7 @@ * Dan Ryder **/ +#define _DEFAULT_SOURCE #define _BSD_SOURCE #include "collectd.h" @@ -114,7 +115,7 @@ struct ceph_daemon uint32_t *ds_types; /** Track ds names to match with types */ char **ds_names; - + /** * Keep track of last data for latency values so we can calculate rate * since last poll. @@ -255,7 +256,7 @@ static int ceph_cb_boolean(void *ctx, int bool_val) return CEPH_CB_CONTINUE; } -static int +static int ceph_cb_number(void *ctx, const char *number_val, yajl_len_t number_len) { yajl_struct *yajl = (yajl_struct*)ctx; @@ -320,7 +321,7 @@ ceph_cb_number(void *ctx, const char *number_val, yajl_len_t number_len) return CEPH_CB_CONTINUE; } -static int ceph_cb_string(void *ctx, const unsigned char *string_val, +static int ceph_cb_string(void *ctx, const unsigned char *string_val, yajl_len_t string_len) { return CEPH_CB_CONTINUE; @@ -528,7 +529,7 @@ static int parse_keys(const char *key_str, char *ds_name) int max_str_len = 100; char tmp_ds_name[max_str_len]; memset(tmp_ds_name, 0, sizeof(tmp_ds_name)); - if(ds_name == NULL || key_str == NULL || key_str[0] == '\0' || + if(ds_name == NULL || key_str == NULL || key_str[0] == '\0' || ds_name[0] != '\0') { return -1; @@ -539,7 +540,7 @@ static int parse_keys(const char *key_str, char *ds_name) memcpy(tmp_ds_name, key_str, max_str_len - 1); goto compact; } - + ds_name_len = (rptr - ptr) > max_str_len ? max_str_len : (rptr - ptr); if((ds_name_len == 0) || strncmp(rptr + 1, "type", 4)) { /** copy whole key **/ @@ -550,7 +551,7 @@ static int parse_keys(const char *key_str, char *ds_name) memcpy(tmp_ds_name, key_str, ((rptr - key_str) > (max_str_len - 1) ? (max_str_len - 1) : (rptr - key_str))); } - + compact: compact_ds_name(tmp_ds_name, ds_name); return 0; } @@ -565,7 +566,7 @@ static int ceph_daemon_add_ds_entry(struct ceph_daemon *d, const char *name, uint32_t type; char ds_name[DATA_MAX_NAME_LEN]; memset(ds_name, 0, sizeof(ds_name)); - + if(convert_special_metrics) { /** @@ -611,7 +612,7 @@ static int ceph_daemon_add_ds_entry(struct ceph_daemon *d, const char *name, sstrncpy(d->ds_names[d->ds_num], ds_name, DATA_MAX_NAME_LEN -1); d->ds_num = (d->ds_num + 1); - + return 0; } @@ -656,7 +657,8 @@ static int cc_handle_bool(struct oconfig_item_s *item, int *dest) static int cc_add_daemon_config(oconfig_item_t *ci) { int ret, i; - struct ceph_daemon *array, *nd, cd; + struct ceph_daemon *nd, cd; + struct ceph_daemon **tmp; memset(&cd, 0, sizeof(struct ceph_daemon)); if((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) @@ -707,22 +709,22 @@ static int cc_add_daemon_config(oconfig_item_t *ci) "with '/' or './' Can't parse: '%s'\n", cd.name, cd.asok_path); return -EINVAL; } - - array = realloc(g_daemons, - sizeof(struct ceph_daemon *) * (g_num_daemons + 1)); - if(array == NULL) + + tmp = realloc(g_daemons, (g_num_daemons+1) * sizeof(*g_daemons)); + if(tmp == NULL) { /* The positive return value here indicates that this is a * runtime error, not a configuration error. */ return ENOMEM; } - g_daemons = (struct ceph_daemon**) array; - nd = malloc(sizeof(struct ceph_daemon)); + g_daemons = tmp; + + nd = malloc(sizeof(*nd)); if(!nd) { return ENOMEM; } - memcpy(nd, &cd, sizeof(struct ceph_daemon)); + memcpy(nd, &cd, sizeof(*nd)); g_daemons[g_num_daemons++] = nd; return 0; } @@ -812,7 +814,7 @@ node_handler_define_schema(void *arg, const char *val, const char *key) /** * Latency counter does not yet have an entry in last poll data - add it. */ -static int add_last(struct ceph_daemon *d, const char *ds_n, double cur_sum, +static int add_last(struct ceph_daemon *d, const char *ds_n, double cur_sum, uint64_t cur_count) { d->last_poll_data[d->last_idx] = malloc(1 * sizeof(struct last_data)); @@ -965,7 +967,7 @@ static int node_handler_fetch_data(void *arg, const char *val, const char *key) //don't overflow bounds of array index = (vtmp->d->ds_num - 1); } - + /** * counters should remain in same order we parsed schema... we maintain the * index variable to keep track of current point in list of counters. first @@ -1009,7 +1011,7 @@ static int node_handler_fetch_data(void *arg, const char *val, const char *key) { vtmp->avgcount = 1; } - + /** User wants latency values as long run avg */ if(long_run_latency_avg) {