X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fwrite_riemann.c;h=3345d0444a94653a4e3be42a9d9051bfd264e790;hb=f7e81e5920d6e51cd6d616aee1123a02b7dc183f;hp=b5242172d0bfdba043cc1b6c0aa5aa01290ea073;hpb=2dc2d5d5a7b11115441ac3f4ace1c4bea83bb915;p=collectd.git diff --git a/src/write_riemann.c b/src/write_riemann.c index b5242172..3345d044 100644 --- a/src/write_riemann.c +++ b/src/write_riemann.c @@ -37,6 +37,7 @@ #define RIEMANN_HOST "localhost" #define RIEMANN_PORT "5555" +#define RIEMANN_TTL_FACTOR 2.0 struct riemann_host { char *name; @@ -49,6 +50,7 @@ struct riemann_host { char *service; _Bool use_tcp; int s; + double ttl_factor; int reference_count; }; @@ -73,7 +75,11 @@ static void riemann_event_protobuf_free (Event *event) /* {{{ */ event->n_tags = 0; for (i = 0; i < event->n_attributes; i++) + { + sfree (event->attributes[i]->key); + sfree (event->attributes[i]->value); sfree (event->attributes[i]); + } sfree (event->attributes); event->n_attributes = 0; @@ -372,6 +378,7 @@ static Event *riemann_value_to_protobuf (struct riemann_host const *host, /* {{{ Event *event; char name_buffer[5 * DATA_MAX_NAME_LEN]; char service_buffer[6 * DATA_MAX_NAME_LEN]; + double ttl; int i; event = malloc (sizeof (*event)); @@ -386,7 +393,9 @@ static Event *riemann_value_to_protobuf (struct riemann_host const *host, /* {{{ event->host = strdup (vl->host); event->time = CDTIME_T_TO_TIME_T (vl->time); event->has_time = 1; - event->ttl = CDTIME_T_TO_TIME_T (2 * vl->interval); + + ttl = CDTIME_T_TO_DOUBLE (vl->interval) * host->ttl_factor; + event->ttl = (float) ttl; event->has_ttl = 1; riemann_event_add_attribute (event, "plugin", vl->plugin); @@ -604,6 +613,7 @@ riemann_config_node(oconfig_item_t *ci) host->store_rates = 1; host->always_append_ds = 0; host->use_tcp = 0; + host->ttl_factor = RIEMANN_TTL_FACTOR; status = cf_util_get_string (ci, &host->name); if (status != 0) { @@ -663,6 +673,33 @@ riemann_config_node(oconfig_item_t *ci) &host->always_append_ds); if (status != 0) break; + } else if (strcasecmp ("TTLFactor", child->key) == 0) { + double tmp = NAN; + status = cf_util_get_double (child, &tmp); + if (status != 0) + break; + if (tmp >= 2.0) { + host->ttl_factor = tmp; + } else if (tmp >= 1.0) { + NOTICE ("write_riemann plugin: The configured " + "TTLFactor is very small " + "(%.1f). A value of 2.0 or " + "greater is recommended.", + tmp); + host->ttl_factor = tmp; + } else if (tmp > 0.0) { + WARNING ("write_riemann plugin: The configured " + "TTLFactor is too small to be " + "useful (%.1f). I'll use it " + "since the user knows best, " + "but under protest.", + tmp); + host->ttl_factor = tmp; + } else { /* zero, negative and NAN */ + ERROR ("write_riemann plugin: The configured " + "TTLFactor is invalid (%.1f).", + tmp); + } } else { WARNING("write_riemann plugin: ignoring unknown config " "option: \"%s\"", child->key);