Skip to content

Commit

Permalink
Merge pull request #2252 from jaroug/kairosdb_ttl_support
Browse files Browse the repository at this point in the history
Kairosdb ttl support
  • Loading branch information
rubenk committed Apr 18, 2017
2 parents 930fd04 + 23de9d6 commit 16bf49d
Show file tree
Hide file tree
Showing 5 changed files with 28 additions and 9 deletions.
1 change: 1 addition & 0 deletions src/collectd.conf.in
Expand Up @@ -1547,6 +1547,7 @@
# SSLVersion "TLSv1"
# Format "Command"
# Attribute "key" "value" # only available for KAIROSDB format
# TTL 0 # data ttl, only available for KAIROSDB format
# Metrics true
# Notifications false
# StoreRates false
Expand Down
10 changes: 9 additions & 1 deletion src/collectd.conf.pod
Expand Up @@ -8771,13 +8771,21 @@ Defaults to B<Command>.

=item B<Attribute> I<String> I<String>

Only available for KAIROSDB output format.
Only available for the KAIROSDB output format.

Consider the two given strings to be the key and value of an additional tag for
each metric being sent out.

You can add multiple B<Attribute>.

=item B<TTL> I<Int>

Only available for the KAIROSDB output format.

Sets the Cassandra ttl for the data points.

Please refer to L<http://kairosdb.github.io/docs/build/html/restapi/AddDataPoints.html?highlight=ttl>

=item B<Metrics> B<true>|B<false>

Controls whether I<metrics> are POSTed to this location. Defaults to B<true>.
Expand Down
13 changes: 8 additions & 5 deletions src/utils_format_kairosdb.c
Expand Up @@ -183,7 +183,7 @@ static int value_list_to_kairosdb(char *buffer, size_t buffer_size, /* {{{ */
const data_set_t *ds, const value_list_t *vl,
int store_rates,
char const *const *http_attrs,
size_t http_attrs_num) {
size_t http_attrs_num, int data_ttl) {
char temp[512];
size_t offset = 0;
int status;
Expand Down Expand Up @@ -230,6 +230,9 @@ static int value_list_to_kairosdb(char *buffer, size_t buffer_size, /* {{{ */

memset(temp, 0, sizeof(temp));

if (data_ttl != 0)
BUFFER_ADD(", \"ttl\": %i", data_ttl);

BUFFER_ADD(", \"tags\":\{");

BUFFER_ADD("\"host\": \"%s\"", vl->host);
Expand Down Expand Up @@ -260,12 +263,12 @@ static int format_kairosdb_value_list_nocheck(
char *buffer, /* {{{ */
size_t *ret_buffer_fill, size_t *ret_buffer_free, const data_set_t *ds,
const value_list_t *vl, int store_rates, size_t temp_size,
char const *const *http_attrs, size_t http_attrs_num) {
char const *const *http_attrs, size_t http_attrs_num, int data_ttl) {
char temp[temp_size];
int status;

status = value_list_to_kairosdb(temp, sizeof(temp), ds, vl, store_rates,
http_attrs, http_attrs_num);
http_attrs, http_attrs_num, data_ttl);
if (status != 0)
return (status);
temp_size = strlen(temp);
Expand Down Expand Up @@ -334,7 +337,7 @@ int format_kairosdb_value_list(char *buffer, /* {{{ */
size_t *ret_buffer_fill, size_t *ret_buffer_free,
const data_set_t *ds, const value_list_t *vl,
int store_rates, char const *const *http_attrs,
size_t http_attrs_num) {
size_t http_attrs_num, int data_ttl) {
if ((buffer == NULL) || (ret_buffer_fill == NULL) ||
(ret_buffer_free == NULL) || (ds == NULL) || (vl == NULL))
return (-EINVAL);
Expand All @@ -344,7 +347,7 @@ int format_kairosdb_value_list(char *buffer, /* {{{ */

return (format_kairosdb_value_list_nocheck(
buffer, ret_buffer_fill, ret_buffer_free, ds, vl, store_rates,
(*ret_buffer_free) - 2, http_attrs, http_attrs_num));
(*ret_buffer_free) - 2, http_attrs, http_attrs_num, data_ttl));
} /* }}} int format_kairosdb_value_list */

/* vim: set sw=2 sts=2 et fdm=marker : */
2 changes: 1 addition & 1 deletion src/utils_format_kairosdb.h
Expand Up @@ -41,7 +41,7 @@ int format_kairosdb_value_list(char *buffer, size_t *ret_buffer_fill,
size_t *ret_buffer_free, const data_set_t *ds,
const value_list_t *vl, int store_rates,
char const *const *http_attrs,
size_t http_attrs_num);
size_t http_attrs_num, int data_ttl);
int format_kairosdb_finalize(char *buffer, size_t *ret_buffer_fill,
size_t *ret_buffer_free);

Expand Down
11 changes: 9 additions & 2 deletions src/write_http.c
Expand Up @@ -78,6 +78,8 @@ struct wh_callback_s {
cdtime_t send_buffer_init_time;

pthread_mutex_t send_lock;

int data_ttl;
};
typedef struct wh_callback_s wh_callback_t;

Expand Down Expand Up @@ -473,7 +475,8 @@ static int wh_write_kairosdb(const data_set_t *ds,

status = format_kairosdb_value_list(
cb->send_buffer, &cb->send_buffer_fill, &cb->send_buffer_free, ds, vl,
cb->store_rates, (char const *const *)http_attrs, http_attrs_num);
cb->store_rates, (char const *const *)http_attrs, http_attrs_num,
cb->data_ttl);
if (status == -ENOMEM) {
status = wh_flush_nolock(/* timeout = */ 0, cb);
if (status != 0) {
Expand All @@ -484,7 +487,8 @@ static int wh_write_kairosdb(const data_set_t *ds,

status = format_kairosdb_value_list(
cb->send_buffer, &cb->send_buffer_fill, &cb->send_buffer_free, ds, vl,
cb->store_rates, (char const *const *)http_attrs, http_attrs_num);
cb->store_rates, (char const *const *)http_attrs, http_attrs_num,
cb->data_ttl);
}
if (status != 0) {
pthread_mutex_unlock(&cb->send_lock);
Expand Down Expand Up @@ -624,6 +628,7 @@ static int wh_config_node(oconfig_item_t *ci) /* {{{ */
cb->headers = NULL;
cb->send_metrics = 1;
cb->send_notifications = 0;
cb->data_ttl = 0;

pthread_mutex_init(&cb->send_lock, /* attr = */ NULL);

Expand Down Expand Up @@ -733,6 +738,8 @@ static int wh_config_node(oconfig_item_t *ci) /* {{{ */
DEBUG("write_http plugin: got attribute: %s => %s", key, val);
sfree(key);
sfree(val);
} else if (strcasecmp("TTL", child->key) == 0) {
status = cf_util_get_int(child, &cb->data_ttl);
} else {
ERROR("write_http plugin: Invalid configuration "
"option: %s.",
Expand Down

0 comments on commit 16bf49d

Please sign in to comment.