From: Richard Mudgett Date: Fri, 13 Jan 2012 17:12:51 +0000 (+0000) Subject: Add missing CEL logging fields to various CEL backends. X-Git-Tag: 1.8.10.0-rc1~62 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=773074f3b7ce4ba9a8a0437bac5cf21055f41b64;p=thirdparty%2Fasterisk.git Add missing CEL logging fields to various CEL backends. * Add missing eventextra to cel_psql.c and cel_odbc.c. * Add missing PeerAccount and EventExtra to cel_manager.c. * Add missing userdeftype support for cel_custom.conf.sample and cel_sqlite3_custom.conf.sample. (closes issue ASTERISK-17190) Reported by: Bryant Zimmerman git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@350555 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/cel/cel_manager.c b/cel/cel_manager.c index 551b861d05..d97bfe9bb5 100644 --- a/cel/cel_manager.c +++ b/cel/cel_manager.c @@ -61,11 +61,11 @@ static void manager_log(const struct ast_event *event, void *userdata) .version = AST_CEL_EVENT_RECORD_VERSION, }; - if (ast_cel_fill_record(event, &record)) { + if (!enablecel) { return; } - if (!enablecel) { + if (ast_cel_fill_record(event, &record)) { return; } @@ -90,13 +90,29 @@ static void manager_log(const struct ast_event *event, void *userdata) "UniqueID: %s\r\n" "LinkedID: %s\r\n" "Userfield: %s\r\n" - "Peer: %s\r\n", - record.event_name, record.account_code, record.caller_id_num, - record.caller_id_name, record.caller_id_ani, record.caller_id_rdnis, - record.caller_id_dnid, record.extension, record.context, record.channel_name, - record.application_name, record.application_data, start_time, - ast_cel_get_ama_flag_name(record.amaflag), record.unique_id, record.linked_id, - record.user_field, record.peer); + "Peer: %s\r\n" + "PeerAccount: %s\r\n" + "EventExtra: %s\r\n", + record.event_name, + record.account_code, + record.caller_id_num, + record.caller_id_name, + record.caller_id_ani, + record.caller_id_rdnis, + record.caller_id_dnid, + record.extension, + record.context, + record.channel_name, + record.application_name, + record.application_data, + start_time, + ast_cel_get_ama_flag_name(record.amaflag), + record.unique_id, + record.linked_id, + record.user_field, + record.peer, + record.peer_account, + record.extra); } static int load_config(int reload) diff --git a/cel/cel_odbc.c b/cel/cel_odbc.c index f0c70f53c5..b6ed619f3e 100644 --- a/cel/cel_odbc.c +++ b/cel/cel_odbc.c @@ -438,6 +438,8 @@ static void odbc_log(const struct ast_event *event, void *userdata) ast_copy_string(colbuf, record.peer, sizeof(colbuf)); } else if (strcmp(entry->celname, "amaflags") == 0) { snprintf(colbuf, sizeof(colbuf), "%d", record.amaflag); + } else if (strcmp(entry->celname, "eventextra") == 0) { + ast_copy_string(colbuf, record.extra, sizeof(colbuf)); } else { colbuf[0] = 0; } diff --git a/cel/cel_pgsql.c b/cel/cel_pgsql.c index 1b5f182388..a6d1d16a91 100644 --- a/cel/cel_pgsql.c +++ b/cel/cel_pgsql.c @@ -234,6 +234,8 @@ static void pgsql_log(const struct ast_event *event, void *userdata) value = record.user_field; } else if (strcmp(cur->name, "peer") == 0) { value = record.peer; + } else if (strcmp(cur->name, "eventextra") == 0) { + value = record.extra; } else { value = NULL; } diff --git a/configs/cel.conf.sample b/configs/cel.conf.sample index d9ba90cb52..a17cf68810 100644 --- a/configs/cel.conf.sample +++ b/configs/cel.conf.sample @@ -56,13 +56,17 @@ apps=dial,park ; PARK_END -- Unpark event ; BRIDGE_START -- The time a bridge is started ; BRIDGE_END -- The time a bridge is ended -; 3WAY_START -- When a 3-way conference starts (usually via attended xfer) +; BRIDGE_UPDATE -- This is a replacement channel (Masquerade) +; 3WAY_START -- When a 3-way conference starts (usually via attended transfer) ; 3WAY_END -- When one or all exit a 3-way conference ; BLINDTRANSFER -- When a blind transfer is initiated ; ATTENDEDTRANSFER -- When an attended transfer is initiated ; TRANSFER -- Generic transfer initiated; not used yet...? +; PICKUP -- This channel picked up the peer channel +; FORWARD -- This channel is being forwarded somewhere else ; HOOKFLASH -- So far, when a hookflash event occurs on a DAHDI ; interface +; LINKEDID_END -- The last channel with the given linkedid is retired ; USER_DEFINED -- Triggered from the dialplan, and has a name given by the ; user ; diff --git a/configs/cel_custom.conf.sample b/configs/cel_custom.conf.sample index 37491a48b8..59c33dc542 100644 --- a/configs/cel_custom.conf.sample +++ b/configs/cel_custom.conf.sample @@ -22,10 +22,13 @@ ; details from the CEL event. There are also a few variables created by this ; module that can be used in a mapping: ; -; eventtype - The name of the CEL event. -; eventtime - The timestamp of the CEL event. -; eventextra - Extra data included with this CEL event, typically along with -; an event of type USER_DEFINED from CELGenUserEvent(). +; eventtype - The name of the CEL event. +; eventtime - The timestamp of the CEL event. +; userdeftype - User defined event type name from CELGenUserEvent(). +; eventextra - Extra data included with this CEL event, typically along with +; an event of type USER_DEFINED from CELGenUserEvent(). +; BRIDGEPEER - Bridged peer channel name at the time of the CEL event. +; CHANNEL(peer) could also be used. ; [mappings] -;Master.csv => ${CSV_QUOTE(${eventtype})},${CSV_QUOTE(${eventtime})},${CSV_QUOTE(${CALLERID(name)})},${CSV_QUOTE(${CALLERID(num)})},${CSV_QUOTE(${CALLERID(ANI)})},${CSV_QUOTE(${CALLERID(RDNIS)})},${CSV_QUOTE(${CALLERID(DNID)})},${CSV_QUOTE(${CHANNEL(exten)})},${CSV_QUOTE(${CHANNEL(context)})},${CSV_QUOTE(${CHANNEL(channame)})},${CSV_QUOTE(${CHANNEL(appname)})},${CSV_QUOTE(${CHANNEL(appdata)})},${CSV_QUOTE(${CHANNEL(amaflags)})},${CSV_QUOTE(${CHANNEL(accountcode)})},${CSV_QUOTE(${CHANNEL(uniqueid)})},${CSV_QUOTE(${CHANNEL(linkedid)})},${CSV_QUOTE(${CHANNEL(peer)})},${CSV_QUOTE(${CHANNEL(userfield)})},${CSV_QUOTE(${eventextra})} +;Master.csv => ${CSV_QUOTE(${eventtype})},${CSV_QUOTE(${eventtime})},${CSV_QUOTE(${CALLERID(name)})},${CSV_QUOTE(${CALLERID(num)})},${CSV_QUOTE(${CALLERID(ANI)})},${CSV_QUOTE(${CALLERID(RDNIS)})},${CSV_QUOTE(${CALLERID(DNID)})},${CSV_QUOTE(${CHANNEL(exten)})},${CSV_QUOTE(${CHANNEL(context)})},${CSV_QUOTE(${CHANNEL(channame)})},${CSV_QUOTE(${CHANNEL(appname)})},${CSV_QUOTE(${CHANNEL(appdata)})},${CSV_QUOTE(${CHANNEL(amaflags)})},${CSV_QUOTE(${CHANNEL(accountcode)})},${CSV_QUOTE(${CHANNEL(uniqueid)})},${CSV_QUOTE(${CHANNEL(linkedid)})},${CSV_QUOTE(${BRIDGEPEER})},${CSV_QUOTE(${CHANNEL(userfield)})},${CSV_QUOTE(${userdeftype})},${CSV_QUOTE(${eventextra})} diff --git a/configs/cel_odbc.conf.sample b/configs/cel_odbc.conf.sample index 5f21326dff..6e584e5b4f 100644 --- a/configs/cel_odbc.conf.sample +++ b/configs/cel_odbc.conf.sample @@ -47,6 +47,7 @@ ; CEL_FORWARD = 25 ; eventtime (timeval, includes microseconds) ; userdeftype (set only if eventtype == USER_DEFINED) +; eventextra ; cid_name ; cid_num ; cid_ani diff --git a/configs/cel_pgsql.conf.sample b/configs/cel_pgsql.conf.sample index 75882118a3..2d79941bf5 100644 --- a/configs/cel_pgsql.conf.sample +++ b/configs/cel_pgsql.conf.sample @@ -34,6 +34,7 @@ ; CEL_FORWARD = 25 ; eventtime (timeval, includes microseconds) ; userdeftype (set only if eventtype == USER_DEFINED) +; eventextra ; cid_name ; cid_num ; cid_ani @@ -48,7 +49,7 @@ ; peeraccount ; uniqueid ; linkedid -; amaflag (an int) +; amaflags (an int) ; userfield ; peer diff --git a/configs/cel_sqlite3_custom.conf.sample b/configs/cel_sqlite3_custom.conf.sample index b1486bd5c2..14f2dd2281 100644 --- a/configs/cel_sqlite3_custom.conf.sample +++ b/configs/cel_sqlite3_custom.conf.sample @@ -5,7 +5,19 @@ ; ; Mappings for sqlite3 config file ; +; Within a mapping, use the CALLERID() and CHANNEL() functions to retrieve +; details from the CEL event. There are also a few variables created by this +; module that can be used in a mapping: +; +; eventtype - The name of the CEL event. +; eventtime - The timestamp of the CEL event. +; userdeftype - User defined event type name from CELGenUserEvent(). +; eventextra - Extra data included with this CEL event, typically along with +; an event of type USER_DEFINED from CELGenUserEvent(). +; BRIDGEPEER - Bridged peer channel name at the time of the CEL event. +; CHANNEL(peer) could also be used. +; ;[master] ; currently, only file "master.db" is supported, with only one table at a time. ;table => cel -;columns => eventtype, eventtime, cidname, cidnum, cidani, cidrdnis, ciddnid, context, exten, channame, appname, appdata, amaflags, accountcode, uniqueid, userfield, peer -;values => '${eventtype}','${eventtime}','${CALLERID(name)}','${CALLERID(num)}','${CALLERID(ANI)}','${CALLERID(RDNIS)}','${CALLERID(DNID)}','${CHANNEL(context)}','${CHANNEL(exten)}','${CHANNEL(channame)}','${CHANNEL(appname)}','${CHANNEL(appdata)}','${CHANNEL(amaflags)}','${CHANNEL(accountcode)}','${CHANNEL(uniqueid)}','${CHANNEL(userfield)}','${CHANNEL(peer)}' +;columns => eventtype, eventtime, cidname, cidnum, cidani, cidrdnis, ciddnid, context, exten, channame, appname, appdata, amaflags, accountcode, uniqueid, userfield, peer, userdeftype, eventextra +;values => '${eventtype}','${eventtime}','${CALLERID(name)}','${CALLERID(num)}','${CALLERID(ANI)}','${CALLERID(RDNIS)}','${CALLERID(DNID)}','${CHANNEL(context)}','${CHANNEL(exten)}','${CHANNEL(channame)}','${CHANNEL(appname)}','${CHANNEL(appdata)}','${CHANNEL(amaflags)}','${CHANNEL(accountcode)}','${CHANNEL(uniqueid)}','${CHANNEL(userfield)}','${BRIDGEPEER}','${userdeftype}','${eventextra}' diff --git a/main/cel.c b/main/cel.c index 8606a264c8..35e851b03c 100644 --- a/main/cel.c +++ b/main/cel.c @@ -47,7 +47,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") static unsigned char cel_enabled; /*! \brief CEL is off by default */ -static const unsigned char CEL_ENALBED_DEFAULT = 0; +#define CEL_ENABLED_DEFAULT 0 /*! * \brief which events we want to track @@ -65,12 +65,12 @@ static int64_t eventset; /*! * \brief Track no events by default. */ -static const int64_t CEL_DEFAULT_EVENTS = 0; +#define CEL_DEFAULT_EVENTS 0 /*! * \brief Number of buckets for the appset container */ -static const int NUM_APP_BUCKETS = 97; +#define NUM_APP_BUCKETS 97 /*! * \brief Container of Asterisk application names @@ -298,7 +298,7 @@ static int do_reload(void) ast_mutex_lock(&reload_lock); /* Reset all settings before reloading configuration */ - cel_enabled = CEL_ENALBED_DEFAULT; + cel_enabled = CEL_ENABLED_DEFAULT; eventset = CEL_DEFAULT_EVENTS; *cel_dateformat = '\0'; ao2_callback(appset, OBJ_UNLINK | OBJ_NODATA | OBJ_MULTIPLE, NULL, NULL); @@ -439,6 +439,9 @@ struct ast_channel *ast_cel_fabricate_channel_from_event(const struct ast_event AST_LIST_INSERT_HEAD(headp, newvariable, entries); } + if ((newvariable = ast_var_assign("userdeftype", record.user_defined_name))) { + AST_LIST_INSERT_HEAD(headp, newvariable, entries); + } if ((newvariable = ast_var_assign("eventextra", record.extra))) { AST_LIST_INSERT_HEAD(headp, newvariable, entries); }