X-Git-Url: https://git.octo.it/?a=blobdiff_plain;ds=sidebyside;f=src%2Fpostgresql.c;h=73d590a87b6f79f95d790a93ba1461bd1b6146ff;hb=0c004681a480e919b779584814eb396f6e6948ca;hp=635abfca61bf5647b4d53cea55601a5182a8997e;hpb=de21923bcdbd01827f445eb1f573778b7bfa5202;p=collectd.git diff --git a/src/postgresql.c b/src/postgresql.c index 635abfca..73d590a8 100644 --- a/src/postgresql.c +++ b/src/postgresql.c @@ -135,6 +135,7 @@ typedef struct { /* writer "caching" settings */ cdtime_t commit_interval; cdtime_t next_commit; + cdtime_t expire_delay; char *host; char *port; @@ -257,6 +258,7 @@ static c_psql_database_t *c_psql_database_new (const char *name) db->commit_interval = 0; db->next_commit = 0; + db->expire_delay = 0; db->database = sstrdup (name); db->host = NULL; @@ -770,7 +772,7 @@ static char *values_to_sqlarray (const data_set_t *ds, const value_list_t *vl, if (ds->ds[i].type == DS_TYPE_GAUGE) status = ssnprintf (str_ptr, str_len, - ",%f", vl->values[i].gauge); + ","GAUGE_FORMAT, vl->values[i].gauge); else if (store_rates) { if (rates == NULL) rates = uc_get_rate (ds, vl); @@ -867,6 +869,12 @@ 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", + params[0], params[1], params[2], params[3], params[4], params[5], params[6] ); + return 0; + } + pthread_mutex_lock (&db->db_lock); if (0 != c_psql_check_connection (db)) { @@ -1037,7 +1045,7 @@ 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 = (c_psql_user_data_t *) smalloc (sizeof (*data)); + data = (c_psql_user_data_t *) malloc (sizeof (*data)); if (NULL == data) { log_err ("Out of memory."); return -1; @@ -1236,6 +1244,8 @@ static int c_psql_config_database (oconfig_item_t *ci) cf_util_get_cdtime (c, &db->interval); else if (strcasecmp ("CommitInterval", c->key) == 0) cf_util_get_cdtime (c, &db->commit_interval); + else if (strcasecmp ("ExpireDelay", c->key) == 0) + cf_util_get_cdtime (c, &db->expire_delay); else log_warn ("Ignoring unknown config key \"%s\".", c->key); }