(closes issue #13366)
Reported by: erousseau This was a reasonable enhancement request, which was easy to implement. Since it's an enhancement, it could only be applied to trunk. Basically, for accounting where "initiated" seconds are billed for, if the microseconds field on the end time is greater than the microseconds field for the answer time, add one second to the billsec field. The implementation was requested by erousseau, and I've implemented it as requested. I've updated the CHANGES, the cdr.conf.sample, and the .h files accordingly, to accept and set a flag for the corresponding new option. cdr.c adds in the extra second based on the usec fields if the option is set. Tested, seems to be working fine. git-svn-id: http://svn.digium.com/svn/asterisk/trunk@140057 f38db490-d61c-443f-a65b-d21fe96a405b
This commit is contained in:
parent
009b7b31cb
commit
b0583a6878
5
CHANGES
5
CHANGES
|
@ -209,6 +209,11 @@ Miscellaneous
|
|||
operator. This is most helpful when working with long SQL queries in
|
||||
func_odbc.conf, as the queries no longer need to be specified on a single
|
||||
line.
|
||||
* CDR config file, cdr.conf, has an added option, "initiatedseconds",
|
||||
which will add a second to the billsec when the ending
|
||||
time is set, if the number in the microseconds field of the end time is
|
||||
greater than the number of microseconds in the answer time. This allows
|
||||
users to count the 'initiated' seconds in their billing records.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
--- Functionality changes from Asterisk 1.4.X to Asterisk 1.6.0 -------------
|
||||
|
|
|
@ -65,6 +65,15 @@
|
|||
; retrieved inside of of this extension.
|
||||
;endbeforehexten=no
|
||||
|
||||
; Normally, the 'billsec' field logged to the backends (text files or databases)
|
||||
; is simply the end time (hangup time) minus the answer time in seconds. Internally,
|
||||
; asterisk stores the time in terms of microseconds and seconds. By setting
|
||||
; initiatedseconds to 'yes', you can force asterisk to report any seconds
|
||||
; that were initiated (a sort of round up method). Technically, this is
|
||||
; when the microsecond part of the end time is greater than the microsecond
|
||||
; part of the answer time, then the billsec time is incremented one second.
|
||||
;initiatedseconds=no
|
||||
|
||||
;
|
||||
;
|
||||
; CHOOSING A CDR "BACKEND" (what kind of output to generate)
|
||||
|
|
|
@ -84,6 +84,8 @@ enum ast_option_flags {
|
|||
AST_OPT_FLAG_VERBOSE_FILE = (1 << 24),
|
||||
/*! Terminal colors should be adjusted for a light-colored background */
|
||||
AST_OPT_FLAG_LIGHT_BACKGROUND = (1 << 25),
|
||||
/*! Count Initiated seconds in CDR's */
|
||||
AST_OPT_FLAG_INITIATED_SECONDS = (1 << 26),
|
||||
};
|
||||
|
||||
/*! These are the options that set by default when Asterisk starts */
|
||||
|
|
|
@ -874,8 +874,11 @@ void ast_cdr_end(struct ast_cdr *cdr)
|
|||
ast_log(LOG_WARNING, "CDR on channel '%s' has no answer time but is 'ANSWERED'\n", S_OR(cdr->channel, "<unknown>"));
|
||||
cdr->disposition = AST_CDR_FAILED;
|
||||
}
|
||||
} else
|
||||
} else {
|
||||
cdr->billsec = cdr->end.tv_sec - cdr->answer.tv_sec;
|
||||
if (ast_test_flag(&ast_options, AST_OPT_FLAG_INITIATED_SECONDS))
|
||||
cdr->billsec += cdr->end.tv_usec > cdr->answer.tv_usec ? 1 : 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1386,6 +1389,7 @@ static int do_reload(int reload)
|
|||
const char *size_value;
|
||||
const char *time_value;
|
||||
const char *end_before_h_value;
|
||||
const char *initiatedseconds_value;
|
||||
int cfg_size;
|
||||
int cfg_time;
|
||||
int was_enabled;
|
||||
|
@ -1444,6 +1448,8 @@ static int do_reload(int reload)
|
|||
}
|
||||
if ((end_before_h_value = ast_variable_retrieve(config, "general", "endbeforehexten")))
|
||||
ast_set2_flag(&ast_options, ast_true(end_before_h_value), AST_OPT_FLAG_END_CDR_BEFORE_H_EXTEN);
|
||||
if ((initiatedseconds_value = ast_variable_retrieve(config, "general", "initiatedseconds")))
|
||||
ast_set2_flag(&ast_options, ast_true(initiatedseconds_value), AST_OPT_FLAG_INITIATED_SECONDS);
|
||||
}
|
||||
|
||||
if (enabled && !batchmode) {
|
||||
|
|
Reference in New Issue