cdr_mysql: fix UTC support
authorTzafrir Cohen <tzafrir.cohen@xorcom.com>
Mon, 12 Sep 2016 12:37:30 +0000 (15:37 +0300)
committerTzafrir Cohen <tzafrir.cohen@xorcom.com>
Thu, 15 Sep 2016 10:16:04 +0000 (13:16 +0300)
* Make 'cdrzone=UTC' work properly.
* Fix the documentation of cdr_mysql.conf: it's cdrzone and not timezone

ASTERISK-26359 #close

Change-Id: I2a6f67b71bbbe77cac31a34d0bbfb1d67c933778

addons/cdr_mysql.c
configs/samples/cdr_mysql.conf.sample

index 9873395..896bad6 100644 (file)
@@ -245,7 +245,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);
                                        value = ast_strdupa(timestr);
                                        cdrname = "calldate";
                                } else {
@@ -260,8 +260,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")) &&
@@ -273,6 +272,12 @@ db_reconnect:
                                 strstr(entry->type, "numeric") ||
                                 strstr(entry->type, "fixed"))) {
                                ast_cdr_format_var(cdr, cdrname, &value, workspace, sizeof(workspace), 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 {
index 04b7049..e15a8ed 100644 (file)
 ;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