X-Git-Url: https://git.octo.it/?p=collectd.git;a=blobdiff_plain;f=src%2Foracle.c;h=cebc7a2f19618bc84de45f0249cc1b2987588938;hp=44bd5648d1c4e54eff7eeb48a2add5d07d706129;hb=54619dc85fd308b21ed09a0271e5c7383c7921b9;hpb=4380983e0a45e2d1c1207dbea95863d1dcc844c6 diff --git a/src/oracle.c b/src/oracle.c index 44bd5648..cebc7a2f 100644 --- a/src/oracle.c +++ b/src/oracle.c @@ -47,9 +47,9 @@ #include "collectd.h" -#include "common.h" #include "plugin.h" -#include "utils_db_query.h" +#include "utils/common/common.h" +#include "utils/db_query/db_query.h" #include @@ -62,6 +62,7 @@ struct o_database_s { char *connect_id; char *username; char *password; + char *plugin_name; udb_query_preparation_area_t **q_prep_areas; udb_query_t **queries; @@ -74,10 +75,10 @@ typedef struct o_database_s o_database_t; /* * Global variables */ -static udb_query_t **queries = NULL; -static size_t queries_num = 0; -static o_database_t **databases = NULL; -static size_t databases_num = 0; +static udb_query_t **queries; +static size_t queries_num; +static o_database_t **databases; +static size_t databases_num; OCIEnv *oci_env = NULL; OCIError *oci_error = NULL; @@ -106,7 +107,7 @@ static void o_report_error(const char *where, /* {{{ */ status = OCIErrorGet(eh, (ub4)record_number, /* sqlstate = */ NULL, &error_code, (text *)&buffer[0], (ub4)sizeof(buffer), OCI_HTYPE_ERROR); - buffer[sizeof(buffer) - 1] = 0; + buffer[sizeof(buffer) - 1] = '\0'; if (status == OCI_NO_DATA) return; @@ -141,6 +142,7 @@ static void o_database_free(o_database_t *db) /* {{{ */ sfree(db->username); sfree(db->password); sfree(db->queries); + sfree(db->plugin_name); if (db->q_prep_areas != NULL) for (size_t i = 0; i < db->queries_num; ++i) @@ -192,6 +194,7 @@ static int o_config_add_database(oconfig_item_t *ci) /* {{{ */ db->connect_id = NULL; db->username = NULL; db->password = NULL; + db->plugin_name = NULL; status = cf_util_get_string(ci, &db->name); if (status != 0) { @@ -211,6 +214,8 @@ static int o_config_add_database(oconfig_item_t *ci) /* {{{ */ status = cf_util_get_string(child, &db->username); else if (strcasecmp("Password", child->key) == 0) status = cf_util_get_string(child, &db->password); + else if (strcasecmp("Plugin", child->key) == 0) + status = cf_util_get_string(child, &db->plugin_name); else if (strcasecmp("Query", child->key) == 0) status = udb_query_pick_from_list(child, queries, queries_num, &db->queries, &db->queries_num); @@ -242,9 +247,7 @@ static int o_config_add_database(oconfig_item_t *ci) /* {{{ */ } /* while (status == 0) */ while ((status == 0) && (db->queries_num > 0)) { - db->q_prep_areas = (udb_query_preparation_area_t **)calloc( - db->queries_num, sizeof(*db->q_prep_areas)); - + db->q_prep_areas = calloc(db->queries_num, sizeof(*db->q_prep_areas)); if (db->q_prep_areas == NULL) { WARNING("oracle plugin: calloc failed"); status = -1; @@ -303,10 +306,10 @@ static int o_config(oconfig_item_t *ci) /* {{{ */ } if (queries_num > 0) { - DEBUG("oracle plugin: o_config: queries_num = %zu; queries[0] = %p; " - "udb_query_get_user_data (queries[0]) = %p;", - queries_num, (void *)queries[0], - udb_query_get_user_data(queries[0])); + DEBUG( + "oracle plugin: o_config: queries_num = %" PRIsz "; queries[0] = %p; " + "udb_query_get_user_data (queries[0]) = %p;", + queries_num, (void *)queries[0], udb_query_get_user_data(queries[0])); } } /* for (ci->children) */ @@ -527,8 +530,8 @@ static int o_read_database_query(o_database_t *db, /* {{{ */ memcpy(column_names[i], column_name, column_name_length); column_names[i][column_name_length] = 0; - DEBUG("oracle plugin: o_read_database_query: column_names[%zu] = %s; " - "column_name_length = %" PRIu32 ";", + DEBUG("oracle plugin: o_read_database_query: column_names[%" PRIsz "] = %s;" + " column_name_length = %" PRIu32 ";", i, column_names[i], (uint32_t)column_name_length); status = OCIDefineByPos(oci_statement, &oci_defines[i], oci_error, @@ -544,8 +547,8 @@ static int o_read_database_query(o_database_t *db, /* {{{ */ status = udb_query_prepare_result( q, prep_area, (db->host != NULL) ? db->host : hostname_g, - /* plugin = */ "oracle", db->name, column_names, column_num, - /* interval = */ 0); + /* plugin = */ (db->plugin_name != NULL) ? db->plugin_name : "oracle", + db->name, column_names, column_num); if (status != 0) { ERROR("oracle plugin: o_read_database_query (%s, %s): " "udb_query_prepare_result failed.", @@ -577,6 +580,8 @@ static int o_read_database_query(o_database_t *db, /* {{{ */ } } /* }}} while (42) */ + udb_query_finish_result(q, prep_area); + /* DEBUG ("oracle plugin: o_read_database_query: This statement succeeded: * %s", q->statement); */ FREE_ALL; @@ -635,7 +640,7 @@ static int o_read_database(o_database_t *db) /* {{{ */ if ((status != OCI_SUCCESS) && (status != OCI_SUCCESS_WITH_INFO)) { char errfunc[256]; - snprintf(errfunc, sizeof(errfunc), "OCILogon(\"%s\")", db->connect_id); + ssnprintf(errfunc, sizeof(errfunc), "OCILogon(\"%s\")", db->connect_id); o_report_error("o_read_database", db->name, NULL, errfunc, oci_error); DEBUG("oracle plugin: OCILogon (%s): db->oci_service_context = %p;",