X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fbackend%2Fcollectd.c;h=312d7acf553d79f93d982704d64df177df193b7a;hb=848efadda124a4778f08a84a082ff2436504d22c;hp=1cd650e7a4fc637df7adba007c8de15c809f23ce;hpb=95f07adac33e64df62570fc2a1dd38f3fa709cc4;p=sysdb.git diff --git a/src/backend/collectd.c b/src/backend/collectd.c index 1cd650e..312d7ac 100644 --- a/src/backend/collectd.c +++ b/src/backend/collectd.c @@ -1,5 +1,5 @@ /* - * syscollector - src/backend/collectd.c + * SysDB - src/backend/collectd.c * Copyright (C) 2012 Sebastian 'tokkee' Harl * All rights reserved. * @@ -25,9 +25,10 @@ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include "syscollector.h" +#include "sysdb.h" #include "core/plugin.h" #include "core/store.h" +#include "utils/error.h" #include "utils/string.h" #include "utils/unixsock.h" @@ -41,7 +42,7 @@ #include #include -SC_PLUGIN_MAGIC; +SDB_PLUGIN_MAGIC; /* * private data types @@ -49,20 +50,20 @@ SC_PLUGIN_MAGIC; typedef struct { char *current_host; - sc_time_t current_timestamp; + sdb_time_t current_timestamp; int svc_updated; int svc_failed; -} sc_collectd_state_t; -#define SC_COLLECTD_STATE_INIT { NULL, 0, 0, 0 } +} sdb_collectd_state_t; +#define SDB_COLLECTD_STATE_INIT { NULL, 0, 0, 0 } /* * private helper functions */ static int -sc_collectd_add_host(const char *hostname, sc_time_t last_update) +sdb_collectd_add_host(const char *hostname, sdb_time_t last_update) { - sc_host_t host = SC_HOST_INIT; + sdb_host_t host = SDB_HOST_INIT; char name[strlen(hostname) + 1]; int status; @@ -72,27 +73,27 @@ sc_collectd_add_host(const char *hostname, sc_time_t last_update) host.host_name = name; host.host_last_update = last_update; - status = sc_store_host(&host); + status = sdb_store_host(&host); if (status < 0) { - fprintf(stderr, "collectd backend: Failed to store/update " + sdb_log(SDB_LOG_ERR, "collectd backend: Failed to store/update " "host '%s'.\n", name); return -1; } else if (status > 0) /* value too old */ return 0; - fprintf(stderr, "collectd backend: Added/updated host '%s' " + sdb_log(SDB_LOG_DEBUG, "collectd backend: Added/updated host '%s' " "(last update timestamp = %"PRIscTIME").\n", name, last_update); return 0; -} /* sc_collectd_add_host */ +} /* sdb_collectd_add_host */ static int -sc_collectd_add_svc(const char *hostname, const char *plugin, - const char *type, sc_time_t last_update) +sdb_collectd_add_svc(const char *hostname, const char *plugin, + const char *type, sdb_time_t last_update) { - sc_service_t svc = SC_SVC_INIT; + sdb_service_t svc = SDB_SVC_INIT; char host[strlen(hostname) + 1]; char name[strlen(plugin) + strlen(type) + 2]; @@ -105,40 +106,40 @@ sc_collectd_add_svc(const char *hostname, const char *plugin, svc.svc_name = name; svc.svc_last_update = last_update; - status = sc_store_service(&svc); + status = sdb_store_service(&svc); if (status < 0) { - fprintf(stderr, "collectd backend: Failed to store/update " + sdb_log(SDB_LOG_ERR, "collectd backend: Failed to store/update " "service '%s/%s'.\n", host, name); return -1; } return 0; -} /* sc_collectd_add_svc */ +} /* sdb_collectd_add_svc */ static int -sc_collectd_get_data(sc_unixsock_client_t __attribute__((unused)) *client, - size_t n, sc_data_t *data, sc_object_t *user_data) +sdb_collectd_get_data(sdb_unixsock_client_t __attribute__((unused)) *client, + size_t n, sdb_data_t *data, sdb_object_t *user_data) { - sc_collectd_state_t *state; + sdb_collectd_state_t *state; const char *hostname; const char *plugin; const char *type; - sc_time_t last_update; + sdb_time_t last_update; assert(user_data); assert(n == 4); - assert((data[0].type == SC_TYPE_DATETIME) - && (data[1].type == SC_TYPE_STRING) - && (data[2].type == SC_TYPE_STRING) - && (data[3].type == SC_TYPE_STRING)); + assert((data[0].type == SDB_TYPE_DATETIME) + && (data[1].type == SDB_TYPE_STRING) + && (data[2].type == SDB_TYPE_STRING) + && (data[3].type == SDB_TYPE_STRING)); last_update = data[0].data.datetime; hostname = data[1].data.string; plugin = data[2].data.string; type = data[3].data.string; - state = SC_OBJ_WRAPPER(user_data)->data; + state = SDB_OBJ_WRAPPER(user_data)->data; if (! state->current_host) { state->current_host = strdup(hostname); @@ -147,16 +148,16 @@ sc_collectd_get_data(sc_unixsock_client_t __attribute__((unused)) *client, if (! state->current_host) { char errbuf[1024]; - fprintf(stderr, "collectd backend: Failed to allocate " + sdb_log(SDB_LOG_ERR, "collectd backend: Failed to allocate " "string buffer: %s\n", - sc_strerror(errno, errbuf, sizeof(errbuf))); + sdb_strerror(errno, errbuf, sizeof(errbuf))); return -1; } - if (! sc_store_get_host(hostname)) - sc_collectd_add_host(hostname, last_update); + if (! sdb_store_get_host(hostname)) + sdb_collectd_add_host(hostname, last_update); - if (sc_collectd_add_svc(hostname, plugin, type, last_update)) + if (sdb_collectd_add_svc(hostname, plugin, type, last_update)) ++state->svc_failed; else ++state->svc_updated; @@ -168,9 +169,9 @@ sc_collectd_get_data(sc_unixsock_client_t __attribute__((unused)) *client, } /* new host */ - sc_collectd_add_host(hostname, last_update); + sdb_collectd_add_host(hostname, last_update); - fprintf(stderr, "collectd backend: Added/updated " + sdb_log(SDB_LOG_DEBUG, "collectd backend: Added/updated " "%i service%s (%i failed) for host '%s'.\n", state->svc_updated, state->svc_updated == 1 ? "" : "s", state->svc_failed, state->current_host); @@ -180,43 +181,43 @@ sc_collectd_get_data(sc_unixsock_client_t __attribute__((unused)) *client, state->current_host = strdup(hostname); state->current_timestamp = last_update; return 0; -} /* sc_collectd_get_data */ +} /* sdb_collectd_get_data */ /* * plugin API */ static int -sc_collectd_init(sc_object_t *user_data) +sdb_collectd_init(sdb_object_t *user_data) { - sc_unixsock_client_t *client; + sdb_unixsock_client_t *client; if (! user_data) return -1; - client = SC_OBJ_WRAPPER(user_data)->data; - if (sc_unixsock_client_connect(client)) { - fprintf(stderr, "collectd backend: " + client = SDB_OBJ_WRAPPER(user_data)->data; + if (sdb_unixsock_client_connect(client)) { + sdb_log(SDB_LOG_ERR, "collectd backend: " "Failed to connect to collectd.\n"); return -1; } - fprintf(stderr, "collectd backend: Successfully " + sdb_log(SDB_LOG_INFO, "collectd backend: Successfully " "connected to collectd @ %s.\n", - sc_unixsock_client_path(client)); + sdb_unixsock_client_path(client)); return 0; -} /* sc_collectd_init */ +} /* sdb_collectd_init */ static int -sc_collectd_shutdown(__attribute__((unused)) sc_object_t *user_data) +sdb_collectd_shutdown(__attribute__((unused)) sdb_object_t *user_data) { return 0; -} /* sc_collectd_shutdown */ +} /* sdb_collectd_shutdown */ static int -sc_collectd_collect(sc_object_t *user_data) +sdb_collectd_collect(sdb_object_t *user_data) { - sc_unixsock_client_t *client; + sdb_unixsock_client_t *client; char buffer[1024]; char *line; @@ -225,26 +226,27 @@ sc_collectd_collect(sc_object_t *user_data) char *endptr = NULL; long int count; - sc_collectd_state_t state = SC_COLLECTD_STATE_INIT; - sc_object_wrapper_t state_obj = SC_OBJECT_WRAPPER_STATIC(&state, + sdb_collectd_state_t state = SDB_COLLECTD_STATE_INIT; + sdb_object_wrapper_t state_obj = SDB_OBJECT_WRAPPER_STATIC(&state, /* destructor = */ NULL); if (! user_data) return -1; - client = SC_OBJ_WRAPPER(user_data)->data; + client = SDB_OBJ_WRAPPER(user_data)->data; - if (sc_unixsock_client_send(client, "LISTVAL") <= 0) { - fprintf(stderr, "collectd backend: Failed to send LISTVAL command " - "to collectd @ %s.\n", sc_unixsock_client_path(client)); + if (sdb_unixsock_client_send(client, "LISTVAL") <= 0) { + sdb_log(SDB_LOG_ERR, "collectd backend: Failed to send LISTVAL " + "command to collectd @ %s.\n", + sdb_unixsock_client_path(client)); return -1; } - line = sc_unixsock_client_recv(client, buffer, sizeof(buffer)); + line = sdb_unixsock_client_recv(client, buffer, sizeof(buffer)); if (! line) { - fprintf(stderr, "collectd backend: Failed to read status " + sdb_log(SDB_LOG_ERR, "collectd backend: Failed to read status " "of LISTVAL command from collectd @ %s.\n", - sc_unixsock_client_path(client)); + sdb_unixsock_client_path(client)); return -1; } @@ -257,55 +259,56 @@ sc_collectd_collect(sc_object_t *user_data) errno = 0; count = strtol(line, &endptr, /* base */ 0); if (errno || (line == endptr)) { - fprintf(stderr, "collectd backend: Failed to parse status " + sdb_log(SDB_LOG_ERR, "collectd backend: Failed to parse status " "of LISTVAL command from collectd @ %s.\n", - sc_unixsock_client_path(client)); + sdb_unixsock_client_path(client)); return -1; } if (count < 0) { - fprintf(stderr, "collectd backend: Failed to get value list " - "from collectd @ %s: %s\n", sc_unixsock_client_path(client), + sdb_log(SDB_LOG_ERR, "collectd backend: Failed to get value " + "list from collectd @ %s: %s\n", + sdb_unixsock_client_path(client), msg ? msg : line); return -1; } - if (sc_unixsock_client_process_lines(client, sc_collectd_get_data, - SC_OBJ(&state_obj), count, /* delim */ " /", + if (sdb_unixsock_client_process_lines(client, sdb_collectd_get_data, + SDB_OBJ(&state_obj), count, /* delim */ " /", /* column count = */ 4, - SC_TYPE_DATETIME, SC_TYPE_STRING, - SC_TYPE_STRING, SC_TYPE_STRING)) { - fprintf(stderr, "collectd backend: Failed to read response " - "from collectd @ %s.\n", sc_unixsock_client_path(client)); + SDB_TYPE_DATETIME, SDB_TYPE_STRING, + SDB_TYPE_STRING, SDB_TYPE_STRING)) { + sdb_log(SDB_LOG_ERR, "collectd backend: Failed to read response " + "from collectd @ %s.\n", sdb_unixsock_client_path(client)); return -1; } if (state.current_host) { - sc_collectd_add_host(state.current_host, state.current_timestamp); - fprintf(stderr, "collectd backend: Added/updated " + sdb_collectd_add_host(state.current_host, state.current_timestamp); + sdb_log(SDB_LOG_DEBUG, "collectd backend: Added/updated " "%i service%s (%i failed) for host '%s'.\n", state.svc_updated, state.svc_updated == 1 ? "" : "s", state.svc_failed, state.current_host); } return 0; -} /* sc_collectd_collect */ +} /* sdb_collectd_collect */ static int -sc_collectd_config_instance(oconfig_item_t *ci) +sdb_collectd_config_instance(oconfig_item_t *ci) { char *name = NULL; - char *socket = NULL; + char *socket_path = NULL; char cb_name[1024]; - sc_object_t *user_data; - sc_unixsock_client_t *client; + sdb_object_t *user_data; + sdb_unixsock_client_t *client; int i; if (oconfig_get_string(ci, &name)) { - fprintf(stderr, "collectd backend: Instance requires a single " - "string argument\n\tUsage: \n"); + sdb_log(SDB_LOG_ERR, "collectd backend: Instance requires a " + "single string argument\n\tUsage: \n"); return -1; } @@ -313,15 +316,15 @@ sc_collectd_config_instance(oconfig_item_t *ci) oconfig_item_t *child = ci->children + i; if (! strcasecmp(child->key, "Socket")) - oconfig_get_string(child, &socket); + oconfig_get_string(child, &socket_path); else - fprintf(stderr, "collectd backend: Ignoring unknown config " - "option '%s' inside .\n", + sdb_log(SDB_LOG_WARNING, "collectd backend: Ignoring " + "unknown config option '%s' inside .\n", child->key, name); } - if (! socket) { - fprintf(stderr, "collectd backend: Instance '%s' missing " + if (! socket_path) { + sdb_log(SDB_LOG_ERR, "collectd backend: Instance '%s' missing " "the 'Socket' option.\n", name); return -1; } @@ -329,35 +332,37 @@ sc_collectd_config_instance(oconfig_item_t *ci) snprintf(cb_name, sizeof(cb_name), "collectd-%s", name); cb_name[sizeof(cb_name) - 1] = '\0'; - client = sc_unixsock_client_create(socket); + client = sdb_unixsock_client_create(socket_path); if (! client) { char errbuf[1024]; - fprintf(stderr, "collectd backend: Failed to create unixsock client: " - "%s\n", sc_strerror(errno, errbuf, sizeof(errbuf))); + sdb_log(SDB_LOG_ERR, "collectd backend: Failed to create " + "unixsock client: %s\n", + sdb_strerror(errno, errbuf, sizeof(errbuf))); return -1; } - user_data = sc_object_create_wrapper(client, - (void (*)(void *))sc_unixsock_client_destroy); + user_data = sdb_object_create_wrapper(client, + (void (*)(void *))sdb_unixsock_client_destroy); if (! user_data) { - sc_unixsock_client_destroy(client); - fprintf(stderr, "collectd backend: Failed to allocate sc_object_t\n"); + sdb_unixsock_client_destroy(client); + sdb_log(SDB_LOG_ERR, "collectd backend: Failed to allocate " + "sdb_object_t\n"); return -1; } - sc_plugin_register_init(cb_name, sc_collectd_init, user_data); - sc_plugin_register_shutdown(cb_name, sc_collectd_shutdown, user_data); + sdb_plugin_register_init(cb_name, sdb_collectd_init, user_data); + sdb_plugin_register_shutdown(cb_name, sdb_collectd_shutdown, user_data); - sc_plugin_register_collector(cb_name, sc_collectd_collect, + sdb_plugin_register_collector(cb_name, sdb_collectd_collect, /* interval */ NULL, user_data); /* pass control to the list */ - sc_object_deref(user_data); + sdb_object_deref(user_data); return 0; -} /* sc_collectd_config_instance */ +} /* sdb_collectd_config_instance */ static int -sc_collectd_config(oconfig_item_t *ci) +sdb_collectd_config(oconfig_item_t *ci) { int i; @@ -365,29 +370,29 @@ sc_collectd_config(oconfig_item_t *ci) oconfig_item_t *child = ci->children + i; if (! strcasecmp(child->key, "Instance")) - sc_collectd_config_instance(child); + sdb_collectd_config_instance(child); else - fprintf(stderr, "collectd backend: Ignoring unknown config " - "option '%s'.\n", child->key); + sdb_log(SDB_LOG_WARNING, "collectd backend: Ignoring " + "unknown config option '%s'.\n", child->key); } return 0; -} /* sc_collectd_config */ +} /* sdb_collectd_config */ int -sc_module_init(sc_plugin_info_t *info) +sdb_module_init(sdb_plugin_info_t *info) { - sc_plugin_set_info(info, SC_PLUGIN_INFO_NAME, "collectd"); - sc_plugin_set_info(info, SC_PLUGIN_INFO_DESC, + sdb_plugin_set_info(info, SDB_PLUGIN_INFO_NAME, "collectd"); + sdb_plugin_set_info(info, SDB_PLUGIN_INFO_DESC, "backend accessing the system statistics collection daemon"); - sc_plugin_set_info(info, SC_PLUGIN_INFO_COPYRIGHT, + sdb_plugin_set_info(info, SDB_PLUGIN_INFO_COPYRIGHT, "Copyright (C) 2012 Sebastian 'tokkee' Harl "); - sc_plugin_set_info(info, SC_PLUGIN_INFO_LICENSE, "BSD"); - sc_plugin_set_info(info, SC_PLUGIN_INFO_VERSION, SC_VERSION); - sc_plugin_set_info(info, SC_PLUGIN_INFO_PLUGIN_VERSION, SC_VERSION); + sdb_plugin_set_info(info, SDB_PLUGIN_INFO_LICENSE, "BSD"); + sdb_plugin_set_info(info, SDB_PLUGIN_INFO_VERSION, SDB_VERSION); + sdb_plugin_set_info(info, SDB_PLUGIN_INFO_PLUGIN_VERSION, SDB_VERSION); - sc_plugin_register_config("collectd", sc_collectd_config); + sdb_plugin_register_config("collectd", sdb_collectd_config); return 0; -} /* sc_version_extra */ +} /* sdb_version_extra */ /* vim: set tw=78 sw=4 ts=4 noexpandtab : */