Class: AsteriskMiniStatement
- Inherits:
-
Object
- Object
- AsteriskMiniStatement
- Defined in:
- lib/asterisk_mini_statement.rb
Instance Attribute Summary collapse
-
#to_px ⇒ Object
readonly
Returns the value of attribute to_px.
-
#to_s ⇒ Object
readonly
Returns the value of attribute to_s.
-
#to_xml ⇒ Object
readonly
Returns the value of attribute to_xml.
Instance Method Summary collapse
-
#initialize(cdr_file = '/var/log/asterisk/cdr-csv/Master.csv', startdate: (Date.today - 8).strftime("%d-%b-%Y"), enddate: (Date.today - 1).strftime("%d-%b-%Y"), telno: 'unknown', outgoing_regex: /SIP\/(\d+)@/) ⇒ AsteriskMiniStatement
constructor
A new instance of AsteriskMiniStatement.
Constructor Details
#initialize(cdr_file = '/var/log/asterisk/cdr-csv/Master.csv', startdate: (Date.today - 8).strftime("%d-%b-%Y"), enddate: (Date.today - 1).strftime("%d-%b-%Y"), telno: 'unknown', outgoing_regex: /SIP\/(\d+)@/) ⇒ AsteriskMiniStatement
Returns a new instance of AsteriskMiniStatement.
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/asterisk_mini_statement.rb', line 25 def initialize(cdr_file='/var/log/asterisk/cdr-csv/Master.csv', startdate: (Date.today - 8).strftime("%d-%b-%Y"), enddate: (Date.today - 1).strftime("%d-%b-%Y"), telno: 'unknown', outgoing_regex: /SIP\/(\d+)@/) sdate = Date.parse startdate edate = Date.parse enddate s = File.read cdr_file headings = %i(accountcode src dst dcontet clid channel dstchannel lastapp lastdata start answer end duration billsec disposition amaflags astid) lines = s.lines.map {|line| Hash[headings.zip(CSV.parse(line).first)] } lines.select! do |x| date = Date.parse(x[:start]) date >= sdate and date <= edate and \ x[:disposition] == 'ANSWERED' and x[:lastapp] == 'Dial' end days = lines.group_by {|x| Date.parse(x[:start]) } px = Polyrex.new('calls[telno, period]/day[date]/item[time, telno,' + ' io, dur]') px.summary.telno = telno px.summary.period = "%s - %s" % [sdate.strftime("%d/%m/%Y"), edate.strftime("%d/%m/%Y")] days.each do |day, items| px.create_day({date: day.strftime("%d-%b-%Y")}) do |create| items.each do |x| outgoing = x[:lastdata][outgoing_regex,1] io, telno = outgoing ? ['out', outgoing] : ['in', x[:clid][/"([^"]+)/,1]] raw_a = Subunit.new(units={minutes:60, hours:60}, seconds: x[:duration].to_i).to_a a = raw_a.zip(%w(h m s)).inject([]) do |r, x| val, label = x val > 0 ? r << (val.to_s + label) : r end.take 2 create.item(time: x[:start][/\d{2}:\d{2}/], telno: telno, io: io, dur: a.join(' ') ) end end end @to_px = px @to_xml = px.to_xml pretty: true title = 'Telephone mini-statement' summary = " #{title} #{'=' * title.length} telno: #{px.summary.telno} Period: #{px.summary.period} Breakdown: Date/time Telephone duration ========= =========== ========" records = px.records.inject('') do |r, day| date = Date.parse(day.date) r << "\n" + date.strftime("%A #{date.day.ordinalize} %B %Y") + "\n\n" day.records.inject(r) do |r2, x| r2 << (x.io == 'in' ? '>' : '<') r2 << Time.parse(x.time).strftime(" %l:%M%P: ") r2 << x.telno.ljust(13) + x.dur.rjust(8) + "\n" end r << "\n" + '-' * 32 + "\n" end @to_s = [summary,records].join("\n") end |
Instance Attribute Details
#to_px ⇒ Object (readonly)
Returns the value of attribute to_px.
23 24 25 |
# File 'lib/asterisk_mini_statement.rb', line 23 def to_px @to_px end |
#to_s ⇒ Object (readonly)
Returns the value of attribute to_s.
23 24 25 |
# File 'lib/asterisk_mini_statement.rb', line 23 def to_s @to_s end |
#to_xml ⇒ Object (readonly)
Returns the value of attribute to_xml.
23 24 25 |
# File 'lib/asterisk_mini_statement.rb', line 23 def to_xml @to_xml end |