[Asterisk-code-review] cdr/cdr odbc.c: Added to record new columns add on CDR 1.8 A... (asterisk[13])

Rodrigo Ramirez Norambuena asteriskteam at digium.com
Sat Apr 25 11:42:06 CDT 2015


Rodrigo Ramirez Norambuena has uploaded a new change for review.

  https://gerrit.asterisk.org/258

Change subject: cdr/cdr_odbc.c: Added to record new columns add on CDR 1.8 Asterisk Version
......................................................................

cdr/cdr_odbc.c: Added to record new columns add on CDR 1.8 Asterisk Version

Add new column to INSERT new columns added in cdr 1.8 version. The columns are:
 * peeraccount
 * linkedid
 * sequence
This feature is configurable by cdr_odbc.conf on configuration name newcdrcolumns.

ASTERISK-24976

Change-Id: Ibe0c7540a88305c6012786f438a0813ad8b19127
---
M UPGRADE.txt
M cdr/cdr_odbc.c
M configs/samples/cdr_odbc.conf.sample
3 files changed, 33 insertions(+), 5 deletions(-)


  git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/58/258/1

diff --git a/UPGRADE.txt b/UPGRADE.txt
index 1a056b8..bc63525 100644
--- a/UPGRADE.txt
+++ b/UPGRADE.txt
@@ -50,6 +50,11 @@
    should have no adverse effects for those upgrading; this note merely
    serves as an indication that a new module exists.
 
+cdr_odbc:
+ - Now support to record new columns added on CDR 1.8 Asterisk Version, the
+   fields  add are: peeraccount, linkedid and sequence. This feature is
+   configurable by newcdrcolumns on cdr_odbc.conf.
+
 From 13.2.0 to 13.3.0:
 
 chan_dahdi:
diff --git a/cdr/cdr_odbc.c b/cdr/cdr_odbc.c
index b8640f6..d73df08 100644
--- a/cdr/cdr_odbc.c
+++ b/cdr/cdr_odbc.c
@@ -64,6 +64,7 @@
 	CONFIG_DISPOSITIONSTRING = 1 << 2,
 	CONFIG_HRTIME =            1 << 3,
 	CONFIG_REGISTERED =        1 << 4,
+	CONFIG_NEWCDRCOLUMNS =     1 << 5,
 };
 
 static struct ast_flags config = { 0 };
@@ -72,23 +73,29 @@
 {
 	struct ast_cdr *cdr = data;
 	SQLRETURN ODBC_res;
-	char sqlcmd[2048] = "", timestr[128];
+	char sqlcmd[2048] = "", timestr[128], new_columns[120] = "", new_values[7] = "";
 	struct ast_tm tm;
 	SQLHSTMT stmt;
+	int i = 0;
 
 	ast_localtime(&cdr->start, &tm, ast_test_flag(&config, CONFIG_USEGMTIME) ? "GMT" : NULL);
 	ast_strftime(timestr, sizeof(timestr), DATE_FORMAT, &tm);
 
+	if (ast_test_flag(&config, CONFIG_NEWCDRCOLUMNS)) {
+		snprintf(new_columns, sizeof(new_columns), "%s" ,",peeraccount,linkedid,sequence");
+		snprintf(new_values, sizeof(new_values), "%s" ,",?,?,?");
+	}
+
 	if (ast_test_flag(&config, CONFIG_LOGUNIQUEID)) {
 		snprintf(sqlcmd,sizeof(sqlcmd),"INSERT INTO %s "
 		"(calldate,clid,src,dst,dcontext,channel,dstchannel,lastapp,"
-		"lastdata,duration,billsec,disposition,amaflags,accountcode,uniqueid,userfield) "
-		"VALUES ({ts '%s'},?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", table, timestr);
+		"lastdata,duration,billsec,disposition,amaflags,accountcode,uniqueid,userfield%s) "
+		"VALUES ({ts '%s'},?,?,?,?,?,?,?,?,?,?,?,?,?,?,? %s)",table, new_columns, timestr, new_values);
 	} else {
 		snprintf(sqlcmd,sizeof(sqlcmd),"INSERT INTO %s "
 		"(calldate,clid,src,dst,dcontext,channel,dstchannel,lastapp,lastdata,"
-		"duration,billsec,disposition,amaflags,accountcode) "
-		"VALUES ({ts '%s'},?,?,?,?,?,?,?,?,?,?,?,?,?)", table, timestr);
+		"duration,billsec,disposition,amaflags,accountcode%s) "
+		"VALUES ({ts '%s'},?,?,?,?,?,?,?,?,?,?,?,?,?%s)", table, new_columns, timestr, new_values);
 	}
 
 	ODBC_res = SQLAllocHandle(SQL_HANDLE_STMT, obj->con, &stmt);
