/* writer "caching" settings */
cdtime_t commit_interval;
cdtime_t next_commit;
+ cdtime_t expire_delay;
char *host;
char *port;
db->commit_interval = 0;
db->next_commit = 0;
+ db->expire_delay = 0;
db->database = sstrdup (name);
db->host = NULL;
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);
#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)) {
data = udb_query_get_user_data (q);
if (NULL == data) {
- data = (c_psql_user_data_t *) smalloc (sizeof (*data));
+ data = malloc (sizeof (*data));
if (NULL == data) {
log_err ("Out of memory.");
return -1;
}
memset (data, 0, sizeof (*data));
data->params = NULL;
+ data->params_num = 0;
+
+ udb_query_set_user_data (q, data);
}
- tmp = (c_psql_param_t *) realloc (data->params,
- (data->params_num + 1) * sizeof (c_psql_param_t));
+ tmp = realloc (data->params, (data->params_num + 1) * sizeof (*data->params));
if (NULL == tmp) {
log_err ("Out of memory.");
return -1;
}
data->params_num++;
- udb_query_set_user_data (q, data);
-
return (0);
} /* config_query_param_add */
writers = tmp;
writer = writers + writers_num;
- ++writers_num;
+ memset (writer, 0, sizeof (*writer));
writer->name = sstrdup (ci->values[0].value.string);
writer->statement = NULL;
if (status != 0) {
sfree (writer->statement);
sfree (writer->name);
- sfree (writer);
return status;
}
+ ++writers_num;
return 0;
} /* c_psql_config_writer */
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);
}