From: Tzafrir Cohen Date: Mon, 12 Sep 2016 12:37:30 +0000 (+0300) Subject: cdr_mysql: fix UTC support X-Git-Tag: 11.24.0-rc1~7^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c5a420d5d7ed67e5c918f66d1fafb4bd3602b362;p=thirdparty%2Fasterisk.git cdr_mysql: fix UTC support * Make 'cdrzone=UTC' work properly. * Fix the documentation of cdr_mysql.conf: it's cdrzone and not timezone ASTERISK-26359 #close Change-Id: I2a6f67b71bbbe77cac31a34d0bbfb1d67c933778 (cherry picked from commit d3ddf4b0fdaf3e9562ede947c2367031434b3b5e) --- diff --git a/addons/cdr_mysql.c b/addons/cdr_mysql.c index b87d8c6aa1..16b53378e8 100644 --- a/addons/cdr_mysql.c +++ b/addons/cdr_mysql.c @@ -250,7 +250,7 @@ db_reconnect: struct ast_tm tm; char timestr[128]; ast_localtime(&tv, &tm, ast_str_strlen(cdrzone) ? ast_str_buffer(cdrzone) : NULL); - ast_strftime(timestr, sizeof(timestr), "%Y-%m-%d %T", &tm); + ast_strftime(timestr, sizeof(timestr), DATE_FORMAT, &tm); ast_cdr_setvar(cdr, "calldate", timestr, 0); cdrname = "calldate"; } else { @@ -265,8 +265,7 @@ db_reconnect: /* Need the type and value to determine if we want the raw value or not */ if (entry->staticvalue) { value = ast_strdupa(entry->staticvalue); - } else if ((!strcmp(cdrname, "start") || - !strcmp(cdrname, "answer") || + } else if ((!strcmp(cdrname, "answer") || !strcmp(cdrname, "end") || !strcmp(cdrname, "disposition") || !strcmp(cdrname, "amaflags")) && @@ -278,6 +277,14 @@ db_reconnect: strstr(entry->type, "numeric") || strstr(entry->type, "fixed"))) { ast_cdr_getvar(cdr, cdrname, &value, workspace, sizeof(workspace), 0, 1); + } else if (!strcmp(cdrname, "start")) { + struct ast_tm tm; + char timestr[128]; + ast_localtime(&cdr->start, &tm, ast_str_strlen(cdrzone) ? ast_str_buffer(cdrzone) : NULL); + ast_strftime(timestr, sizeof(timestr), DATE_FORMAT, &tm); + value = ast_strdupa(timestr); + } else if (!strcmp(cdrname, "calldate")) { + /* Skip calldate - the value has already been dup'd */ } else { ast_cdr_getvar(cdr, cdrname, &value, workspace, sizeof(workspace), 0, 0); } diff --git a/configs/cdr_mysql.conf.sample b/configs/cdr_mysql.conf.sample index 04b70493b5..e15a8ed932 100644 --- a/configs/cdr_mysql.conf.sample +++ b/configs/cdr_mysql.conf.sample @@ -18,7 +18,10 @@ ;user=asteriskcdruser ;port=3306 ;sock=/tmp/mysql.sock -;timezone=UTC ; Previously called usegmtime +; By default CDRs are logged in the system's time zone +;cdrzone=UTC ; log CDRs with UTC +;usegmtime=yes ;log date/time in GMT. Default is "no" +;cdrzone=America/New_York ; or use a specific time zone ; ; If your system's locale differs from mysql database character set, ; cdr_mysql can damage non-latin characters in CDR variables. Use this