@@ -134,9 +141,17 @@
 	SQLBindParameter(stmt, 12, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &cdr->amaflags, 0, NULL);
 	SQLBindParameter(stmt, 13, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, sizeof(cdr->accountcode), 0, cdr->accountcode, 0, NULL);
 
+	i = 14;
 	if (ast_test_flag(&config, CONFIG_LOGUNIQUEID)) {
 		SQLBindParameter(stmt, 14, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, sizeof(cdr->uniqueid), 0, cdr->uniqueid, 0, NULL);
 		SQLBindParameter(stmt, 15, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, sizeof(cdr->userfield), 0, cdr->userfield, 0, NULL);
+		i = 16;
+	}
+
+	if (ast_test_flag(&config, CONFIG_NEWCDRCOLUMNS)) {
+		SQLBindParameter(stmt, i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, sizeof(cdr->peeraccount), 0, cdr->peeraccount, 0, NULL);
+		SQLBindParameter(stmt, i + 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, sizeof(cdr->linkedid), 0, cdr->linkedid, 0, NULL);
+		SQLBindParameter(stmt, i + 2, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &cdr->sequence, 0, NULL);
 	}
 
 	ODBC_res = SQLExecDirect(stmt, (unsigned char *)sqlcmd, SQL_NTS);
@@ -260,6 +275,13 @@
 				ast_set_flag(&config, CONFIG_REGISTERED);
 			}
 		}
+		if (((tmp = ast_variable_retrieve(cfg, "global", "newcdrcolumns"))) && ast_true(tmp)) {
+			ast_set_flag(&config, CONFIG_NEWCDRCOLUMNS);
+			ast_debug(1, "cdr_odbc: Add new cdr fields\n");
+		} else {
+			ast_clear_flag(&config, CONFIG_NEWCDRCOLUMNS);
+			ast_debug(1, "cdr_odbc: Not add new cdr fields\n");
+		}
 	} while (0);
 
 	if (ast_test_flag(&config, CONFIG_REGISTERED) && (!cfg || dsn == NULL || table == NULL)) {
diff --git a/configs/samples/cdr_odbc.conf.sample b/configs/samples/cdr_odbc.conf.sample
index 93bd6ff..6394958 100644
--- a/configs/samples/cdr_odbc.conf.sample
+++ b/configs/samples/cdr_odbc.conf.sample
@@ -9,3 +9,4 @@
 ;table=cdr		;"cdr" is default table name
 ;usegmtime=no             ; set to "yes" to log in GMT
 ;hrtime=yes		;Enables microsecond accuracy with the billsec and duration fields
+;newcdrcolumns=yes ; Enable log new cdr columns (peeraccount, linkedid, sequence)

-- 
To view, visit https://gerrit.asterisk.org/258
To unsubscribe, visit https://gerrit.asterisk.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ibe0c7540a88305c6012786f438a0813ad8b19127
Gerrit-PatchSet: 1
Gerrit-Project: asterisk
Gerrit-Branch: 13
Gerrit-Owner: Rodrigo Ramirez Norambuena <decipher.hk at gmail.com>



More information about the asterisk-code-review mailing list