projects
/
collectd.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
write_redis: Log error message from redis command failures
[collectd.git]
/
src
/
write_redis.c
diff --git
a/src/write_redis.c
b/src/write_redis.c
index
1d9ec27
..
43d71f8
100644
(file)
--- a/
src/write_redis.c
+++ b/
src/write_redis.c
@@
-1,6
+1,6
@@
/**
* collectd - src/write_redis.c
/**
* collectd - src/write_redis.c
- * Copyright (C) 2010 Florian Forster
+ * Copyright (C) 2010
Florian Forster
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@
-30,7
+30,8
@@
#include "configfile.h"
#include <pthread.h>
#include "configfile.h"
#include <pthread.h>
-#include <credis.h>
+#include <sys/time.h>
+#include <hiredis/hiredis.h>
struct wr_node_s
{
struct wr_node_s
{
@@
-38,9
+39,9
@@
struct wr_node_s
char *host;
int port;
char *host;
int port;
-
int
timeout;
+
struct timeval
timeout;
-
REDIS
conn;
+
redisContext *
conn;
pthread_mutex_t lock;
};
typedef struct wr_node_s wr_node_t;
pthread_mutex_t lock;
};
typedef struct wr_node_s wr_node_t;
@@
-56,15
+57,18
@@
static int wr_write (const data_set_t *ds, /* {{{ */
char ident[512];
char key[512];
char value[512];
char ident[512];
char key[512];
char value[512];
+ char time[24];
size_t value_size;
char *value_ptr;
int status;
size_t value_size;
char *value_ptr;
int status;
+ redisReply *rr;
int i;
status = FORMAT_VL (ident, sizeof (ident), vl);
if (status != 0)
return (status);
ssnprintf (key, sizeof (key), "collectd/%s", ident);
int i;
status = FORMAT_VL (ident, sizeof (ident), vl);
if (status != 0)
return (status);
ssnprintf (key, sizeof (key), "collectd/%s", ident);
+ ssnprintf (time, sizeof (time), "%.9f", CDTIME_T_TO_DOUBLE(vl->time));
memset (value, 0, sizeof (value));
value_size = sizeof (value);
memset (value, 0, sizeof (value));
value_size = sizeof (value);
@@
-84,13
+88,14
@@
static int wr_write (const data_set_t *ds, /* {{{ */
} \
} while (0)
} \
} while (0)
- APPEND ("%lu:", (unsigned long) vl->time);
+ APPEND ("%s:", time);
+
for (i = 0; i < ds->ds_num; i++)
{
if (ds->ds[i].type == DS_TYPE_COUNTER)
APPEND ("%llu", vl->values[i].counter);
else if (ds->ds[i].type == DS_TYPE_GAUGE)
for (i = 0; i < ds->ds_num; i++)
{
if (ds->ds[i].type == DS_TYPE_COUNTER)
APPEND ("%llu", vl->values[i].counter);
else if (ds->ds[i].type == DS_TYPE_GAUGE)
- APPEND (
"%g"
, vl->values[i].gauge);
+ APPEND (
GAUGE_FORMAT
, vl->values[i].gauge);
else if (ds->ds[i].type == DS_TYPE_DERIVE)
APPEND ("%"PRIi64, vl->values[i].derive);
else if (ds->ds[i].type == DS_TYPE_ABSOLUTE)
else if (ds->ds[i].type == DS_TYPE_DERIVE)
APPEND ("%"PRIi64, vl->values[i].derive);
else if (ds->ds[i].type == DS_TYPE_ABSOLUTE)
@@
-105,23
+110,26
@@
static int wr_write (const data_set_t *ds, /* {{{ */
if (node->conn == NULL)
{
if (node->conn == NULL)
{
- node->conn =
credis_connect (
node->host, node->port, node->timeout);
- if (node->conn
== NULL
)
+ node->conn =
redisConnectWithTimeout ((char *)
node->host, node->port, node->timeout);
+ if (node->conn
!= NULL && node->conn->err
)
{
{
- ERROR ("write_redis plugin: Connecting to host \"%s\" (port %i) failed
.
",
+ ERROR ("write_redis plugin: Connecting to host \"%s\" (port %i) failed
: %s
",
(node->host != NULL) ? node->host : "localhost",
(node->host != NULL) ? node->host : "localhost",
- (node->port != 0) ? node->port : 6379);
+ (node->port != 0) ? node->port : 6379,
+ node->conn->errstr);
pthread_mutex_unlock (&node->lock);
return (-1);
}
}
pthread_mutex_unlock (&node->lock);
return (-1);
}
}
- /* "credis_zadd" doesn't handle a NULL pointer gracefully, so I'd rather
- * have a meaningful assertion message than a normal segmentation fault. */
assert (node->conn != NULL);
assert (node->conn != NULL);
- status = credis_zadd (node->conn, key, (double) vl->time, value);
+ rr = redisCommand (node->conn, "ZADD %s %s %s", key, time, value);
+ if (rr==NULL)
+ WARNING("ZADD command error. key:%s message:%s", key, node->conn->errstr);
- credis_sadd (node->conn, "collectd/values", ident);
+ rr = redisCommand (node->conn, "SADD collectd/values %s", ident);
+ if (rr==NULL)
+ WARNING("SADD command error. ident:%s message:%s", ident, node->conn->errstr);
pthread_mutex_unlock (&node->lock);
pthread_mutex_unlock (&node->lock);
@@
-137,7
+145,7
@@
static void wr_config_free (void *ptr) /* {{{ */
if (node->conn != NULL)
{
if (node->conn != NULL)
{
-
credis_clos
e (node->conn);
+
redisFre
e (node->conn);
node->conn = NULL;
}
node->conn = NULL;
}
@@
-148,6
+156,7
@@
static void wr_config_free (void *ptr) /* {{{ */
static int wr_config_node (oconfig_item_t *ci) /* {{{ */
{
wr_node_t *node;
static int wr_config_node (oconfig_item_t *ci) /* {{{ */
{
wr_node_t *node;
+ int timeout;
int status;
int i;
int status;
int i;
@@
-157,7
+166,8
@@
static int wr_config_node (oconfig_item_t *ci) /* {{{ */
memset (node, 0, sizeof (*node));
node->host = NULL;
node->port = 0;
memset (node, 0, sizeof (*node));
node->host = NULL;
node->port = 0;
- node->timeout = 1000;
+ node->timeout.tv_sec = 0;
+ node->timeout.tv_usec = 1000;
node->conn = NULL;
pthread_mutex_init (&node->lock, /* attr = */ NULL);
node->conn = NULL;
pthread_mutex_init (&node->lock, /* attr = */ NULL);
@@
-183,8
+193,10
@@
static int wr_config_node (oconfig_item_t *ci) /* {{{ */
status = 0;
}
}
status = 0;
}
}
- else if (strcasecmp ("Timeout", child->key) == 0)
- status = cf_util_get_int (child, &node->timeout);
+ else if (strcasecmp ("Timeout", child->key) == 0) {
+ status = cf_util_get_int (child, &timeout);
+ if (status == 0) node->timeout.tv_usec = timeout;
+ }
else
WARNING ("write_redis plugin: Ignoring unknown config option \"%s\".",
child->key);
else
WARNING ("write_redis plugin: Ignoring unknown config option \"%s\".",
child->key);