From 848efadda124a4778f08a84a082ff2436504d22c Mon Sep 17 00:00:00 2001 From: Sebastian Harl Date: Sun, 10 Mar 2013 22:02:35 +0100 Subject: [PATCH] Renamed error recording / logging functions. sdb_error_set() now is sdb_log(); the sdb_error_start(), _append(), _finish() triple is now called sdb_error_set(), _append(), _log(). These names better describe what's actually going on. --- src/backend/collectd.c | 38 ++++++++++++------------- src/backend/mk-livestatus.c | 36 ++++++++++++------------ src/backend/puppet-storeconfigs.c | 44 ++++++++++++++--------------- src/core/plugin.c | 34 +++++++++++------------ src/core/store.c | 16 +++++------ src/daemon/config.c | 16 +++++------ src/daemon/sysdbd.c | 20 +++++++------- src/include/utils/error.h | 36 ++++++++++++++---------- src/utils/dbi.c | 28 +++++++++---------- src/utils/error.c | 46 +++++++++++++++---------------- src/utils/unixsock.c | 24 ++++++++-------- 11 files changed, 173 insertions(+), 165 deletions(-) diff --git a/src/backend/collectd.c b/src/backend/collectd.c index 2a834f5..312d7ac 100644 --- a/src/backend/collectd.c +++ b/src/backend/collectd.c @@ -76,14 +76,14 @@ sdb_collectd_add_host(const char *hostname, sdb_time_t last_update) status = sdb_store_host(&host); if (status < 0) { - sdb_error_set(SDB_LOG_ERR, "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; - sdb_error_set(SDB_LOG_DEBUG, "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; @@ -108,7 +108,7 @@ sdb_collectd_add_svc(const char *hostname, const char *plugin, status = sdb_store_service(&svc); if (status < 0) { - sdb_error_set(SDB_LOG_ERR, "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; } @@ -148,7 +148,7 @@ sdb_collectd_get_data(sdb_unixsock_client_t __attribute__((unused)) *client, if (! state->current_host) { char errbuf[1024]; - sdb_error_set(SDB_LOG_ERR, "collectd backend: Failed to allocate " + sdb_log(SDB_LOG_ERR, "collectd backend: Failed to allocate " "string buffer: %s\n", sdb_strerror(errno, errbuf, sizeof(errbuf))); return -1; @@ -171,7 +171,7 @@ sdb_collectd_get_data(sdb_unixsock_client_t __attribute__((unused)) *client, /* new host */ sdb_collectd_add_host(hostname, last_update); - sdb_error_set(SDB_LOG_DEBUG, "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); @@ -197,12 +197,12 @@ sdb_collectd_init(sdb_object_t *user_data) client = SDB_OBJ_WRAPPER(user_data)->data; if (sdb_unixsock_client_connect(client)) { - sdb_error_set(SDB_LOG_ERR, "collectd backend: " + sdb_log(SDB_LOG_ERR, "collectd backend: " "Failed to connect to collectd.\n"); return -1; } - sdb_error_set(SDB_LOG_INFO, "collectd backend: Successfully " + sdb_log(SDB_LOG_INFO, "collectd backend: Successfully " "connected to collectd @ %s.\n", sdb_unixsock_client_path(client)); return 0; @@ -236,7 +236,7 @@ sdb_collectd_collect(sdb_object_t *user_data) client = SDB_OBJ_WRAPPER(user_data)->data; if (sdb_unixsock_client_send(client, "LISTVAL") <= 0) { - sdb_error_set(SDB_LOG_ERR, "collectd backend: Failed to send LISTVAL " + sdb_log(SDB_LOG_ERR, "collectd backend: Failed to send LISTVAL " "command to collectd @ %s.\n", sdb_unixsock_client_path(client)); return -1; @@ -244,7 +244,7 @@ sdb_collectd_collect(sdb_object_t *user_data) line = sdb_unixsock_client_recv(client, buffer, sizeof(buffer)); if (! line) { - sdb_error_set(SDB_LOG_ERR, "collectd backend: Failed to read status " + sdb_log(SDB_LOG_ERR, "collectd backend: Failed to read status " "of LISTVAL command from collectd @ %s.\n", sdb_unixsock_client_path(client)); return -1; @@ -259,14 +259,14 @@ sdb_collectd_collect(sdb_object_t *user_data) errno = 0; count = strtol(line, &endptr, /* base */ 0); if (errno || (line == endptr)) { - sdb_error_set(SDB_LOG_ERR, "collectd backend: Failed to parse status " + sdb_log(SDB_LOG_ERR, "collectd backend: Failed to parse status " "of LISTVAL command from collectd @ %s.\n", sdb_unixsock_client_path(client)); return -1; } if (count < 0) { - sdb_error_set(SDB_LOG_ERR, "collectd backend: Failed to get value " + 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); @@ -278,14 +278,14 @@ sdb_collectd_collect(sdb_object_t *user_data) /* column count = */ 4, SDB_TYPE_DATETIME, SDB_TYPE_STRING, SDB_TYPE_STRING, SDB_TYPE_STRING)) { - sdb_error_set(SDB_LOG_ERR, "collectd backend: Failed to read response " + 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) { sdb_collectd_add_host(state.current_host, state.current_timestamp); - sdb_error_set(SDB_LOG_DEBUG, "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); @@ -307,7 +307,7 @@ sdb_collectd_config_instance(oconfig_item_t *ci) int i; if (oconfig_get_string(ci, &name)) { - sdb_error_set(SDB_LOG_ERR, "collectd backend: Instance requires a " + sdb_log(SDB_LOG_ERR, "collectd backend: Instance requires a " "single string argument\n\tUsage: \n"); return -1; } @@ -318,13 +318,13 @@ sdb_collectd_config_instance(oconfig_item_t *ci) if (! strcasecmp(child->key, "Socket")) oconfig_get_string(child, &socket_path); else - sdb_error_set(SDB_LOG_WARNING, "collectd backend: Ignoring " + sdb_log(SDB_LOG_WARNING, "collectd backend: Ignoring " "unknown config option '%s' inside .\n", child->key, name); } if (! socket_path) { - sdb_error_set(SDB_LOG_ERR, "collectd backend: Instance '%s' missing " + sdb_log(SDB_LOG_ERR, "collectd backend: Instance '%s' missing " "the 'Socket' option.\n", name); return -1; } @@ -335,7 +335,7 @@ sdb_collectd_config_instance(oconfig_item_t *ci) client = sdb_unixsock_client_create(socket_path); if (! client) { char errbuf[1024]; - sdb_error_set(SDB_LOG_ERR, "collectd backend: Failed to create " + sdb_log(SDB_LOG_ERR, "collectd backend: Failed to create " "unixsock client: %s\n", sdb_strerror(errno, errbuf, sizeof(errbuf))); return -1; @@ -345,7 +345,7 @@ sdb_collectd_config_instance(oconfig_item_t *ci) (void (*)(void *))sdb_unixsock_client_destroy); if (! user_data) { sdb_unixsock_client_destroy(client); - sdb_error_set(SDB_LOG_ERR, "collectd backend: Failed to allocate " + sdb_log(SDB_LOG_ERR, "collectd backend: Failed to allocate " "sdb_object_t\n"); return -1; } @@ -372,7 +372,7 @@ sdb_collectd_config(oconfig_item_t *ci) if (! strcasecmp(child->key, "Instance")) sdb_collectd_config_instance(child); else - sdb_error_set(SDB_LOG_WARNING, "collectd backend: Ignoring " + sdb_log(SDB_LOG_WARNING, "collectd backend: Ignoring " "unknown config option '%s'.\n", child->key); } return 0; diff --git a/src/backend/mk-livestatus.c b/src/backend/mk-livestatus.c index f65e758..5d8c377 100644 --- a/src/backend/mk-livestatus.c +++ b/src/backend/mk-livestatus.c @@ -73,7 +73,7 @@ sdb_livestatus_get_host(sdb_unixsock_client_t __attribute__((unused)) *client, status = sdb_store_host(&host); if (status < 0) { - sdb_error_set(SDB_LOG_ERR, "MK Livestatus backend: Failed to " + sdb_log(SDB_LOG_ERR, "MK Livestatus backend: Failed to " "store/update host '%s'.\n", hostname); free(hostname); return -1; @@ -81,7 +81,7 @@ sdb_livestatus_get_host(sdb_unixsock_client_t __attribute__((unused)) *client, else if (status > 0) /* value too old */ return 0; - sdb_error_set(SDB_LOG_DEBUG, "MK Livestatus backend: Added/updated " + sdb_log(SDB_LOG_DEBUG, "MK Livestatus backend: Added/updated " "host '%s' (last update timestamp = %"PRIscTIME").\n", hostname, timestamp); free(hostname); @@ -117,7 +117,7 @@ sdb_livestatus_get_svc(sdb_unixsock_client_t __attribute__((unused)) *client, status = sdb_store_service(&svc); if (status < 0) { - sdb_error_set(SDB_LOG_ERR, "MK Livestatus backend: Failed to " + sdb_log(SDB_LOG_ERR, "MK Livestatus backend: Failed to " "store/update service '%s / %s'.\n", hostname, svcname); free(hostname); free(svcname); @@ -126,7 +126,7 @@ sdb_livestatus_get_svc(sdb_unixsock_client_t __attribute__((unused)) *client, else if (status > 0) /* value too old */ return 0; - sdb_error_set(SDB_LOG_DEBUG, "MK Livestatus backend: Added/updated " + sdb_log(SDB_LOG_DEBUG, "MK Livestatus backend: Added/updated " "service '%s / %s' (last update timestamp = %"PRIscTIME").\n", hostname, svcname, timestamp); free(hostname); @@ -148,13 +148,13 @@ sdb_livestatus_init(sdb_object_t *user_data) client = SDB_OBJ_WRAPPER(user_data)->data; if (sdb_unixsock_client_connect(client)) { - sdb_error_set(SDB_LOG_ERR, "MK Livestatus backend: " + sdb_log(SDB_LOG_ERR, "MK Livestatus backend: " "Failed to connect to livestatus @ %s.\n", sdb_unixsock_client_path(client)); return -1; } - sdb_error_set(SDB_LOG_INFO, "MK Livestatus backend: Successfully " + sdb_log(SDB_LOG_INFO, "MK Livestatus backend: Successfully " "connected to livestatus @ %s.\n", sdb_unixsock_client_path(client)); return 0; @@ -175,7 +175,7 @@ sdb_livestatus_collect(sdb_object_t *user_data) status = sdb_unixsock_client_send(client, "GET hosts\r\n" "Columns: name last_check"); if (status <= 0) { - sdb_error_set(SDB_LOG_ERR, "MK Livestatus backend: Failed to send " + sdb_log(SDB_LOG_ERR, "MK Livestatus backend: Failed to send " "'GET hosts' command to livestatus @ %s.\n", sdb_unixsock_client_path(client)); return -1; @@ -186,7 +186,7 @@ sdb_livestatus_collect(sdb_object_t *user_data) if (sdb_unixsock_client_process_lines(client, sdb_livestatus_get_host, /* user data */ NULL, /* -> EOF */ -1, /* delim */ ";", /* column count */ 2, SDB_TYPE_STRING, SDB_TYPE_DATETIME)) { - sdb_error_set(SDB_LOG_ERR, "MK Livestatus backend: Failed to read " + sdb_log(SDB_LOG_ERR, "MK Livestatus backend: Failed to read " "response from livestatus @ %s while reading hosts.\n", sdb_unixsock_client_path(client)); return -1; @@ -195,7 +195,7 @@ sdb_livestatus_collect(sdb_object_t *user_data) if ((! sdb_unixsock_client_eof(client)) || sdb_unixsock_client_error(client)) { char errbuf[1024]; - sdb_error_set(SDB_LOG_ERR, "MK Livestatus backend: Failed to read " + sdb_log(SDB_LOG_ERR, "MK Livestatus backend: Failed to read " "host from livestatus @ %s: %s\n", sdb_unixsock_client_path(client), sdb_strerror(errno, errbuf, sizeof(errbuf))); @@ -205,7 +205,7 @@ sdb_livestatus_collect(sdb_object_t *user_data) status = sdb_unixsock_client_send(client, "GET services\r\n" "Columns: host_name description last_check"); if (status <= 0) { - sdb_error_set(SDB_LOG_ERR, "MK Livestatus backend: Failed to send " + sdb_log(SDB_LOG_ERR, "MK Livestatus backend: Failed to send " "'GET services' command to livestatus @ %s.\n", sdb_unixsock_client_path(client)); return -1; @@ -217,7 +217,7 @@ sdb_livestatus_collect(sdb_object_t *user_data) /* user data */ NULL, /* -> EOF */ -1, /* delim */ ";", /* column count */ 3, SDB_TYPE_STRING, SDB_TYPE_STRING, SDB_TYPE_DATETIME)) { - sdb_error_set(SDB_LOG_ERR, "MK Livestatus backend: Failed to read " + sdb_log(SDB_LOG_ERR, "MK Livestatus backend: Failed to read " "response from livestatus @ %s while reading services.\n", sdb_unixsock_client_path(client)); return -1; @@ -226,7 +226,7 @@ sdb_livestatus_collect(sdb_object_t *user_data) if ((! sdb_unixsock_client_eof(client)) || sdb_unixsock_client_error(client)) { char errbuf[1024]; - sdb_error_set(SDB_LOG_ERR, "MK Livestatus backend: Failed to read " + sdb_log(SDB_LOG_ERR, "MK Livestatus backend: Failed to read " "services from livestatus @ %s: %s\n", sdb_unixsock_client_path(client), sdb_strerror(errno, errbuf, sizeof(errbuf))); @@ -249,7 +249,7 @@ sdb_livestatus_config_instance(oconfig_item_t *ci) int i; if (oconfig_get_string(ci, &name)) { - sdb_error_set(SDB_LOG_ERR, "MK Livestatus backend: Instance requires " + sdb_log(SDB_LOG_ERR, "MK Livestatus backend: Instance requires " "a single string argument\n\tUsage: \n"); return -1; } @@ -260,13 +260,13 @@ sdb_livestatus_config_instance(oconfig_item_t *ci) if (! strcasecmp(child->key, "Socket")) oconfig_get_string(child, &socket_path); else - sdb_error_set(SDB_LOG_WARNING, "MK Livestatus backend: Ignoring " + sdb_log(SDB_LOG_WARNING, "MK Livestatus backend: Ignoring " "unknown config option '%s' inside .\n", child->key, name); } if (! socket_path) { - sdb_error_set(SDB_LOG_ERR, "MK Livestatus backend: Instance '%s' " + sdb_log(SDB_LOG_ERR, "MK Livestatus backend: Instance '%s' " "missing the 'Socket' option.\n", name); return -1; } @@ -277,7 +277,7 @@ sdb_livestatus_config_instance(oconfig_item_t *ci) client = sdb_unixsock_client_create(socket_path); if (! client) { char errbuf[1024]; - sdb_error_set(SDB_LOG_ERR, "MK Livestatus backend: Failed to create " + sdb_log(SDB_LOG_ERR, "MK Livestatus backend: Failed to create " "unixsock client: %s\n", sdb_strerror(errno, errbuf, sizeof(errbuf))); return -1; @@ -287,7 +287,7 @@ sdb_livestatus_config_instance(oconfig_item_t *ci) (void (*)(void *))sdb_unixsock_client_destroy); if (! user_data) { sdb_unixsock_client_destroy(client); - sdb_error_set(SDB_LOG_ERR, "MK Livestatus backend: Failed to " + sdb_log(SDB_LOG_ERR, "MK Livestatus backend: Failed to " "allocate sdb_object_t\n"); return -1; } @@ -312,7 +312,7 @@ sdb_livestatus_config(oconfig_item_t *ci) if (! strcasecmp(child->key, "Instance")) sdb_livestatus_config_instance(child); else - sdb_error_set(SDB_LOG_WARNING, "MK Livestatus backend: Ignoring " + sdb_log(SDB_LOG_WARNING, "MK Livestatus backend: Ignoring " "unknown config option '%s'.\n", child->key); } return 0; diff --git a/src/backend/puppet-storeconfigs.c b/src/backend/puppet-storeconfigs.c index 4c92c15..d55b764 100644 --- a/src/backend/puppet-storeconfigs.c +++ b/src/backend/puppet-storeconfigs.c @@ -67,13 +67,13 @@ sdb_puppet_stcfg_get_hosts(sdb_dbi_client_t __attribute__((unused)) *client, status = sdb_store_host(&host); if (status < 0) { - sdb_error_set(SDB_LOG_ERR, "puppet storeconfigs backend: Failed to " + sdb_log(SDB_LOG_ERR, "puppet storeconfigs backend: Failed to " "store/update host '%s'.\n", host.host_name); free(host.host_name); return -1; } else if (! status) - sdb_error_set(SDB_LOG_DEBUG, "puppet storeconfigs backend: " + sdb_log(SDB_LOG_DEBUG, "puppet storeconfigs backend: " "Added/updated host '%s' (last update timestamp = " "%"PRIscTIME").\n", host.host_name, host.host_last_update); free(host.host_name); @@ -103,7 +103,7 @@ sdb_puppet_stcfg_get_attrs(sdb_dbi_client_t __attribute__((unused)) *client, status = sdb_store_attribute(&attr); if (status < 0) { - sdb_error_set(SDB_LOG_ERR, "puppet storeconfigs backend: Failed to " + sdb_log(SDB_LOG_ERR, "puppet storeconfigs backend: Failed to " "store/update host attribute '%s' for host '%s'.\n", attr.attr_name, attr.hostname); free(attr.hostname); @@ -132,12 +132,12 @@ sdb_puppet_stcfg_init(sdb_object_t *user_data) client = SDB_OBJ_WRAPPER(user_data)->data; if (sdb_dbi_client_connect(client)) { - sdb_error_set(SDB_LOG_ERR, "puppet storeconfigs backend: " + sdb_log(SDB_LOG_ERR, "puppet storeconfigs backend: " "Failed to connect to the storeconfigs DB.\n"); return -1; } - sdb_error_set(SDB_LOG_INFO, "puppet storeconfigs backend: Successfully " + sdb_log(SDB_LOG_INFO, "puppet storeconfigs backend: Successfully " "connected to the storeconfigs DB.\n"); return 0; } /* sdb_puppet_stcfg_init */ @@ -152,7 +152,7 @@ sdb_puppet_stcfg_collect(sdb_object_t *user_data) client = SDB_OBJ_WRAPPER(user_data)->data; if (sdb_dbi_client_check_conn(client)) { - sdb_error_set(SDB_LOG_ERR, "puppet storeconfigs backend: " + sdb_log(SDB_LOG_ERR, "puppet storeconfigs backend: " "Connection to storeconfigs DB failed.\n"); return -1; } @@ -160,7 +160,7 @@ sdb_puppet_stcfg_collect(sdb_object_t *user_data) if (sdb_dbi_exec_query(client, "SELECT name, updated_at FROM hosts;", sdb_puppet_stcfg_get_hosts, NULL, /* #columns = */ 2, /* col types = */ SDB_TYPE_STRING, SDB_TYPE_DATETIME)) { - sdb_error_set(SDB_LOG_ERR, "puppet storeconfigs backend: Failed to " + sdb_log(SDB_LOG_ERR, "puppet storeconfigs backend: Failed to " "retrieve hosts from the storeconfigs DB.\n"); return -1; } @@ -178,7 +178,7 @@ sdb_puppet_stcfg_collect(sdb_object_t *user_data) sdb_puppet_stcfg_get_attrs, NULL, /* #columns = */ 4, /* col types = */ SDB_TYPE_STRING, SDB_TYPE_STRING, SDB_TYPE_STRING, SDB_TYPE_DATETIME)) { - sdb_error_set(SDB_LOG_ERR, "puppet storeconfigs backend: Failed to " + sdb_log(SDB_LOG_ERR, "puppet storeconfigs backend: Failed to " "retrieve host attributes from the storeconfigs DB.\n"); return -1; } @@ -201,7 +201,7 @@ sdb_puppet_stcfg_config_conn(oconfig_item_t *ci) int i; if (oconfig_get_string(ci, &name)) { - sdb_error_set(SDB_LOG_ERR, "puppet storeconfigs backend: Connection " + sdb_log(SDB_LOG_ERR, "puppet storeconfigs backend: Connection " "requires a single string argument\n" "\tUsage: \n"); return -1; @@ -215,7 +215,7 @@ sdb_puppet_stcfg_config_conn(oconfig_item_t *ci) if (! strcasecmp(child->key, "DBAdapter")) { if (oconfig_get_string(child, &driver)) { - sdb_error_set(SDB_LOG_ERR, "puppet storeconfigs backend: " + sdb_log(SDB_LOG_ERR, "puppet storeconfigs backend: " "DBAdapter requires a single string argument inside " "\n\tUsage: DBAdapter NAME\n", name); @@ -224,7 +224,7 @@ sdb_puppet_stcfg_config_conn(oconfig_item_t *ci) } else if (! strcasecmp(child->key, "DBName")) { if (oconfig_get_string(child, &database)) { - sdb_error_set(SDB_LOG_ERR, "puppet storeconfigs backend: " + sdb_log(SDB_LOG_ERR, "puppet storeconfigs backend: " "DBName requires a single string argument inside " "\n\tUsage: DBName NAME\n", name); @@ -251,7 +251,7 @@ sdb_puppet_stcfg_config_conn(oconfig_item_t *ci) if ((child->values_num != 2) || (child->values[0].type != OCONFIG_TYPE_STRING) || (child->values[1].type != OCONFIG_TYPE_STRING)) { - sdb_error_set(SDB_LOG_ERR, "puppet storeconfigs backend: " + sdb_log(SDB_LOG_ERR, "puppet storeconfigs backend: " "DBIOption requires exactly two string arguments " "inside \n" "\tUsage: DBIOption KEY VALUE\n", name); @@ -263,14 +263,14 @@ sdb_puppet_stcfg_config_conn(oconfig_item_t *ci) value = child->values[1].value.string; } else { - sdb_error_set(SDB_LOG_WARNING, "puppet storeconfigs backend: " + sdb_log(SDB_LOG_WARNING, "puppet storeconfigs backend: " "Ignoring unknown config option '%s' inside " ".\n", child->key, name); continue; } if (status) { - sdb_error_set(SDB_LOG_ERR, "puppet storeconfigs backend: Option " + sdb_log(SDB_LOG_ERR, "puppet storeconfigs backend: Option " "'%s' requires a single string argument inside " "\n\tUsage: DBAdapter NAME\n", child->key, name); @@ -282,7 +282,7 @@ sdb_puppet_stcfg_config_conn(oconfig_item_t *ci) if (! options) { if (! (options = sdb_dbi_options_create())) { char errmsg[1024]; - sdb_error_set(SDB_LOG_ERR, "puppet storeconfigs backend: " + sdb_log(SDB_LOG_ERR, "puppet storeconfigs backend: " "Failed to create DBI options object: %s\n", sdb_strerror(errno, errmsg, sizeof(errmsg))); continue; @@ -291,7 +291,7 @@ sdb_puppet_stcfg_config_conn(oconfig_item_t *ci) if (sdb_dbi_options_add(options, key, value)) { char errmsg[1024]; - sdb_error_set(SDB_LOG_ERR, "puppet storeconfigs backend: " + sdb_log(SDB_LOG_ERR, "puppet storeconfigs backend: " "Failed to add option '%s': %s\n", key, sdb_strerror(errno, errmsg, sizeof(errmsg))); continue; @@ -299,13 +299,13 @@ sdb_puppet_stcfg_config_conn(oconfig_item_t *ci) } if (! driver) { - sdb_error_set(SDB_LOG_ERR, "puppet storeconfigs backend: " + sdb_log(SDB_LOG_ERR, "puppet storeconfigs backend: " "Connection '%s' " "missing the 'DBAdapter' option.\n", name); return -1; } if (! database) { - sdb_error_set(SDB_LOG_ERR, "puppet storeconfigs backend: " + sdb_log(SDB_LOG_ERR, "puppet storeconfigs backend: " "Connection '%s' missing the 'DBName' option.\n", name); return -1; } @@ -316,7 +316,7 @@ sdb_puppet_stcfg_config_conn(oconfig_item_t *ci) client = sdb_dbi_client_create(driver, database); if (! client) { char errbuf[1024]; - sdb_error_set(SDB_LOG_ERR, "puppet storeconfigs backend: " + sdb_log(SDB_LOG_ERR, "puppet storeconfigs backend: " "Failed to create DBI client: %s\n", sdb_strerror(errno, errbuf, sizeof(errbuf))); return -1; @@ -328,7 +328,7 @@ sdb_puppet_stcfg_config_conn(oconfig_item_t *ci) (void (*)(void *))sdb_dbi_client_destroy); if (! user_data) { sdb_dbi_client_destroy(client); - sdb_error_set(SDB_LOG_ERR, "puppet storeconfigs backend: " + sdb_log(SDB_LOG_ERR, "puppet storeconfigs backend: " "Failed to allocate sdb_object_t\n"); return -1; } @@ -353,7 +353,7 @@ sdb_puppet_stcfg_config(oconfig_item_t *ci) if (! strcasecmp(child->key, "Connection")) sdb_puppet_stcfg_config_conn(child); else - sdb_error_set(SDB_LOG_WARNING, "puppet storeconfigs backend: " + sdb_log(SDB_LOG_WARNING, "puppet storeconfigs backend: " "Ignoring unknown config option '%s'.\n", child->key); } return 0; @@ -372,7 +372,7 @@ sdb_module_init(sdb_plugin_info_t *info) sdb_plugin_set_info(info, SDB_PLUGIN_INFO_PLUGIN_VERSION, SDB_VERSION); if (dbi_initialize(/* driver dir = */ NULL) < 0) { - sdb_error_set(SDB_LOG_ERR, "puppet storeconfigs backend: failed to " + sdb_log(SDB_LOG_ERR, "puppet storeconfigs backend: failed to " "initialize DBI; possibly you don't have any drivers " "installed.\n"); return -1; diff --git a/src/core/plugin.c b/src/core/plugin.c index 7f5883a..99f07cb 100644 --- a/src/core/plugin.c +++ b/src/core/plugin.c @@ -199,7 +199,7 @@ sdb_plugin_cb_init(sdb_object_t *obj, va_list ap) assert(obj); if (sdb_plugin_find_by_name(*list, name)) { - sdb_error_set(SDB_LOG_WARNING, "plugin: %s callback '%s' " + sdb_log(SDB_LOG_WARNING, "plugin: %s callback '%s' " "has already been registered. Ignoring newly " "registered version.\n", type, name); return -1; @@ -253,7 +253,7 @@ sdb_plugin_add_callback(sdb_llist_t **list, const char *type, /* pass control to the list */ sdb_object_deref(obj); - sdb_error_set(SDB_LOG_INFO, "plugin: Registered %s callback '%s'.\n", + sdb_log(SDB_LOG_INFO, "plugin: Registered %s callback '%s'.\n", type, name); return 0; } /* sdb_plugin_add_callback */ @@ -280,7 +280,7 @@ sdb_plugin_load(const char *name) if (access(filename, R_OK)) { char errbuf[1024]; - sdb_error_set(SDB_LOG_ERR, "plugin: Failed to load plugin '%s': %s\n", + sdb_log(SDB_LOG_ERR, "plugin: Failed to load plugin '%s': %s\n", name, sdb_strerror(errno, errbuf, sizeof(errbuf))); return -1; } @@ -290,7 +290,7 @@ sdb_plugin_load(const char *name) lh = lt_dlopen(filename); if (! lh) { - sdb_error_set(SDB_LOG_ERR, "plugin: Failed to load plugin '%s': %s\n" + sdb_log(SDB_LOG_ERR, "plugin: Failed to load plugin '%s': %s\n" "The most common cause for this problem are missing " "dependencies.\n", name, lt_dlerror()); return -1; @@ -298,14 +298,14 @@ sdb_plugin_load(const char *name) mod_init = (int (*)(sdb_plugin_info_t *))lt_dlsym(lh, "sdb_module_init"); if (! mod_init) { - sdb_error_set(SDB_LOG_ERR, "plugin: Failed to load plugin '%s': " + sdb_log(SDB_LOG_ERR, "plugin: Failed to load plugin '%s': " "could not find symbol 'sdb_module_init'\n", name); return -1; } status = mod_init(&plugin_info); if (status) { - sdb_error_set(SDB_LOG_ERR, "plugin: Failed to initialize " + sdb_log(SDB_LOG_ERR, "plugin: Failed to initialize " "plugin '%s'\n", name); return -1; } @@ -313,13 +313,13 @@ sdb_plugin_load(const char *name) /* compare minor version */ if ((plugin_info.version < 0) || ((int)(plugin_info.version / 100) != (int)(SDB_VERSION / 100))) - sdb_error_set(SDB_LOG_WARNING, "plugin: WARNING: version of " + sdb_log(SDB_LOG_WARNING, "plugin: WARNING: version of " "plugin '%s' (%i.%i.%i) does not match our version " "(%i.%i.%i); this might cause problems\n", name, SDB_VERSION_DECODE(plugin_info.version), SDB_VERSION_DECODE(SDB_VERSION)); - sdb_error_set(SDB_LOG_INFO, "plugin: Successfully loaded " + sdb_log(SDB_LOG_INFO, "plugin: Successfully loaded " "plugin '%s' v%i (%s)\n\t%s\n", plugin_info.name, plugin_info.plugin_version, plugin_info.description, plugin_info.copyright); @@ -438,7 +438,7 @@ sdb_plugin_register_collector(const char *name, sdb_plugin_collector_cb callback if (! (SDB_PLUGIN_CCB(obj)->ccb_next_update = sdb_gettime())) { char errbuf[1024]; - sdb_error_set(SDB_LOG_ERR, "plugin: Failed to determine current " + sdb_log(SDB_LOG_ERR, "plugin: Failed to determine current " "time: %s\n", sdb_strerror(errno, errbuf, sizeof(errbuf))); sdb_object_deref(obj); return -1; @@ -453,7 +453,7 @@ sdb_plugin_register_collector(const char *name, sdb_plugin_collector_cb callback /* pass control to the list */ sdb_object_deref(obj); - sdb_error_set(SDB_LOG_INFO, "plugin: Registered collector callback '%s' " + sdb_log(SDB_LOG_INFO, "plugin: Registered collector callback '%s' " "(interval = %.3fs).\n", name, SDB_TIME_TO_DOUBLE(SDB_PLUGIN_CCB(obj)->ccb_interval)); return 0; @@ -511,7 +511,7 @@ sdb_plugin_configure(const char *name, oconfig_item_t *ci) plugin = sdb_plugin_find_by_name(config_list, name); if (! plugin) { /* XXX: check if any such plugin has been loaded */ - sdb_error_set(SDB_LOG_ERR, "plugin: Plugin '%s' did not register " + sdb_log(SDB_LOG_ERR, "plugin: Plugin '%s' did not register " "a config callback.\n", name); errno = ENOENT; return -1; @@ -568,7 +568,7 @@ sdb_plugin_collector_loop(sdb_plugin_loop_t *loop) if (! (now = sdb_gettime())) { char errbuf[1024]; - sdb_error_set(SDB_LOG_ERR, "plugin: Failed to determine current " + sdb_log(SDB_LOG_ERR, "plugin: Failed to determine current " "time: %s\n", sdb_strerror(errno, errbuf, sizeof(errbuf))); now = SDB_PLUGIN_CCB(obj)->ccb_next_update; } @@ -580,7 +580,7 @@ sdb_plugin_collector_loop(sdb_plugin_loop_t *loop) while (loop->do_loop && sdb_sleep(interval, &interval)) { if (errno != EINTR) { char errbuf[1024]; - sdb_error_set(SDB_LOG_ERR, "plugin: Failed to sleep: %s\n", + sdb_log(SDB_LOG_ERR, "plugin: Failed to sleep: %s\n", sdb_strerror(errno, errbuf, sizeof(errbuf))); return -1; } @@ -601,7 +601,7 @@ sdb_plugin_collector_loop(sdb_plugin_loop_t *loop) if (! interval) interval = loop->default_interval; if (! interval) { - sdb_error_set(SDB_LOG_WARNING, "plugin: No interval configured " + sdb_log(SDB_LOG_WARNING, "plugin: No interval configured " "for plugin '%s'; skipping any further " "iterations.\n", SDB_PLUGIN_CCB(obj)->ccb_name); sdb_object_deref(obj); @@ -612,13 +612,13 @@ sdb_plugin_collector_loop(sdb_plugin_loop_t *loop) if (! (now = sdb_gettime())) { char errbuf[1024]; - sdb_error_set(SDB_LOG_ERR, "plugin: Failed to determine current " + sdb_log(SDB_LOG_ERR, "plugin: Failed to determine current " "time: %s\n", sdb_strerror(errno, errbuf, sizeof(errbuf))); now = SDB_PLUGIN_CCB(obj)->ccb_next_update; } if (now > SDB_PLUGIN_CCB(obj)->ccb_next_update) { - sdb_error_set(SDB_LOG_WARNING, "plugin: Plugin '%s' took too " + sdb_log(SDB_LOG_WARNING, "plugin: Plugin '%s' took too " "long; skipping iterations to keep up.\n", SDB_PLUGIN_CCB(obj)->ccb_name); SDB_PLUGIN_CCB(obj)->ccb_next_update = now; @@ -626,7 +626,7 @@ sdb_plugin_collector_loop(sdb_plugin_loop_t *loop) if (sdb_llist_insert_sorted(collector_list, obj, sdb_plugin_cmp_next_update)) { - sdb_error_set(SDB_LOG_ERR, "plugin: Failed to re-insert " + sdb_log(SDB_LOG_ERR, "plugin: Failed to re-insert " "plugin '%s' into collector list. Unable to further " "use the plugin.\n", SDB_PLUGIN_CCB(obj)->ccb_name); diff --git a/src/core/store.c b/src/core/store.c index a0bbf55..3901ba4 100644 --- a/src/core/store.c +++ b/src/core/store.c @@ -258,7 +258,7 @@ sdb_store_host(const sdb_host_t *host) if (old) { if (old->host_last_update > last_update) { - sdb_error_set(SDB_LOG_DEBUG, "store: Cannot update host '%s' - " + sdb_log(SDB_LOG_DEBUG, "store: Cannot update host '%s' - " "value too old (%"PRIscTIME" < %"PRIscTIME")\n", host->host_name, last_update, old->host_last_update); /* don't report an error; the host may be updated by multiple @@ -273,7 +273,7 @@ sdb_store_host(const sdb_host_t *host) sdb_host_t *new = sdb_host_clone(host); if (! new) { char errbuf[1024]; - sdb_error_set(SDB_LOG_ERR, "store: Failed to clone host object: " + sdb_log(SDB_LOG_ERR, "store: Failed to clone host object: " "%s\n", sdb_strerror(errno, errbuf, sizeof(errbuf))); pthread_rwlock_unlock(&host_lock); return -1; @@ -282,7 +282,7 @@ sdb_store_host(const sdb_host_t *host) if (! new->attributes) { if (! (new->attributes = sdb_llist_create())) { char errbuf[1024]; - sdb_error_set(SDB_LOG_ERR, "store: Failed to initialize " + sdb_log(SDB_LOG_ERR, "store: Failed to initialize " "host object '%s': %s\n", host->host_name, sdb_strerror(errno, errbuf, sizeof(errbuf))); sdb_object_deref(SDB_OBJ(new)); @@ -294,7 +294,7 @@ sdb_store_host(const sdb_host_t *host) if (! new->services) { if (! (new->services = sdb_llist_create())) { char errbuf[1024]; - sdb_error_set(SDB_LOG_ERR, "store: Failed to initialize " + sdb_log(SDB_LOG_ERR, "store: Failed to initialize " "host object '%s': %s\n", host->host_name, sdb_strerror(errno, errbuf, sizeof(errbuf))); sdb_object_deref(SDB_OBJ(new)); @@ -402,7 +402,7 @@ sdb_store_attribute(const sdb_attribute_t *attr) if (old) { if (old->host_last_update > last_update) { - sdb_error_set(SDB_LOG_DEBUG, "store: Cannot update attribute " + sdb_log(SDB_LOG_DEBUG, "store: Cannot update attribute " "'%s/%s' - value too old (%"PRIscTIME" < %"PRIscTIME")\n", attr->hostname, attr->attr_name, last_update, old->host_last_update); @@ -416,7 +416,7 @@ sdb_store_attribute(const sdb_attribute_t *attr) sdb_attribute_t *new = sdb_attribute_clone(attr); if (! new) { char errbuf[1024]; - sdb_error_set(SDB_LOG_ERR, "store: Failed to clone attribute " + sdb_log(SDB_LOG_ERR, "store: Failed to clone attribute " "object: %s\n", sdb_strerror(errno, errbuf, sizeof(errbuf))); pthread_rwlock_unlock(&host_lock); return -1; @@ -500,7 +500,7 @@ sdb_store_service(const sdb_service_t *svc) if (old) { if (old->host_last_update > last_update) { - sdb_error_set(SDB_LOG_DEBUG, "store: Cannot update service " + sdb_log(SDB_LOG_DEBUG, "store: Cannot update service " "'%s/%s' - value too old (%"PRIscTIME" < %"PRIscTIME")\n", svc->hostname, svc->svc_name, last_update, old->host_last_update); @@ -514,7 +514,7 @@ sdb_store_service(const sdb_service_t *svc) sdb_service_t *new = sdb_service_clone(svc); if (! new) { char errbuf[1024]; - sdb_error_set(SDB_LOG_ERR, "store: Failed to clone service " + sdb_log(SDB_LOG_ERR, "store: Failed to clone service " "object: %s\n", sdb_strerror(errno, errbuf, sizeof(errbuf))); pthread_rwlock_unlock(&host_lock); return -1; diff --git a/src/daemon/config.c b/src/daemon/config.c index ea870c2..2975e06 100644 --- a/src/daemon/config.c +++ b/src/daemon/config.c @@ -56,14 +56,14 @@ config_get_interval(oconfig_item_t *ci, sdb_time_t *interval) assert(ci && interval); if (oconfig_get_number(ci, &interval_dbl)) { - sdb_error_set(SDB_LOG_ERR, "config: Interval requires " + sdb_log(SDB_LOG_ERR, "config: Interval requires " "a single numeric argument\n" "\tUsage: Interval SECONDS\n"); return -1; } if (interval_dbl <= 0.0) { - sdb_error_set(SDB_LOG_ERR, "config: Invalid interval: %f\n" + sdb_log(SDB_LOG_ERR, "config: Invalid interval: %f\n" "\tInterval may not be less than or equal to zero.\n", interval_dbl); return -1; @@ -102,7 +102,7 @@ daemon_load_backend(oconfig_item_t *ci) ctx.interval = default_interval; if (oconfig_get_string(ci, &name)) { - sdb_error_set(SDB_LOG_ERR, "config: LoadBackend requires a single " + sdb_log(SDB_LOG_ERR, "config: LoadBackend requires a single " "string argument\n" "\tUsage: LoadBackend BACKEND\n"); return -1; @@ -118,7 +118,7 @@ daemon_load_backend(oconfig_item_t *ci) return -1; } else { - sdb_error_set(SDB_LOG_WARNING, "config: Unknown option '%s' " + sdb_log(SDB_LOG_WARNING, "config: Unknown option '%s' " "inside 'LoadBackend' -- see the documentation for " "details.\n", child->key); continue; @@ -139,7 +139,7 @@ daemon_configure_plugin(oconfig_item_t *ci) assert(ci); if (oconfig_get_string(ci, &name)) { - sdb_error_set(SDB_LOG_ERR, "config: %s requires a single " + sdb_log(SDB_LOG_ERR, "config: %s requires a single " "string argument\n" "\tUsage: LoadBackend BACKEND\n", ci->key); @@ -181,13 +181,13 @@ daemon_parse_config(const char *filename) } if (status) { - sdb_error_start(SDB_LOG_ERR, "config: Failed to parse option " - "'%s'\n", child->key); + sdb_error_set("config: Failed to parse option '%s'\n", + child->key); if (status > 0) sdb_error_append("\tUnknown option '%s' -- " "see the documentation for details\n", child->key); - sdb_error_finish(); + sdb_error_log(SDB_LOG_ERR); retval = -1; } } diff --git a/src/daemon/sysdbd.c b/src/daemon/sysdbd.c index d4851f8..5a901a2 100644 --- a/src/daemon/sysdbd.c +++ b/src/daemon/sysdbd.c @@ -109,7 +109,7 @@ daemonize(void) if ((pid = fork()) < 0) { char errbuf[1024]; - sdb_error_set(SDB_LOG_ERR, "Failed to fork to background: %s\n", + sdb_log(SDB_LOG_ERR, "Failed to fork to background: %s\n", sdb_strerror(errno, errbuf, sizeof(errbuf))); return errno; } @@ -120,7 +120,7 @@ daemonize(void) if (chdir("/")) { char errbuf[1024]; - sdb_error_set(SDB_LOG_ERR, "Failed to change working directory to " + sdb_log(SDB_LOG_ERR, "Failed to change working directory to " "the root directory: %s\n", sdb_strerror(errno, errbuf, sizeof(errbuf))); return errno; @@ -132,7 +132,7 @@ daemonize(void) close(0); if (open("/dev/null", O_RDWR)) { char errbuf[1024]; - sdb_error_set(SDB_LOG_ERR, "Failed to connect stdin to '/dev/null': " + sdb_log(SDB_LOG_ERR, "Failed to connect stdin to '/dev/null': " "%s\n", sdb_strerror(errno, errbuf, sizeof(errbuf))); return errno; } @@ -140,7 +140,7 @@ daemonize(void) close(1); if (dup(0) != 1) { char errbuf[1024]; - sdb_error_set(SDB_LOG_ERR, "Could not connect stdout to '/dev/null': " + sdb_log(SDB_LOG_ERR, "Could not connect stdout to '/dev/null': " "%s\n", sdb_strerror(errno, errbuf, sizeof(errbuf))); return errno; } @@ -148,7 +148,7 @@ daemonize(void) close(2); if (dup(0) != 2) { char errbuf[1024]; - sdb_error_set(SDB_LOG_ERR, "Could not connect stderr to '/dev/null': " + sdb_log(SDB_LOG_ERR, "Could not connect stderr to '/dev/null': " "%s\n", sdb_strerror(errno, errbuf, sizeof(errbuf))); return errno; } @@ -195,7 +195,7 @@ main(int argc, char **argv) config_filename = CONFIGFILE; if (daemon_parse_config(config_filename)) { - sdb_error_set(SDB_LOG_ERR, "Failed to parse configuration file.\n"); + sdb_log(SDB_LOG_ERR, "Failed to parse configuration file.\n"); exit(1); } @@ -205,13 +205,13 @@ main(int argc, char **argv) if (sigaction(SIGINT, &sa_intterm, /* old action */ NULL)) { char errbuf[1024]; - sdb_error_set(SDB_LOG_ERR, "Failed to install signal handler for " + sdb_log(SDB_LOG_ERR, "Failed to install signal handler for " "SIGINT: %s\n", sdb_strerror(errno, errbuf, sizeof(errbuf))); exit(1); } if (sigaction(SIGTERM, &sa_intterm, /* old action */ NULL)) { char errbuf[1024]; - sdb_error_set(SDB_LOG_ERR, "Failed to install signal handler for " + sdb_log(SDB_LOG_ERR, "Failed to install signal handler for " "SIGTERM: %s\n", sdb_strerror(errno, errbuf, sizeof(errbuf))); exit(1); } @@ -220,14 +220,14 @@ main(int argc, char **argv) if (daemonize()) exit(1); - sdb_error_set(SDB_LOG_INFO, "SysDB daemon "SDB_VERSION_STRING + sdb_log(SDB_LOG_INFO, "SysDB daemon "SDB_VERSION_STRING SDB_VERSION_EXTRA " (pid %i) initialized successfully\n", (int)getpid()); sdb_plugin_init_all(); sdb_plugin_collector_loop(&plugin_main_loop); - sdb_error_set(SDB_LOG_INFO, "Shutting down SysDB daemon "SDB_VERSION_STRING + sdb_log(SDB_LOG_INFO, "Shutting down SysDB daemon "SDB_VERSION_STRING SDB_VERSION_EXTRA" (pid %i)\n", (int)getpid()); fprintf(stderr, "Store dump:\n"); diff --git a/src/include/utils/error.h b/src/include/utils/error.h index 8b2a177..73b48ba 100644 --- a/src/include/utils/error.h +++ b/src/include/utils/error.h @@ -60,34 +60,42 @@ enum { }; #define SDB_LOG_PRIO_TO_STRING(prio) \ (((prio) == SDB_LOG_EMERG) ? "EMERG" \ - : ((prio) == SDB_LOG_ERR) ? "ERR" \ + : ((prio) == SDB_LOG_ERR) ? "ERROR" \ : ((prio) == SDB_LOG_WARNING) ? "WARNING" \ : ((prio) == SDB_LOG_NOTICE) ? "NOTICE" \ : ((prio) == SDB_LOG_INFO) ? "INFO" \ : ((prio) == SDB_LOG_DEBUG) ? "DEBUG" : "UNKNOWN") /* - * sdb_error_set: - * Set the current error message. The string will be formated in printf-style + * sdb_log: + * Log the specified message. The string will be formatted in printf-style * using the specified format and arguments and logged with the specified - * priority. XXX: SDB_LOG_EMERG might, at some point and/or depending on - * configuration, try a clean shut-down of the process. + * priority. In addition, the error message will be stored as the current + * error message. This function is basically the same as calling sdb_error_set + * and sdb_error_log. XXX: SDB_LOG_EMERG might, at some point and/or depending + * on configuration, try a clean shut-down of the process. */ int -sdb_error_set(int prio, const char *fmt, ...); +sdb_log(int prio, const char *fmt, ...); /* - * sdb_error_start, sdb_error_append, sdb_error_end: - * Compose the current error message from multiple parts. The error message - * will only be logged after calling sdb_error_finish(). - * See sdb_error_set for details. + * sdb_error_set, sdb_error_append: + * Compose the current error message. The string will be formatted in printf- + * style using the specified format and arguments. No automatic logging will + * be done. */ int -sdb_error_start(int prio, const char *fmt, ...); +sdb_error_set(const char *fmt, ...); int sdb_error_append(const char *fmt, ...); + +/* + * sdb_error_log: + * Log the current error message with the specified priority. See sdb_log for + * more information. + */ int -sdb_error_finish(void); +sdb_error_log(int prio); /* * sdb_error_get: @@ -100,8 +108,8 @@ sdb_error_get(void); /* * sdb_error_get_prio: - * Get the priority of the current error message -- see the SDB_LOG_ constants - * for details. + * Get the priority of the last logged error message -- see the SDB_LOG_ + * constants for details. */ int sdb_error_get_prio(void); diff --git a/src/utils/dbi.c b/src/utils/dbi.c index dc1d6e4..60b47c4 100644 --- a/src/utils/dbi.c +++ b/src/utils/dbi.c @@ -102,7 +102,7 @@ sdb_dbi_get_field(dbi_result res, unsigned int i, } break; default: - sdb_error_set(SDB_LOG_ERR, "dbi: Unexpected type %i while " + sdb_log(SDB_LOG_ERR, "dbi: Unexpected type %i while " "parsing query result.\n", type); return -1; } @@ -129,7 +129,7 @@ sdb_dbi_get_data(sdb_dbi_client_t *client, dbi_result res, for (i = 0; i < num_fields; ++i) { types[i] = dbi_result_get_field_type_idx(res, i + 1); if (types[i] == DBI_TYPE_ERROR) { - sdb_error_set(SDB_LOG_ERR, "dbi: failed to fetch data: %s\n", + sdb_log(SDB_LOG_ERR, "dbi: failed to fetch data: %s\n", sdb_dbi_strerror(client->conn)); return -1; } @@ -142,7 +142,7 @@ sdb_dbi_get_data(sdb_dbi_client_t *client, dbi_result res, for (n = 0; n < num_rows; ++n) { if (! dbi_result_seek_row(res, n + 1)) { - sdb_error_set(SDB_LOG_ERR, "dbi: Failed to retrieve row %llu: " + sdb_log(SDB_LOG_ERR, "dbi: Failed to retrieve row %llu: " "%s\n", n, sdb_dbi_strerror(client->conn)); continue; } @@ -289,7 +289,7 @@ sdb_dbi_client_connect(sdb_dbi_client_t *client) driver = dbi_driver_open(client->driver); if (! driver) { - sdb_error_start(SDB_LOG_ERR, "dbi: failed to open DBI driver '%s'; " + sdb_error_set("dbi: failed to open DBI driver '%s'; " "possibly it's not installed.\n", client->driver); @@ -298,13 +298,13 @@ sdb_dbi_client_connect(sdb_dbi_client_t *client) driver = dbi_driver_list(driver)) { sdb_error_append("\t- %s\n", dbi_driver_get_name(driver)); } - sdb_error_finish(); + sdb_error_log(SDB_LOG_ERR); return -1; } client->conn = dbi_conn_open(driver); if (! client->conn) { - sdb_error_set(SDB_LOG_ERR, "dbi: failed to open connection " + sdb_log(SDB_LOG_ERR, "dbi: failed to open connection " "object.\n"); return -1; } @@ -319,7 +319,7 @@ sdb_dbi_client_connect(sdb_dbi_client_t *client) continue; /* else: error */ - sdb_error_start(SDB_LOG_ERR, "dbi: failed to set option '%s': " + sdb_error_set("dbi: failed to set option '%s': " "%s\n", client->options->options[i].key, sdb_dbi_strerror(client->conn)); @@ -327,7 +327,7 @@ sdb_dbi_client_connect(sdb_dbi_client_t *client) for (opt = dbi_conn_get_option_list(client->conn, NULL); opt; opt = dbi_conn_get_option_list(client->conn, opt)) sdb_error_append("\t- %s\n", opt); - sdb_error_finish(); + sdb_error_log(SDB_LOG_ERR); dbi_conn_close(client->conn); return -1; @@ -335,14 +335,14 @@ sdb_dbi_client_connect(sdb_dbi_client_t *client) } if (dbi_conn_set_option(client->conn, "dbname", client->database)) { - sdb_error_set(SDB_LOG_ERR, "dbi: failed to set option 'dbname': %s\n", + sdb_log(SDB_LOG_ERR, "dbi: failed to set option 'dbname': %s\n", sdb_dbi_strerror(client->conn)); dbi_conn_close(client->conn); return -1; } if (dbi_conn_connect(client->conn) < 0) { - sdb_error_set(SDB_LOG_ERR, "dbi: failed to connect to database '%s': " + sdb_log(SDB_LOG_ERR, "dbi: failed to connect to database '%s': " "%s\n", client->database, sdb_dbi_strerror(client->conn)); dbi_conn_close(client->conn); return -1; @@ -378,13 +378,13 @@ sdb_dbi_exec_query(sdb_dbi_client_t *client, const char *query, res = dbi_conn_query(client->conn, query); if (! res) { - sdb_error_set(SDB_LOG_ERR, "dbi: failed to execute query '%s': %s\n", + sdb_log(SDB_LOG_ERR, "dbi: failed to execute query '%s': %s\n", query, sdb_dbi_strerror(client->conn)); return -1; } if (dbi_result_get_numrows(res) == DBI_ROW_ERROR) { - sdb_error_set(SDB_LOG_ERR, "dbi: failed to fetch rows for query " + sdb_log(SDB_LOG_ERR, "dbi: failed to fetch rows for query " "'%s': %s\n", query, sdb_dbi_strerror(client->conn)); dbi_result_free(res); return -1; @@ -402,7 +402,7 @@ sdb_dbi_exec_query(sdb_dbi_client_t *client, const char *query, int i; if (n != (int)num_fields) { - sdb_error_set(SDB_LOG_ERR, "dbi: number of returned fields (%i) " + sdb_log(SDB_LOG_ERR, "dbi: number of returned fields (%i) " "does not match the number of requested fields (%i) " "for query '%s'.\n", num_fields, n, query); dbi_result_free(res); @@ -422,7 +422,7 @@ sdb_dbi_exec_query(sdb_dbi_client_t *client, const char *query, /* column count starts at 1 */ if ((unsigned int)field_type != type) { - sdb_error_set(SDB_LOG_ERR, "dbi: type of column '%s' (%u) " + sdb_log(SDB_LOG_ERR, "dbi: type of column '%s' (%u) " "does not match requested type (%u).\n", dbi_result_get_field_name(res, (unsigned int)i + 1), field_type, type); diff --git a/src/utils/error.c b/src/utils/error.c index 08a77f1..7eef712 100644 --- a/src/utils/error.c +++ b/src/utils/error.c @@ -42,7 +42,7 @@ typedef struct { int prio; char msg[SDB_MAX_ERROR]; - _Bool finalized; + _Bool logged; } sdb_error_ctx_t; #define SDB_ERROR_INIT { -1, "", 1 } @@ -121,12 +121,12 @@ sdb_error_clear(void) ctx->prio = -1; ctx->msg[0] = '\0'; - ctx->finalized = 1; + ctx->logged = 1; return 0; } /* sdb_error_clear */ static int -sdb_error_vappend(int prio, const char *fmt, va_list ap) +sdb_error_vappend(const char *fmt, va_list ap) { sdb_error_ctx_t *ctx; size_t len; @@ -139,15 +139,12 @@ sdb_error_vappend(int prio, const char *fmt, va_list ap) if (len >= sizeof(ctx->msg)) return 0; /* nothing written */ - if (prio >= 0) - ctx->prio = prio; - - ctx->finalized = 0; + ctx->logged = 0; return vsnprintf(ctx->msg + len, sizeof(ctx->msg) - len, fmt, ap); } /* sdb_error_vappend */ static int -sdb_error_log(void) +sdb_do_log(int prio) { sdb_error_ctx_t *ctx; int ret; @@ -156,21 +153,24 @@ sdb_error_log(void) if (! ctx) return -1; - if (ctx->finalized) + if (prio >= 0) + ctx->prio = prio; + + if (ctx->logged) return 0; ret = fprintf(stderr, "[%s] %s\n", - SDB_LOG_PRIO_TO_STRING(ctx->prio), ctx->msg); - ctx->finalized = 1; + SDB_LOG_PRIO_TO_STRING(prio), ctx->msg); + ctx->logged = 1; return ret; -} /* sdb_error_log */ +} /* sdb_do_log */ /* * public API */ int -sdb_error_set(int prio, const char *fmt, ...) +sdb_log(int prio, const char *fmt, ...) { va_list ap; int ret; @@ -179,15 +179,15 @@ sdb_error_set(int prio, const char *fmt, ...) return -1; va_start(ap, fmt); - ret = sdb_error_vappend(prio, fmt, ap); + ret = sdb_error_vappend(fmt, ap); va_end(ap); - sdb_error_log(); + sdb_do_log(prio); return ret; -} /* sdb_error_set */ +} /* sdb_log */ int -sdb_error_start(int prio, const char *fmt, ...) +sdb_error_set(const char *fmt, ...) { va_list ap; int ret; @@ -196,11 +196,11 @@ sdb_error_start(int prio, const char *fmt, ...) return -1; va_start(ap, fmt); - ret = sdb_error_vappend(prio, fmt, ap); + ret = sdb_error_vappend(fmt, ap); va_end(ap); return ret; -} /* sdb_error_start */ +} /* sdb_error_set */ int sdb_error_append(const char *fmt, ...) @@ -209,17 +209,17 @@ sdb_error_append(const char *fmt, ...) int ret; va_start(ap, fmt); - ret = sdb_error_vappend(/* dont change prio */ -1, fmt, ap); + ret = sdb_error_vappend(fmt, ap); va_end(ap); return ret; } /* sdb_error_append */ int -sdb_error_finish(void) +sdb_error_log(int prio) { - return sdb_error_log(); -} /* sdb_error_finish */ + return sdb_do_log(prio); +} /* sdb_error_log */ const char * sdb_error_get(void) diff --git a/src/utils/unixsock.c b/src/utils/unixsock.c index b4b9772..08233f8 100644 --- a/src/utils/unixsock.c +++ b/src/utils/unixsock.c @@ -117,7 +117,7 @@ sdb_unixsock_parse_cell(char *string, int type, sdb_data_t *data) data->data.binary.datum = (const unsigned char *)string; break; default: - sdb_error_set(SDB_LOG_ERR, "unixsock: Unexpected type %i while " + sdb_log(SDB_LOG_ERR, "unixsock: Unexpected type %i while " "parsing query result.\n", type); return -1; } @@ -126,13 +126,13 @@ sdb_unixsock_parse_cell(char *string, int type, sdb_data_t *data) || (type == SDB_TYPE_DATETIME)) { if (errno || (string == endptr)) { char errbuf[1024]; - sdb_error_set(SDB_LOG_ERR, "unixsock: Failed to parse string " + sdb_log(SDB_LOG_ERR, "unixsock: Failed to parse string " "'%s' as numeric value (type %i): %s\n", string, type, sdb_strerror(errno, errbuf, sizeof(errbuf))); return -1; } else if (endptr && (*endptr != '\0')) - sdb_error_set(SDB_LOG_WARNING, "unixsock: Ignoring garbage after " + sdb_log(SDB_LOG_WARNING, "unixsock: Ignoring garbage after " "number while parsing numeric value (type %i): %s.\n", type, endptr); } @@ -158,7 +158,7 @@ sdb_unixsock_client_process_one_line(sdb_unixsock_client_t *client, char *next; if (! line) { /* this must no happen */ - sdb_error_set(SDB_LOG_ERR, "unixsock: Unexpected EOL while " + sdb_log(SDB_LOG_ERR, "unixsock: Unexpected EOL while " "parsing line (expected %i columns delimited by '%s'; " "got %i): %s\n", column_count, delim, /* last line number */ i, orig_line); @@ -232,7 +232,7 @@ sdb_unixsock_client_connect(sdb_unixsock_client_t *client) fd = socket(AF_UNIX, SOCK_STREAM, /* protocol = */ 0); if (fd < 0) { char errbuf[1024]; - sdb_error_set(SDB_LOG_ERR, "unixsock: Failed to open socket: %s\n", + sdb_log(SDB_LOG_ERR, "unixsock: Failed to open socket: %s\n", sdb_strerror(errno, errbuf, sizeof(errbuf))); return -1; } @@ -243,7 +243,7 @@ sdb_unixsock_client_connect(sdb_unixsock_client_t *client) if (connect(fd, (struct sockaddr *)&sa, sizeof(sa))) { char errbuf[1024]; - sdb_error_set(SDB_LOG_ERR, "unixsock: Failed to connect to %s: %s\n", + sdb_log(SDB_LOG_ERR, "unixsock: Failed to connect to %s: %s\n", sa.sun_path, sdb_strerror(errno, errbuf, sizeof(errbuf))); close(fd); return -1; @@ -252,7 +252,7 @@ sdb_unixsock_client_connect(sdb_unixsock_client_t *client) client->fh = fdopen(fd, "r+"); if (! client->fh) { char errbuf[1024]; - sdb_error_set(SDB_LOG_ERR, "unixsock: Failed to open I/O " + sdb_log(SDB_LOG_ERR, "unixsock: Failed to open I/O " "stream for %s: %s\n", sa.sun_path, sdb_strerror(errno, errbuf, sizeof(errbuf))); close(fd); @@ -278,7 +278,7 @@ sdb_unixsock_client_send(sdb_unixsock_client_t *client, status = fprintf(client->fh, "%s\r\n", msg); if (status < 0) { char errbuf[1024]; - sdb_error_set(SDB_LOG_ERR, "unixsock: Failed to write to " + sdb_log(SDB_LOG_ERR, "unixsock: Failed to write to " "socket (%s): %s\n", client->path, sdb_strerror(errno, errbuf, sizeof(errbuf))); return status; @@ -300,7 +300,7 @@ sdb_unixsock_client_recv(sdb_unixsock_client_t *client, if (! buffer) { if (! feof(client->fh)) { char errbuf[1024]; - sdb_error_set(SDB_LOG_ERR, "unixsock: Failed to read " + sdb_log(SDB_LOG_ERR, "unixsock: Failed to read " "from socket (%s): %s\n", client->path, sdb_strerror(errno, errbuf, sizeof(errbuf))); } @@ -341,7 +341,7 @@ sdb_unixsock_client_process_lines(sdb_unixsock_client_t *client, types[i] = va_arg(ap, int); if ((types[i] < 1) || (types[i] > SDB_TYPE_BINARY)) { - sdb_error_set(SDB_LOG_ERR, "unixsock: Unknown column " + sdb_log(SDB_LOG_ERR, "unixsock: Unknown column " "type %i while processing response from the " "UNIX socket @ %s.\n", types[i], client->path); va_end(ap); @@ -374,7 +374,7 @@ sdb_unixsock_client_process_lines(sdb_unixsock_client_t *client, column_count = sdb_unixsock_get_column_count(line, delim); if ((n_cols >= 0) && (n_cols != column_count)) { - sdb_error_set(SDB_LOG_ERR, "unixsock: number of columns (%i) " + sdb_log(SDB_LOG_ERR, "unixsock: number of columns (%i) " "does not match the number of requested columns (%i) " "while processing response from the UNIX socket @ %s: " "%s\n", column_count, n_cols, client->path, line); @@ -395,7 +395,7 @@ sdb_unixsock_client_process_lines(sdb_unixsock_client_t *client, || ((max_lines < 0) && (! sdb_unixsock_client_eof(client))) || sdb_unixsock_client_error(client)) { char errbuf[1024]; - sdb_error_set(SDB_LOG_ERR, "unixsock: Unexpected end of data while " + sdb_log(SDB_LOG_ERR, "unixsock: Unexpected end of data while " "reading from socket (%s): %s\n", client->path, sdb_strerror(errno, errbuf, sizeof(errbuf))); return -1; -- 2.30.2