X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fpostgresql.c;h=7e69877c43e132ab776205574a97f2503a043099;hb=2761915bed8c6caea41018be3e675aa712cc0b0a;hp=23c4af31e0909de86cb135fba2d8d3c41c9f33ca;hpb=ae5cca244ff291c17df1cc36e28f19376958a2eb;p=collectd.git diff --git a/src/postgresql.c b/src/postgresql.c index 23c4af31..7e69877c 100644 --- a/src/postgresql.c +++ b/src/postgresql.c @@ -31,6 +31,7 @@ */ #include "collectd.h" + #include "common.h" #include "configfile.h" @@ -40,10 +41,6 @@ #include "utils_db_query.h" #include "utils_complain.h" -#if HAVE_PTHREAD_H -# include -#endif - #include #include @@ -154,7 +151,7 @@ typedef struct { int ref_cnt; } c_psql_database_t; -static char *def_queries[] = { +static const char *const def_queries[] = { "backends", "transactions", "queries", @@ -218,13 +215,13 @@ static c_psql_database_t *c_psql_database_new (const char *name) c_psql_database_t **tmp; c_psql_database_t *db; - db = (c_psql_database_t *)malloc (sizeof(*db)); + db = malloc (sizeof(*db)); if (NULL == db) { log_err ("Out of memory."); return NULL; } - tmp = (c_psql_database_t **)realloc (databases, + tmp = realloc (databases, (databases_num + 1) * sizeof (*databases)); if (NULL == tmp) { log_err ("Out of memory."); @@ -280,8 +277,6 @@ static c_psql_database_t *c_psql_database_new (const char *name) static void c_psql_database_delete (void *data) { - size_t i; - c_psql_database_t *db = data; --db->ref_cnt; @@ -299,7 +294,7 @@ static void c_psql_database_delete (void *data) db->conn = NULL; if (db->q_prep_areas) - for (i = 0; i < db->queries_num; ++i) + for (size_t i = 0; i < db->queries_num; ++i) udb_query_delete_preparation_area (db->q_prep_areas[i]); free (db->q_prep_areas); @@ -429,16 +424,15 @@ static PGresult *c_psql_exec_query_noparams (c_psql_database_t *db, static PGresult *c_psql_exec_query_params (c_psql_database_t *db, udb_query_t *q, c_psql_user_data_t *data) { - char *params[db->max_params_num]; - char interval[64]; - int i; + const char *params[db->max_params_num]; + char interval[64]; if ((data == NULL) || (data->params_num == 0)) return (c_psql_exec_query_noparams (db, q)); assert (db->max_params_num >= data->params_num); - for (i = 0; i < data->params_num; ++i) { + for (int i = 0; i < data->params_num; ++i) { switch (data->params[i]) { case C_PSQL_PARAM_HOST: params[i] = C_PSQL_IS_UNIX_DOMAIN_SOCKET (db->host) @@ -487,7 +481,6 @@ static int c_psql_exec_query (c_psql_database_t *db, udb_query_t *q, int rows_num; int status; - int row, col; /* The user data may hold parameter information, but may be NULL. */ data = udb_query_get_user_data (q); @@ -555,8 +548,8 @@ static int c_psql_exec_query (c_psql_database_t *db, udb_query_t *q, log_err ("calloc failed."); BAIL_OUT (-1); } - - for (col = 0; col < column_num; ++col) { + + for (int col = 0; col < column_num; ++col) { /* Pointers returned by `PQfname' are freed by `PQclear' via * `BAIL_OUT'. */ column_names[col] = PQfname (res, col); @@ -581,7 +574,8 @@ static int c_psql_exec_query (c_psql_database_t *db, udb_query_t *q, BAIL_OUT (-1); } - for (row = 0; row < rows_num; ++row) { + for (int row = 0; row < rows_num; ++row) { + int col; for (col = 0; col < column_num; ++col) { /* Pointers returned by `PQgetvalue' are freed by `PQclear' via * `BAIL_OUT'. */ @@ -615,7 +609,6 @@ static int c_psql_read (user_data_t *ud) c_psql_database_t *db; int success = 0; - int i; if ((ud == NULL) || (ud->data == NULL)) { log_err ("c_psql_read: Invalid user data."); @@ -635,7 +628,7 @@ static int c_psql_read (user_data_t *ud) return -1; } - for (i = 0; i < db->queries_num; ++i) + for (size_t i = 0; i < db->queries_num; ++i) { udb_query_preparation_area_t *prep_area; udb_query_t *q; @@ -664,12 +657,10 @@ static char *values_name_to_sqlarray (const data_set_t *ds, char *str_ptr; size_t str_len; - int i; - str_ptr = string; str_len = string_len; - for (i = 0; i < ds->ds_num; ++i) { + for (size_t i = 0; i < ds->ds_num; ++i) { int status = ssnprintf (str_ptr, str_len, ",'%s'", ds->ds[i].name); if (status < 1) @@ -703,12 +694,10 @@ static char *values_type_to_sqlarray (const data_set_t *ds, char *str_ptr; size_t str_len; - int i; - str_ptr = string; str_len = string_len; - for (i = 0; i < ds->ds_num; ++i) { + for (size_t i = 0; i < ds->ds_num; ++i) { int status; if (store_rates) @@ -752,12 +741,10 @@ static char *values_to_sqlarray (const data_set_t *ds, const value_list_t *vl, gauge_t *rates = NULL; - int i; - str_ptr = string; str_len = string_len; - for (i = 0; i < vl->values_len; ++i) { + for (size_t i = 0; i < vl->values_len; ++i) { int status = 0; if ((ds->ds[i].type != DS_TYPE_GAUGE) @@ -829,7 +816,7 @@ static int c_psql_write (const data_set_t *ds, const value_list_t *vl, { c_psql_database_t *db; - char time_str[32]; + char time_str[RFC3339NANO_SIZE]; char values_name_str[1024]; char values_type_str[1024]; char values_str[1024]; @@ -837,7 +824,6 @@ static int c_psql_write (const data_set_t *ds, const value_list_t *vl, const char *params[9]; int success = 0; - int i; if ((ud == NULL) || (ud->data == NULL)) { log_err ("c_psql_write: Invalid user data."); @@ -848,8 +834,8 @@ static int c_psql_write (const data_set_t *ds, const value_list_t *vl, assert (db->database != NULL); assert (db->writers != NULL); - if (cdtime_to_iso8601 (time_str, sizeof (time_str), vl->time) == 0) { - log_err ("c_psql_write: Failed to convert time to ISO 8601 format"); + if (rfc3339nano (time_str, sizeof (time_str), vl->time) != 0) { + log_err ("c_psql_write: Failed to convert time to RFC 3339 format"); return -1; } @@ -870,7 +856,7 @@ static int c_psql_write (const data_set_t *ds, const value_list_t *vl, #undef VALUE_OR_NULL if( db->expire_delay > 0 && vl->time < (cdtime() - vl->interval - db->expire_delay) ) { - log_info ("c_psql_write: Skipped expired value @ %s - %s/%s-%s/%s-%s/%s", + log_info ("c_psql_write: Skipped expired value @ %s - %s/%s-%s/%s-%s/%s", params[0], params[1], params[2], params[3], params[4], params[5], params[6] ); return 0; } @@ -886,7 +872,7 @@ static int c_psql_write (const data_set_t *ds, const value_list_t *vl, && (db->next_commit == 0)) c_psql_begin (db); - for (i = 0; i < db->writers_num; ++i) { + for (size_t i = 0; i < db->writers_num; ++i) { c_psql_writer_t *writer; PGresult *res; @@ -974,14 +960,13 @@ static int c_psql_flush (cdtime_t timeout, { c_psql_database_t **dbs = databases; size_t dbs_num = databases_num; - size_t i; if ((ud != NULL) && (ud->data != NULL)) { dbs = (void *)&ud->data; dbs_num = 1; } - for (i = 0; i < dbs_num; ++i) { + for (size_t i = 0; i < dbs_num; ++i) { c_psql_database_t *db = dbs[i]; /* don't commit if the timeout is larger than the regular commit @@ -995,13 +980,11 @@ static int c_psql_flush (cdtime_t timeout, static int c_psql_shutdown (void) { - size_t i = 0; - _Bool had_flush = 0; plugin_unregister_read_group ("postgresql"); - for (i = 0; i < databases_num; ++i) { + for (size_t i = 0; i < databases_num; ++i) { c_psql_database_t *db = databases[i]; if (db->writers_num > 0) { @@ -1045,12 +1028,11 @@ static int config_query_param_add (udb_query_t *q, oconfig_item_t *ci) data = udb_query_get_user_data (q); if (NULL == data) { - data = malloc (sizeof (*data)); + data = calloc (1, sizeof (*data)); if (NULL == data) { log_err ("Out of memory."); return -1; } - memset (data, 0, sizeof (*data)); data->params = NULL; data->params_num = 0; @@ -1119,7 +1101,7 @@ static int config_add_writer (oconfig_item_t *ci, if (strcasecmp (name, src_writers[i].name) != 0) continue; - tmp = (c_psql_writer_t **)realloc (*dst_writers, + tmp = realloc (*dst_writers, sizeof (**dst_writers) * (*dst_writers_num + 1)); if (tmp == NULL) { log_err ("Out of memory."); @@ -1147,7 +1129,6 @@ static int c_psql_config_writer (oconfig_item_t *ci) c_psql_writer_t *tmp; int status = 0; - int i; if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) { @@ -1155,7 +1136,7 @@ static int c_psql_config_writer (oconfig_item_t *ci) return 1; } - tmp = (c_psql_writer_t *)realloc (writers, + tmp = realloc (writers, sizeof (*writers) * (writers_num + 1)); if (tmp == NULL) { log_err ("Out of memory."); @@ -1170,7 +1151,7 @@ static int c_psql_config_writer (oconfig_item_t *ci) writer->statement = NULL; writer->store_rates = 1; - for (i = 0; i < ci->children_num; ++i) { + for (int i = 0; i < ci->children_num; ++i) { oconfig_item_t *c = ci->children + i; if (strcasecmp ("Statement", c->key) == 0) @@ -1196,26 +1177,21 @@ static int c_psql_config_database (oconfig_item_t *ci) c_psql_database_t *db; char cb_name[DATA_MAX_NAME_LEN]; - struct timespec cb_interval = { 0, 0 }; - user_data_t ud; + user_data_t ud = { 0 }; static _Bool have_flush = 0; - int i; - if ((1 != ci->values_num) || (OCONFIG_TYPE_STRING != ci->values[0].type)) { log_err (" expects a single string argument."); return 1; } - memset (&ud, 0, sizeof (ud)); - db = c_psql_database_new (ci->values[0].value.string); if (db == NULL) return -1; - for (i = 0; i < ci->children_num; ++i) { + for (int i = 0; i < ci->children_num; ++i) { oconfig_item_t *c = ci->children + i; if (0 == strcasecmp (c->key, "Host")) @@ -1252,7 +1228,7 @@ static int c_psql_config_database (oconfig_item_t *ci) /* If no `Query' options were given, add the default queries.. */ if ((db->queries_num == 0) && (db->writers_num == 0)){ - for (i = 0; i < def_queries_num; i++) + for (int i = 0; i < def_queries_num; i++) udb_query_pick_from_list_by_name (def_queries[i], queries, queries_num, &db->queries, &db->queries_num); @@ -1269,7 +1245,7 @@ static int c_psql_config_database (oconfig_item_t *ci) } } - for (i = 0; (size_t)i < db->queries_num; ++i) { + for (int i = 0; (size_t)i < db->queries_num; ++i) { c_psql_user_data_t *data; data = udb_query_get_user_data (db->queries[i]); if ((data != NULL) && (data->params_num > db->max_params_num)) @@ -1291,12 +1267,9 @@ static int c_psql_config_database (oconfig_item_t *ci) ssnprintf (cb_name, sizeof (cb_name), "postgresql-%s", db->instance); if (db->queries_num > 0) { - CDTIME_T_TO_TIMESPEC (db->interval, &cb_interval); - ++db->ref_cnt; plugin_register_complex_read ("postgresql", cb_name, c_psql_read, - /* interval = */ (db->interval > 0) ? &cb_interval : NULL, - &ud); + /* interval = */ db->interval, &ud); } if (db->writers_num > 0) { ++db->ref_cnt; @@ -1325,8 +1298,6 @@ static int c_psql_config (oconfig_item_t *ci) { static int have_def_config = 0; - int i; - if (0 == have_def_config) { oconfig_item_t *c; @@ -1343,7 +1314,7 @@ static int c_psql_config (oconfig_item_t *ci) "any queries - please check your installation."); } - for (i = 0; i < ci->children_num; ++i) { + for (int i = 0; i < ci->children_num; ++i) { oconfig_item_t *c = ci->children + i; if (0 == strcasecmp (c->key, "Query"))