summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 106e1c7)
raw | patch | inline | side by side (parent: 106e1c7)
author | Florian Forster <octo@collectd.org> | |
Fri, 25 Jan 2013 10:08:43 +0000 (11:08 +0100) | ||
committer | Florian Forster <octo@collectd.org> | |
Fri, 25 Jan 2013 10:08:43 +0000 (11:08 +0100) |
src/collectd.conf.in | patch | blob | history | |
src/collectd.conf.pod | patch | blob | history | |
src/write_riemann.c | patch | blob | history |
diff --git a/src/collectd.conf.in b/src/collectd.conf.in
index 9f0390e4451623693bd3a5753861b87c59428d1d..699c0e0a6e2ff309ccbcca289182c66147cb1f29 100644 (file)
--- a/src/collectd.conf.in
+++ b/src/collectd.conf.in
# <Node "example">
# Host "localhost"
# Port 5555
+# Protocol UDP
# StoreRates true
# AlwaysAppendDS false
# </Node>
diff --git a/src/collectd.conf.pod b/src/collectd.conf.pod
index 5ada55ab6569dff9158efad7f8cb6271ee1c0bd2..aa2871d87851522f5ae3d23e9e197215c32081fd 100644 (file)
--- a/src/collectd.conf.pod
+++ b/src/collectd.conf.pod
<Node "example">
Host "localhost"
Port "5555"
- StoreRates false
+ Protocol UDP
+ StoreRates true
+ AlwaysAppendDS false
Delay 10
</Node>
Tag "foobar"
Service name or port number to connect to. Defaults to C<5555>.
-=item B<StoreRates> B<false>|B<true>
+=item B<Protocol> B<UDP>|B<TCP>
+
+Specify the protocol to use when communicating with I<Riemann>. Defaults to
+B<UDP>.
+
+=item B<StoreRates> B<true>|B<false>
If set to B<true> (the default), convert counter values to rates. If set to
B<false> counter values are stored as is, i.e. as an increasing integer number.
diff --git a/src/write_riemann.c b/src/write_riemann.c
index 62d75f3662c6ef117f9cd504d5084a2aaecd740c..df0c373352d696ebd8b6ff7490f14f1c715862f0 100644 (file)
--- a/src/write_riemann.c
+++ b/src/write_riemann.c
_Bool always_append_ds;
char *node;
char *service;
+ _Bool use_tcp;
int s;
int reference_count;
}
buffer_len = msg__get_packed_size(msg);
+ if (host->use_tcp)
+ buffer_len += 4;
+
buffer = malloc (buffer_len);
if (buffer == NULL) {
pthread_mutex_unlock (&host->lock);
}
memset (buffer, 0, buffer_len);
- msg__pack(msg, buffer);
+ if (host->use_tcp)
+ {
+ uint32_t length = htonl ((uint32_t) (buffer_len - 4));
+ memcpy (buffer, &length, 4);
+ msg__pack(msg, buffer + 4);
+ }
+ else
+ {
+ msg__pack(msg, buffer);
+ }
status = (int) swrite (host->s, buffer, buffer_len);
if (status != 0)
memset(&hints, 0, sizeof(hints));
memset(&service, 0, sizeof(service));
hints.ai_family = AF_UNSPEC;
- hints.ai_socktype = SOCK_DGRAM;
+ hints.ai_socktype = host->use_tcp ? SOCK_STREAM : SOCK_DGRAM;
#ifdef AI_ADDRCONFIG
hints.ai_flags |= AI_ADDRCONFIG;
#endif
host->service = NULL;
host->store_rates = 1;
host->always_append_ds = 0;
+ host->use_tcp = 0;
status = cf_util_get_string (ci, &host->name);
if (status != 0) {
"option.");
break;
}
+ } else if (strcasecmp ("Protocol", child->key) == 0) {
+ char tmp[16];
+ status = cf_util_get_string_buffer (child,
+ tmp, sizeof (tmp));
+ if (status != 0)
+ {
+ ERROR ("write_riemann plugin: cf_util_get_"
+ "string_buffer failed with "
+ "status %i.", status);
+ break;
+ }
+
+ if (strcasecmp ("UDP", tmp) == 0)
+ host->use_tcp = 0;
+ else if (strcasecmp ("TCP", tmp) == 0)
+ host->use_tcp = 1;
+ else
+ WARNING ("write_riemann plugin: The value "
+ "\"%s\" is not valid for the "
+ "\"Protocol\" option. Use "
+ "either \"UDP\" or \"TCP\".",
+ tmp);
} else if (strcasecmp ("StoreRates", child->key) == 0) {
status = cf_util_get_boolean (child, &host->store_rates);
if (status != 0)