realtime: Centralize some common realtime backend code

All of the realtime backends create artificial ast_categorys to pass
back into the core as query results. These categories have no filename
or line number information associated with them and the backends differ
slightly on how they create them. So create a couple helper macros to
help make things more consistent.

Also updated the call sites to remove redundant error messages about
memory allocation failure.

Note that res_config_ldap sets the category filename to the 'table name'
but that is not read by anything in the core, so I've dropped it.

Change-Id: I3a1fd91e0c807dea1ce3b643b0a6fe5be9002897
This commit is contained in:
Sean Bright 2017-02-21 09:56:54 -05:00
parent 144b09ab41
commit 6e6c96d713
8 changed files with 37 additions and 25 deletions

View File

@ -523,9 +523,8 @@ static struct ast_config *realtime_multi_mysql(const char *database, const char
while ((row = mysql_fetch_row(result))) {
var = NULL;
cat = ast_category_new("", "", -1);
cat = ast_category_new_anonymous();
if (!cat) {
ast_log(LOG_WARNING, "Out of memory!\n");
continue;
}
for (i = 0; i < numFields; i++) {
@ -934,8 +933,8 @@ static struct ast_config *config_mysql(const char *database, const char *table,
}
if (strcmp(last, row[0]) || last_cat_metric != atoi(row[3])) {
if (!(cur_cat = ast_category_new(row[0], "", -1))) {
ast_log(LOG_WARNING, "Out of memory!\n");
cur_cat = ast_category_new_dynamic(row[0]);
if (!cur_cat) {
break;
}
strcpy(last, row[0]);

View File

@ -833,6 +833,18 @@ const char *ast_config_option(struct ast_config *cfg, const char *cat, const cha
*/
struct ast_category *ast_category_new(const char *name, const char *in_file, int lineno);
/*!
* \brief Create a category that is not backed by a file
*
* \param name name of new category
*/
#define ast_category_new_dynamic(name) ast_category_new(name, "", -1)
/*!
* \brief Create a nameless category that is not backed by a file
*/
#define ast_category_new_anonymous() ast_category_new_dynamic("")
/*!
* \brief Create a category making it a template
*

View File

@ -182,7 +182,8 @@ static struct ast_config *realtime_multi_curl(const char *url, const char *unuse
continue;
}
if (!(cat = ast_category_new("", "", 99999))) {
cat = ast_category_new_anonymous();
if (!cat) {
continue;
}
@ -569,8 +570,10 @@ static struct ast_config *config_curl(const char *url, const char *unused, const
}
if (!cat || strcmp(category, cur_cat) || last_cat_metric != cat_metric) {
if (!(cat = ast_category_new(category, "", 99999)))
cat = ast_category_new_dynamic(category);
if (!cat) {
break;
}
cur_cat = category;
last_cat_metric = cat_metric;
ast_category_append(cfg, cat);

View File

@ -1043,10 +1043,8 @@ static struct ast_config *realtime_multi_ldap(const char *basedn,
struct ast_variable **p = vars;
while (*p) {
struct ast_category *cat = NULL;
cat = ast_category_new("", table_name, -1);
struct ast_category *cat = ast_category_new_anonymous();
if (!cat) {
ast_log(LOG_ERROR, "Unable to create a new category!\n");
break;
} else {
struct ast_variable *var = *p;
@ -1195,7 +1193,7 @@ static struct ast_config *config_ldap(const char *basedn, const char *table_name
if (!last_category || strcmp(last_category, categories[i].name) ||
last_category_metric != categories[i].metric) {
cur_cat = ast_category_new(categories[i].name, table_name, -1);
cur_cat = ast_category_new_dynamic(categories[i].name);
if (!cur_cat) {
break;
}

View File

@ -407,9 +407,8 @@ static struct ast_config *realtime_multi_odbc(const char *database, const char *
ast_log(LOG_WARNING, "SQL Fetch error! [%s]\n", ast_str_buffer(sql));
continue;
}
cat = ast_category_new("","",99999);
cat = ast_category_new_anonymous();
if (!cat) {
ast_log(LOG_WARNING, "Out of memory!\n");
continue;
}
for (x=0;x<colcount;x++) {
@ -1016,9 +1015,8 @@ static struct ast_config *config_odbc(const char *database, const char *table, c
continue;
}
if (strcmp(last, q.category) || last_cat_metric != q.cat_metric) {
cur_cat = ast_category_new(q.category, "", 99999);
cur_cat = ast_category_new_dynamic(q.category);
if (!cur_cat) {
ast_log(LOG_WARNING, "Out of memory!\n");
break;
}
strcpy(last, q.category);

View File

@ -648,8 +648,10 @@ static struct ast_config *realtime_multi_pgsql(const char *database, const char
for (rowIndex = 0; rowIndex < num_rows; rowIndex++) {
var = NULL;
if (!(cat = ast_category_new("","",99999)))
cat = ast_category_new_anonymous();
if (!cat) {
continue;
}
for (i = 0; i < numFields; i++) {
stringp = PQgetvalue(result, rowIndex, i);
while (stringp) {
@ -1129,9 +1131,10 @@ static struct ast_config *config_pgsql(const char *database, const char *table,
}
if (strcmp(last, field_category) || last_cat_metric != atoi(field_cat_metric)) {
cur_cat = ast_category_new(field_category, "", 99999);
if (!cur_cat)
cur_cat = ast_category_new_dynamic(field_category);
if (!cur_cat) {
break;
}
ast_copy_string(last, field_category, sizeof(last));
last_cat_metric = atoi(field_cat_metric);
ast_category_append(cfg, cur_cat);

View File

@ -874,10 +874,8 @@ static int add_cfg_entry(void *arg, int argc, char **argv, char **columnNames)
}
if (!args->cat_name || strcmp(args->cat_name, argv[RES_CONFIG_SQLITE_CONFIG_CATEGORY])) {
args->cat = ast_category_new(argv[RES_CONFIG_SQLITE_CONFIG_CATEGORY], "", 99999);
args->cat = ast_category_new_dynamic(argv[RES_CONFIG_SQLITE_CONFIG_CATEGORY]);
if (!args->cat) {
ast_log(LOG_WARNING, "Unable to allocate category\n");
return 1;
}
@ -1086,8 +1084,8 @@ static int add_rt_multi_cfg_entry(void *arg, int argc, char **argv, char **colum
return 1;
}
if (!(cat = ast_category_new(cat_name, "", 99999))) {
ast_log(LOG_WARNING, "Unable to allocate category\n");
cat = ast_category_new_dynamic(cat_name);
if (!cat) {
return 1;
}

View File

@ -503,7 +503,8 @@ static int append_row_to_cfg(void *arg, int num_columns, char **values, char **c
struct ast_category *cat;
int i;
if (!(cat = ast_category_new("", "", 99999))) {
cat = ast_category_new_anonymous();
if (!cat) {
return SQLITE_ABORT;
}
@ -723,8 +724,8 @@ static int static_realtime_cb(void *arg, int num_columns, char **values, char **
}
if (!args->cat_name || strcmp(args->cat_name, values[COL_CATEGORY])) {
if (!(args->cat = ast_category_new(values[COL_CATEGORY], "", 99999))) {
ast_log(LOG_WARNING, "Unable to allocate category\n");
args->cat = ast_category_new_dynamic(values[COL_CATEGORY]);
if (!args->cat) {
return SQLITE_ABORT;
}