[asterisk-users] Asterisk-1.8.23.1 mysql cdr

Asghar Mohammad asghar144 at gmail.com
Sat Sep 14 08:50:07 CDT 2013


Hi list,
I am using Asterisk1.6.2 form a long time and upgarding to
Asterisk-1.8.23.1.
I am using mysql backend for cdr.
in asterisk-1.6.2 i have usegmtime=yes and it works as expected insert cdr
date in GMT0.
now i tested Asterisk-1.8.23.1 and asterisk-11.5 with same results no
matter what i configure in cdr_mysql.conf "timezone=UTC usegmtime=yes" cdr
always inserted in local time.

I dig into code of cdr_mysql.c and find a variable cdrzone when i set
cdrzone in configuration and load module with debug set to 1 it print on
console "Local time zone set to whatever i have in configuration i tried
cdrzone=GMT, cdrzone=UTC, cdrzone=yes and many combinations with
timezone=UTC and without timezone=UTS but cdr is alway in my local timezone
GMT +2.

in further investigation i have seen there is no timezone conversation.
from asterisk1.8.231 mysql_cdr.c

  if (!strcmp(entry->name, "calldate")) {
                                /*!\note
                                 * For some dumb reason, "calldate" used to
be formulated using
                                 * the datetime the record was posted,
rather than the start
                                 * time of the call.  If someone really
wants the old compatible
                                 * behavior, it's provided here.
                                 */
                                if (calldate_compat) {
                                        struct timeval tv = ast_tvnow();
                                        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_cdr_setvar(cdr, "calldate",
timestr, 0);
                                        cdrname = "calldate";
                                } else {
                                        cdrname = "start";
                                }
                        } else {
                                cdrname = entry->cdrname;
                        }


from addons  1.6.2.4 mysql_cdr.c

 if (calldate_compat) {
                                        struct timeval tv = ast_tvnow();
                                        struct ast_tm tm;
                                        char timestr[128];
                                        ast_localtime(&tv, &tm, NULL);
                                        ast_strftime(timestr,
sizeof(timestr), "%Y-%m-%d %T", &tm);
                                        ast_cdr_setvar(cdr, "calldate",
timestr, 0);
                                        cdrname = "calldate";
                                } else if (usegmtime) {
                                        struct ast_tm tm;
                                        char timestr[128];
                                        ast_localtime(&cdr->start, &tm,
"GMT");
                                        ast_strftime(timestr,
sizeof(timestr), DATE_FORMAT, &tm);
                                        ast_cdr_setvar(cdr, "calldate",
timestr, 0);
                                        cdrname = "calldate";
                                } else {
                                        cdrname = "start";
                                }
                        } else {
                                cdrname = entry->cdrname;

please note else if(usegmtime)
the codes are removed from latest asterisk versions.
i am not c programmer anybody can help me solve this issue?

Thanks in advance.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-users/attachments/20130914/abe22c95/attachment.htm>


More information about the asterisk-users mailing list