projects
/
collectd.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
redis plugin: Fixed bug of Timeout option
[collectd.git]
/
src
/
redis.c
diff --git
a/src/redis.c
b/src/redis.c
index
05225b5
..
68158ed
100644
(file)
--- a/
src/redis.c
+++ b/
src/redis.c
@@
-35,8
+35,8
@@
#define REDIS_DEF_HOST "localhost"
#define REDIS_DEF_PASSWD ""
#define REDIS_DEF_PORT 6379
#define REDIS_DEF_HOST "localhost"
#define REDIS_DEF_PASSWD ""
#define REDIS_DEF_PORT 6379
-#define REDIS_DEF_TIMEOUT
2000
-#define REDIS_DEF_DB_COUNT
1
6
+#define REDIS_DEF_TIMEOUT
_SEC 2
+#define REDIS_DEF_DB_COUNT
25
6
#define MAX_REDIS_NODE_NAME 64
#define MAX_REDIS_PASSWD_LENGTH 512
#define MAX_REDIS_VAL_SIZE 256
#define MAX_REDIS_NODE_NAME 64
#define MAX_REDIS_PASSWD_LENGTH 512
#define MAX_REDIS_VAL_SIZE 256
@@
-60,6
+60,8
@@
struct redis_query_s {
char query[MAX_REDIS_QUERY];
char type[DATA_MAX_NAME_LEN];
char instance[DATA_MAX_NAME_LEN];
char query[MAX_REDIS_QUERY];
char type[DATA_MAX_NAME_LEN];
char instance[DATA_MAX_NAME_LEN];
+ int database;
+
redis_query_t *next;
};
redis_query_t *next;
};
@@
-76,7
+78,7
@@
struct redis_node_s {
redis_node_t *next;
};
redis_node_t *next;
};
-static redis_node_t *nodes_head
= NULL
;
+static redis_node_t *nodes_head;
static int redis_node_add(const redis_node_t *rn) /* {{{ */
{
static int redis_node_add(const redis_node_t *rn) /* {{{ */
{
@@
-137,6
+139,8
@@
static redis_query_t *redis_config_query(oconfig_item_t *ci) /* {{{ */
(void)sstrncpy(rq->instance, rq->query, sizeof(rq->instance));
replace_special(rq->instance, sizeof(rq->instance));
(void)sstrncpy(rq->instance, rq->query, sizeof(rq->instance));
replace_special(rq->instance, sizeof(rq->instance));
+ rq->database = 0;
+
for (int i = 0; i < ci->children_num; i++) {
oconfig_item_t *option = ci->children + i;
for (int i = 0; i < ci->children_num; i++) {
oconfig_item_t *option = ci->children + i;
@@
-145,6
+149,13
@@
static redis_query_t *redis_config_query(oconfig_item_t *ci) /* {{{ */
} else if (strcasecmp("Instance", option->key) == 0) {
status =
cf_util_get_string_buffer(option, rq->instance, sizeof(rq->instance));
} else if (strcasecmp("Instance", option->key) == 0) {
status =
cf_util_get_string_buffer(option, rq->instance, sizeof(rq->instance));
+ } else if (strcasecmp("Database", option->key) == 0) {
+ status = cf_util_get_int(option, &rq->database);
+ if (rq->database < 0) {
+ WARNING("redis plugin: The \"Database\" option must be positive "
+ "integer or zero");
+ status = -1;
+ }
} else {
WARNING("redis plugin: unknown configuration option: %s", option->key);
status = -1;
} else {
WARNING("redis plugin: unknown configuration option: %s", option->key);
status = -1;
@@
-165,7
+176,7
@@
static int redis_config_node(oconfig_item_t *ci) /* {{{ */
int timeout;
redis_node_t rn = {.port = REDIS_DEF_PORT,
int timeout;
redis_node_t rn = {.port = REDIS_DEF_PORT,
- .timeout.tv_
usec = REDIS_DEF_TIMEOUT
};
+ .timeout.tv_
sec = REDIS_DEF_TIMEOUT_SEC
};
sstrncpy(rn.host, REDIS_DEF_HOST, sizeof(rn.host));
sstrncpy(rn.host, REDIS_DEF_HOST, sizeof(rn.host));
@@
-194,8
+205,11
@@
static int redis_config_node(oconfig_item_t *ci) /* {{{ */
}
} else if (strcasecmp("Timeout", option->key) == 0) {
status = cf_util_get_int(option, &timeout);
}
} else if (strcasecmp("Timeout", option->key) == 0) {
status = cf_util_get_int(option, &timeout);
- if (status == 0)
- rn.timeout.tv_usec = timeout;
+ if (status == 0) {
+ rn.timeout.tv_usec = timeout * 1000;
+ rn.timeout.tv_sec = rn.timeout.tv_usec / 1000000L;
+ rn.timeout.tv_usec %= 1000000L;
+ }
} else if (strcasecmp("Password", option->key) == 0)
status = cf_util_get_string_buffer(option, rn.passwd, sizeof(rn.passwd));
else
} else if (strcasecmp("Password", option->key) == 0)
status = cf_util_get_string_buffer(option, rn.passwd, sizeof(rn.passwd));
else
@@
-257,8
+271,7
@@
static int redis_init(void) /* {{{ */
redis_node_t rn = {.name = "default",
.host = REDIS_DEF_HOST,
.port = REDIS_DEF_PORT,
redis_node_t rn = {.name = "default",
.host = REDIS_DEF_HOST,
.port = REDIS_DEF_PORT,
- .timeout.tv_sec = 0,
- .timeout.tv_usec = REDIS_DEF_TIMEOUT,
+ .timeout.tv_sec = REDIS_DEF_TIMEOUT_SEC,
.next = NULL};
if (nodes_head == NULL)
.next = NULL};
if (nodes_head == NULL)
@@
-313,6
+326,12
@@
static int redis_handle_query(redisContext *rh, redis_node_t *rn,
return -1;
}
return -1;
}
+ if ((rr = redisCommand(rh, "SELECT %d", rq->database)) == NULL) {
+ WARNING("redis plugin: unable to switch to database `%d' on node `%s'.",
+ rq->database, rn->name);
+ return -1;
+ }
+
if ((rr = redisCommand(rh, rq->query)) == NULL) {
WARNING("redis plugin: unable to carry out query `%s'.", rq->query);
return -1;
if ((rr = redisCommand(rh, rq->query)) == NULL) {
WARNING("redis plugin: unable to carry out query `%s'.", rq->query);
return -1;
@@
-364,13
+383,13
@@
static int redis_db_stats(char *node, char const *info_line) /* {{{ */
for (int db = 0; db < REDIS_DEF_DB_COUNT; db++) {
static char buf[MAX_REDIS_VAL_SIZE];
for (int db = 0; db < REDIS_DEF_DB_COUNT; db++) {
static char buf[MAX_REDIS_VAL_SIZE];
- static char field_name[1
1
];
- static char db_id[
3
];
+ static char field_name[1
2
];
+ static char db_id[
4
];
value_t val;
char *str;
int i;
value_t val;
char *str;
int i;
- s
s
nprintf(field_name, sizeof(field_name), "db%d:keys=", db);
+ snprintf(field_name, sizeof(field_name), "db%d:keys=", db);
str = strstr(info_line, field_name);
if (!str)
str = strstr(info_line, field_name);
if (!str)
@@
-386,7
+405,7
@@
static int redis_db_stats(char *node, char const *info_line) /* {{{ */
return -1;
}
return -1;
}
- s
s
nprintf(db_id, sizeof(db_id), "%d", db);
+ snprintf(db_id, sizeof(db_id), "%d", db);
redis_submit(node, "records", db_id, val);
}
return 0;
redis_submit(node, "records", db_id, val);
}
return 0;