CDR File Module
This module is used to write the CDRs(call detail record) into a file. The configuration file is cdrfile.conf.
Cdrfile is a module that receives a call.cdr message (maybe from cdrbuild).
Contents |
Configuration
The file used in configuration is cdrfile.conf.
Section [general]
- file: string: Name of the file to write the CDR to
- You should check that this file is log rotated - see '/etc/logrotate.d/yate'
- Example: file=/var/log/yate-cdr.tsv
- tabs: bool: Use tab-separated instead of comma-separated if format is missing.
- tabs=true
- combined: bool: Use combined CDR for all legs of a call.
- combined=false
- format: string: Custom format to use, overrides default.
- Each ${parameter} is replaced with the value of that parameter in the call.cdr message.
Below are listed the format defaults for each mode combination:
- tab-separated (.tsv), combined=false
- format=${time} ${billid} ${chan} ${address} ${caller} ${called} ${billtime} ${ringtime} ${duration} ${direction} ${status} {reason}
- tab-separated (.tsv), combined=true
- format=${time} ${billid} ${chan} ${address} ${caller} ${called} ${billtime} ${ringtime} ${duration} ${status} ${reason} ${out_leg.chan}
${out_leg.address} ${out_leg.billtime} ${out_leg.ringtime} ${out_leg.duration} ${out_leg.reason}
- comma-separated (.csv), combined=false
- format=${time},"${billid}","${chan}","${address}","${caller}","${called}",${billtime},${ringtime},${duration},"${direction}","${status}","${reason}"
- comma-separated (.csv), combined=true
- format=${time},"${billid}","${chan}","${address}","${caller}","${called}",${billtime},${ringtime},${duration},"${status}","${reason}","${out_leg.chan}",
"${out_leg.address}",${out_leg.billtime},${out_leg.ringtime},${out_leg.duration},"${out_leg.reason}"
- comma-separated (.csv), combined=true
List of available variables that could be used to construct a CDR record
Note: in order for a parameter to be available in the CDR, it has to be enabled in cdrbuild.conf.
The "cdrwrite" parameter is special, a boolean value of false will prevent the CDR from being written. This is to avoid generating CDR records for utility channels while still being able to track them.
- ${time} - UNIX time
- ${billid} - billing record id
- ${chan} - channel used
- ${address} - destination address
- ${caller} - username/number of the device that initiated/received the call
- ${called} - destination number
- ${callername} - caller id
- ${billtime} - billable call duration, starts from the point when the remote party actually answers the call
- ${ringtime} - total time of the call
- ${direction} - has a value of outgoing or incoming
- ${status} - disposition of the call
- ${reason} - reason for call disconnection
Set CDR billing
In many real-life situations CDR billing is done in seconds.
It's useful to set:
cdrbuild.conf
[general] resolution=sec
Converting call time
If you need a human and machine readable representation of the time column you can use the following AWK script:
awk 'BEGIN{FS="\t";OFS="\t"} {$1=strftime("%Y%m%d%H%M%S",$1); print $0}' /var/log/yate-cdr.tsv
The above assumes TAB separated format, the ${time} parameter is in the first column (the $1 positional parameter) and the CDR file is in its usual place.
Adapt the script as needed. You can make the date/time more readable by inserting separators in the time format.
See also