TT#76900 use separate host/port config for intermediate CDRs

In a cluster setup, intermediate CDRs might be written to a different
host than the final CDRs (central vs pair).

Change-Id: I56716d2a96857d52715e48f513ee1d75676b1e52
(cherry picked from commit 3354a97e33)
changes/65/38265/1
Richard Fuchs 7 years ago
parent 2c9eab53ca
commit f5cadf9fc1

@ -26,6 +26,8 @@ char *config_cdr_user;
char *config_cdr_pass;
char *config_cdr_db;
unsigned int config_cdr_port = MEDIATOR_DEFAULT_CDRPORT;
char *config_intermediate_cdr_host;
unsigned int config_intermediate_cdr_port = MEDIATOR_DEFAULT_CDRPORT;
char *config_prov_host;
char *config_prov_user;
@ -64,6 +66,8 @@ enum config_option {
OPT_CDR_USER = 'U',
OPT_CDR_PASS = 'P',
OPT_CDR_DB = 'B',
OPT_INTERMEDIATE_CDR_HOST = 'y',
OPT_INTERMEDIATE_CDR_PORT = 'Y',
OPT_PROV_HOST = 'S',
OPT_PROV_PORT = 'T',
OPT_PROV_USER = 'R',
@ -85,7 +89,7 @@ enum config_option {
OPT_INTERMEDIATE_INTERVAL = 'I',
};
static const char options[] = "?a:c:e:D:i:dlL:h:u:p:b:o:H:U:P:B:O:S:t:T:r:R:A:N:Z:z:W:w:X:x:msM:I:";
static const char options[] = "?a:c:e:D:i:dlL:h:u:p:b:o:H:U:P:B:O:S:t:T:r:R:A:N:Z:z:W:w:X:x:msM:I:y:Y:";
struct option long_options[] = {
{ "configfile", required_argument, NULL, OPT_CONFIGFILE },
@ -104,6 +108,8 @@ struct option long_options[] = {
{ "cdr-user", required_argument, NULL, OPT_CDR_USER },
{ "cdr-pass", required_argument, NULL, OPT_CDR_PASS },
{ "cdr-db", required_argument, NULL, OPT_CDR_DB },
{ "intermediate-cdr-host", required_argument, NULL, OPT_INTERMEDIATE_CDR_HOST },
{ "intermediate-cdr-port", required_argument, NULL, OPT_INTERMEDIATE_CDR_PORT },
{ "prov-host", required_argument, NULL, OPT_PROV_HOST },
{ "prov-port", required_argument, NULL, OPT_PROV_PORT },
{ "prov-user", required_argument, NULL, OPT_PROV_USER },
@ -149,6 +155,8 @@ static void config_help(const char *self, int rc)
" -U, --cdr-user USER\tThe CDR db user (default = '%s').\n" \
" -P, --cdr-pass PASS\tThe CDR db pass (default = '%s').\n" \
" -B, --cdr-db DB\tThe CDR db name (default = '%s').\n" \
" -y, --intermediate-cdr-host HOST\tThe CDR db host (default = '%s').\n" \
" -Y, --intermediate-cdr-port PORT\tThe CDR db port (default = '%d').\n" \
" -S, --prov-host HOST\tThe prov db host (default = '%s').\n" \
" -T, --prov-port PORT\tThe prov db port (default = '%d').\n" \
" -R, --prov-user USER\tThe prov db user (default = '%s').\n" \
@ -178,6 +186,7 @@ static void config_help(const char *self, int rc)
MEDIATOR_DEFAULT_CDRHOST, MEDIATOR_DEFAULT_CDRPORT,
MEDIATOR_DEFAULT_CDRUSER, MEDIATOR_DEFAULT_CDRPASS,
MEDIATOR_DEFAULT_CDRDB,
MEDIATOR_DEFAULT_CDRHOST, MEDIATOR_DEFAULT_CDRPORT,
MEDIATOR_DEFAULT_PROVHOST, MEDIATOR_DEFAULT_PROVPORT,
MEDIATOR_DEFAULT_PROVUSER, MEDIATOR_DEFAULT_PROVPASS,
MEDIATOR_DEFAULT_PROVDB,
@ -253,6 +262,12 @@ static void config_set_option(enum config_option option, const char *value)
case OPT_CDR_PORT:
config_cdr_port = atoi(value);
break;
case OPT_INTERMEDIATE_CDR_HOST:
config_set_string_option(&config_intermediate_cdr_host, value);
break;
case OPT_INTERMEDIATE_CDR_PORT:
config_intermediate_cdr_port = atoi(value);
break;
case OPT_PROV_HOST:
config_set_string_option(&config_prov_host, value);
break;
@ -325,6 +340,7 @@ static void config_set_defaults(void)
config_set_string_default(&config_cdr_user, MEDIATOR_DEFAULT_CDRUSER);
config_set_string_default(&config_cdr_pass, MEDIATOR_DEFAULT_CDRPASS);
config_set_string_default(&config_cdr_db, MEDIATOR_DEFAULT_CDRDB);
config_set_string_default(&config_intermediate_cdr_host, MEDIATOR_DEFAULT_CDRHOST);
config_set_string_default(&config_prov_host, MEDIATOR_DEFAULT_PROVHOST);
config_set_string_default(&config_prov_user, MEDIATOR_DEFAULT_PROVUSER);
config_set_string_default(&config_prov_pass, MEDIATOR_DEFAULT_PROVPASS);
@ -446,6 +462,7 @@ void config_cleanup()
free(config_cdr_user);
free(config_cdr_pass);
free(config_cdr_db);
free(config_intermediate_cdr_host);
free(config_med_host);
free(config_med_user);
free(config_med_pass);

@ -24,6 +24,8 @@ extern unsigned int config_cdr_port;
extern char *config_cdr_user;
extern char *config_cdr_pass;
extern char *config_cdr_db;
extern char *config_intermediate_cdr_host;
extern unsigned int config_intermediate_cdr_port;
extern char *config_prov_host;
extern unsigned int config_prov_port;

@ -60,6 +60,7 @@ typedef struct _medmysql_batch_definition {
} medmysql_batch_definition;
static medmysql_handler *cdr_handler;
static medmysql_handler *int_cdr_handler;
static medmysql_handler *med_handler;
static medmysql_handler *prov_handler;
static medmysql_handler *stats_handler;
@ -200,13 +201,13 @@ static const medmysql_batch_definition medmysql_int_cdr_def = {
"values(destination_lnp_type), export_status = 'unexported'",
.full_flush_func = medmysql_flush_int_cdr,
.min_string_tail_room = 9000,
.handler_ptr = &cdr_handler,
.handler_ptr = &int_cdr_handler,
};
static const medmysql_batch_definition medmysql_del_int_cdr_def = {
.sql_init_string = "delete from int_cdr where call_id in (",
.sql_finish_string = ")",
.single_flush_func = medmysql_flush_med_str,
.handler_ptr = &cdr_handler,
.handler_ptr = &int_cdr_handler,
};
static const medmysql_batch_definition medmysql_tag_def = {
.sql_init_string = "insert into cdr_tag_data (cdr_id, provider_id, direction_id, tag_id, " \
@ -220,7 +221,7 @@ static const medmysql_batch_definition medmysql_int_tag_def = {
.sql_finish_string = " on duplicate key update "
"val = values(val)",
.single_flush_func = medmysql_flush_med_str,
.handler_ptr = &cdr_handler,
.handler_ptr = &int_cdr_handler,
};
static const medmysql_batch_definition medmysql_mos_def = {
.sql_init_string = "insert into cdr_mos_data (" \
@ -242,7 +243,7 @@ static const medmysql_batch_definition medmysql_int_group_def = {
"cdr_id, call_id, cdr_start_time" \
") values ",
.single_flush_func = medmysql_flush_med_str,
.handler_ptr = &cdr_handler,
.handler_ptr = &int_cdr_handler,
};
@ -454,6 +455,12 @@ int medmysql_init()
if (!cdr_handler)
goto err;
int_cdr_handler = medmysql_handler_init("INT-CDR",
config_intermediate_cdr_host, config_cdr_user, config_cdr_pass,
config_cdr_db, config_intermediate_cdr_port);
if (!int_cdr_handler)
goto err;
med_handler = medmysql_handler_init("ACC",
config_med_host, config_med_user, config_med_pass,
config_med_db, config_med_port);
@ -499,6 +506,7 @@ static void medmysql_handler_close(medmysql_handler **h) {
void medmysql_cleanup()
{
medmysql_handler_close(&cdr_handler);
medmysql_handler_close(&int_cdr_handler);
medmysql_handler_close(&med_handler);
medmysql_handler_close(&prov_handler);
medmysql_handler_close(&stats_handler);
@ -1131,7 +1139,7 @@ int medmysql_delete_intermediate(cdr_entry_t *entries, uint64_t count, struct me
char *callid = e->call_id;
char esc_callid[strlen(callid)*2+1];
mysql_real_escape_string(cdr_handler->m, esc_callid, callid, strlen(callid));
mysql_real_escape_string(int_cdr_handler->m, esc_callid, callid, strlen(callid));
if (medmysql_batch_prepare(&batches->int_cdr_delete))
return -1;
@ -1396,6 +1404,8 @@ static void medmysql_str_init(struct medmysql_str *str, const medmysql_batch_def
int medmysql_batch_start(struct medmysql_batches *batches) {
if (medmysql_handler_transaction(cdr_handler))
return -1;
if (medmysql_handler_transaction(int_cdr_handler))
return -1;
if (medmysql_handler_transaction(med_handler))
return -1;
@ -1620,6 +1630,8 @@ int medmysql_batch_end(struct medmysql_batches *batches) {
if (medmysql_handler_commit(cdr_handler))
return -1;
if (medmysql_handler_commit(int_cdr_handler))
return -1;
if (medmysql_handler_commit(med_handler))
return -1;

Loading…
Cancel
Save