aboutsummaryrefslogtreecommitdiffstats
path: root/cdr
diff options
context:
space:
mode:
authortilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b>2008-09-11 21:45:07 +0000
committertilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b>2008-09-11 21:45:07 +0000
commit171dc6a01682776288a9dd2f155caf238b5e47c3 (patch)
tree9d4ef53d237c3e050537048b1585ab0cb6cc2873 /cdr
parent4aa41272e2d0bd0793c40400f54cd670f3b786aa (diff)
Add usegmtime, as per the recent -users list discussion, and also add my
explanation to the file, since that additional text helps people understand the concept. git-svn-id: http://svn.digium.com/svn/asterisk/trunk@142536 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'cdr')
-rw-r--r--cdr/cdr_adaptive_odbc.c29
1 files changed, 24 insertions, 5 deletions
diff --git a/cdr/cdr_adaptive_odbc.c b/cdr/cdr_adaptive_odbc.c
index 67c6043c3..1f04ef8d5 100644
--- a/cdr/cdr_adaptive_odbc.c
+++ b/cdr/cdr_adaptive_odbc.c
@@ -69,6 +69,7 @@ struct columns {
struct tables {
char *connection;
char *table;
+ unsigned int usegmtime:1;
AST_LIST_HEAD_NOLOCK(odbc_columns, columns) columns;
AST_RWLIST_ENTRY(tables) list;
};
@@ -86,7 +87,7 @@ static int load_config(void)
char columnname[80];
char connection[40];
char table[40];
- int lenconnection, lentable;
+ int lenconnection, lentable, usegmtime;
SQLLEN sqlptr;
int res = 0;
SQLHSTMT stmt = NULL;
@@ -110,6 +111,10 @@ static int load_config(void)
ast_copy_string(connection, tmp, sizeof(connection));
lenconnection = strlen(connection);
+ if (!ast_strlen_zero(tmp = ast_variable_retrieve(cfg, catg, "usegmtime"))) {
+ usegmtime = ast_true(tmp);
+ }
+
/* When loading, we want to be sure we can connect. */
obj = ast_odbc_request_obj(connection, 1);
if (!obj) {
@@ -146,6 +151,7 @@ static int load_config(void)
break;
}
+ tableptr->usegmtime = usegmtime;
tableptr->connection = (char *)tableptr + sizeof(*tableptr);
tableptr->table = (char *)tableptr + sizeof(*tableptr) + lenconnection + 1;
ast_copy_string(tableptr->connection, connection, lenconnection + 1);
@@ -354,11 +360,24 @@ static int odbc_log(struct ast_cdr *cdr)
}
AST_LIST_TRAVERSE(&(tableptr->columns), entry, list) {
+ int datefield = 0;
+ if (strcasecmp(entry->cdrname, "start") == 0) {
+ datefield = 1;
+ } else if (strcasecmp(entry->cdrname, "answer") == 0) {
+ datefield = 2;
+ } else if (strcasecmp(entry->cdrname, "end") == 0) {
+ datefield = 3;
+ }
+
/* Check if we have a similarly named variable */
- ast_cdr_getvar(cdr, entry->cdrname, &colptr, colbuf, sizeof(colbuf), 0,
- (strcasecmp(entry->cdrname, "start") == 0 ||
- strcasecmp(entry->cdrname, "answer") == 0 ||
- strcasecmp(entry->cdrname, "end") == 0) ? 0 : 1);
+ if (datefield && tableptr->usegmtime) {
+ struct timeval tv = (datefield == 1) ? cdr->start : (datefield == 2) ? cdr->answer : cdr->end;
+ struct ast_tm tm = { 0, };
+ ast_localtime(&tv, &tm, "UTC");
+ ast_strftime(colbuf, sizeof(colbuf), "%Y-%m-%d %H:%M:%S", &tm);
+ } else {
+ ast_cdr_getvar(cdr, entry->cdrname, &colptr, colbuf, sizeof(colbuf), 0, datefield ? 0 : 1);
+ }
if (colptr) {
/* Check first if the column filters this entry. Note that this