300e5f4 by Arvind at 2014-01-09 |
1 |
import argparse |
|
2 |
import datetime |
|
3 |
import query |
cad2a99 by Arvind at 2014-01-14 |
4 |
import gmail |
41df78b by Arvind at 2014-03-10 |
5 |
import config as conf |
cad2a99 by Arvind at 2014-01-14 |
6 |
import mailConfig |
41df78b by Arvind at 2014-03-10 |
7 |
import decimal |
|
8 |
|
200085d by Arvind at 2014-01-09 |
9 |
parser = argparse.ArgumentParser(description="""Generate report for the date specified. |
|
10 |
Start and end date default to present day. |
|
11 |
Start time defaults to 00:00:00. |
|
12 |
End time defaults to 23:59:59.""") |
300e5f4 by Arvind at 2014-01-09 |
13 |
parser.add_argument('-s','--start-date', type=str, default=datetime.datetime.strftime(datetime.date.today(), '%Y-%m-%d'), help="Start date (YYYY-MM-DD)") |
|
14 |
parser.add_argument('-e','--end-date', type=str, default=datetime.datetime.strftime(datetime.date.today(), '%Y-%m-%d'), help="End date (YYYY-MM-DD)") |
|
15 |
parser.add_argument('-S','--start-time', type=str, default = '00:00:00', help="Start time (HH:MM:SS)") |
200085d by Arvind at 2014-01-09 |
16 |
parser.add_argument('-E','--end-time', type=str, default='23:59:59', help="End time (HH:MM:SS)") |
cad2a99 by Arvind at 2014-01-14 |
17 |
parser.add_argument('-p','--print', type=bool, default=True, help="Print report on command line") |
|
18 |
parser.add_argument('-m','--mail', type=bool, default=False, help="Mail report to addressess in mailConfig.py") |
9d54d1e by Arvind at 2014-01-09 |
19 |
|
|
20 |
|
300e5f4 by Arvind at 2014-01-09 |
21 |
args = parser.parse_args() |
|
22 |
startDate = args.start_date + " " + args.start_time |
|
23 |
endDate = args.end_date + " " + args.end_time |
|
24 |
|
|
25 |
postings = query.Query('lb_postings') |
|
26 |
callDetails = query.Query('cdr') |
|
27 |
average_call_length = callDetails.average(startDate, endDate) |
|
28 |
audio_minutes = callDetails.sum(startDate, endDate) |
2e37597 by Arvind at 2014-01-14 |
29 |
mobilink_load = callDetails.call_distribution(startDate, endDate, 'mobilink') |
|
30 |
mobilink_tata_load = callDetails.call_distribution(startDate, endDate, 'mobilinktata') |
300e5f4 by Arvind at 2014-01-09 |
31 |
|
cad2a99 by Arvind at 2014-01-14 |
32 |
|
41df78b by Arvind at 2014-03-10 |
33 |
def individual_audio_minutes(): |
|
34 |
"""Return the total number of minutes on outgoing calls for every IP |
|
35 |
address of modems specified in conf.py |
d48d677 by Arvind at 2014-01-15 |
36 |
|
41df78b by Arvind at 2014-03-10 |
37 |
""" |
|
38 |
minutes = {} |
|
39 |
for ip in conf.ip_addr: |
|
40 |
minutes[ip] = callDetails.totalMinutes(ip, startDate, endDate) |
|
41 |
return minutes |
d48d677 by Arvind at 2014-01-15 |
42 |
|
41df78b by Arvind at 2014-03-10 |
43 |
def individual_load(): |
|
44 |
""" Return the fraction of load on each modem.""" |
|
45 |
minutes = individual_audio_minutes() |
|
46 |
for ip in minutes: |
|
47 |
minutes[ip] = round(minutes[ip]/audio_minutes, 4) |
|
48 |
return minutes |
d48d677 by Arvind at 2014-01-15 |
49 |
|
41df78b by Arvind at 2014-03-10 |
50 |
def genJSON(): |
|
51 |
return ({"Number_of_postings_published": postings.posts(startDate, |
|
52 |
endDate), |
d48d677 by Arvind at 2014-01-15 |
53 |
|
41df78b by Arvind at 2014-03-10 |
54 |
"Number_of_recordings_made": postings.recordings(startDate, |
|
55 |
endDate), |
d48d677 by Arvind at 2014-01-15 |
56 |
|
41df78b by Arvind at 2014-03-10 |
57 |
"Number_of_impact_stories": postings.filter_by_title('impact', |
|
58 |
startDate, endDate), |
d48d677 by Arvind at 2014-01-15 |
59 |
|
41df78b by Arvind at 2014-03-10 |
60 |
"Number_of_missed_calls": callDetails.missedCalls(startDate, |
|
61 |
endDate), |
d48d677 by Arvind at 2014-01-15 |
62 |
|
41df78b by Arvind at 2014-03-10 |
63 |
"Number_of_missed_calls_on_mobilink": |
|
64 |
callDetails.missedCalls(startDate, endDate, 'mobilink'), |
d48d677 by Arvind at 2014-01-15 |
65 |
|
41df78b by Arvind at 2014-03-10 |
66 |
"Number_of_missed_calls_on_mobilinktata": |
|
67 |
callDetails.missedCalls(startDate, endDate,'mobilinktata'), |
d48d677 by Arvind at 2014-01-15 |
68 |
|
41df78b by Arvind at 2014-03-10 |
69 |
"Number_of_calls_answered": callDetails.answeredCalls(startDate, |
|
70 |
endDate), |
d48d677 by Arvind at 2014-01-15 |
71 |
|
41df78b by Arvind at 2014-03-10 |
72 |
"Number_of_calls_lasting_less_than_30_seconds": callDetails.filter_calls_by_duration(startDate, endDate, 30), |
d48d677 by Arvind at 2014-01-15 |
73 |
|
f0668c3 by Arvind at 2014-03-10 |
74 |
"Average_length_of_calls_in_minutes": average_call_length, |
cad2a99 by Arvind at 2014-01-14 |
75 |
|
41df78b by Arvind at 2014-03-10 |
76 |
"Total_number_of_audio_minutes_played": str(audio_minutes), |
d48d677 by Arvind at 2014-01-15 |
77 |
|
41df78b by Arvind at 2014-03-10 |
78 |
"Audio_minutes_on_channel": individual_audio_minutes(), |
d48d677 by Arvind at 2014-01-15 |
79 |
|
41df78b by Arvind at 2014-03-10 |
80 |
"Load_on_channel": individual_load(), |
d48d677 by Arvind at 2014-01-15 |
81 |
|
41df78b by Arvind at 2014-03-10 |
82 |
"Busiest_hour_for_mobilink": mobilink_load["maxLoad"], |
d48d677 by Arvind at 2014-01-15 |
83 |
|
41df78b by Arvind at 2014-03-10 |
84 |
"Number_of_calls_in_busiest_hour_for_mobilink": |
|
85 |
mobilink_load["maxCalls"], |
d48d677 by Arvind at 2014-01-15 |
86 |
|
41df78b by Arvind at 2014-03-10 |
87 |
"Least_active_hour_for_mobilink": mobilink_load["minLoad"], |
d48d677 by Arvind at 2014-01-15 |
88 |
|
41df78b by Arvind at 2014-03-10 |
89 |
"Busiest_hour_for_mobilinktata": mobilink_tata_load["maxLoad"], |
d48d677 by Arvind at 2014-01-15 |
90 |
|
41df78b by Arvind at 2014-03-10 |
91 |
"Number_of_calls_in_busiest_hour_for_mobilinktata": |
|
92 |
mobilink_tata_load["maxCalls"], |
d48d677 by Arvind at 2014-01-15 |
93 |
|
41df78b by Arvind at 2014-03-10 |
94 |
"Least_active_hour_for_mobilinktata": |
|
95 |
mobilink_tata_load["minLoad"], |
d48d677 by Arvind at 2014-01-15 |
96 |
|
41df78b by Arvind at 2014-03-10 |
97 |
"Number_of_calls_unanswered": |
|
98 |
callDetails.calls_unanswered(startDate, endDate), |
d48d677 by Arvind at 2014-01-15 |
99 |
|
41df78b by Arvind at 2014-03-10 |
100 |
"Maximum_duration_of_unanswered_call": |
|
101 |
callDetails.max_duration_UC(startDate, endDate) |
|
102 |
}) |
|
103 |
|
|
104 |
def genReport(): |
d48d677 by Arvind at 2014-01-15 |
105 |
|
41df78b by Arvind at 2014-03-10 |
106 |
rep = genJSON() |
|
107 |
keys = rep.keys() |
|
108 |
template = '' |
|
109 |
for key in keys: |
|
110 |
if type(rep[key]) is dict: |
|
111 |
for item in rep[key]: |
91e321e by Arvind at 2014-03-10 |
112 |
rep[key][item] = rep[key][item] |
41df78b by Arvind at 2014-03-10 |
113 |
template+= key.replace('_', ' ') + ': ' + str(rep[key]) + '\n' |
efa17c7 by Arvind at 2014-01-25 |
114 |
|
41df78b by Arvind at 2014-03-10 |
115 |
return template |
54dd346 by Arvind at 2014-01-25 |
116 |
|
d48d677 by Arvind at 2014-01-15 |
117 |
|
|
118 |
if args.mail is False: |
|
119 |
report = genReport() |
|
120 |
print report |
|
121 |
else: |
|
122 |
report = genReport() |
3410657 by Arvind at 2014-01-15 |
123 |
subject = mailConfig.subject.format(startDate, endDate) |
1e18075 by Arvind at 2014-01-14 |
124 |
report = mailConfig.text.format(startDate, endDate) + '\n' + report |
cad2a99 by Arvind at 2014-01-14 |
125 |
mail = gmail.GMail(mailConfig.username, mailConfig.password) |
4c66686 by Arvind at 2014-01-20 |
126 |
message = gmail.Message(subject, mailConfig.to, mailConfig.cc, text=report) |
d48d677 by Arvind at 2014-01-15 |
127 |
mail.send(message) |