queri 0.0.3 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +43 -4
- data/lib/queri/aggregate_report_helpers.rb +15 -0
- data/lib/queri/arg_helpers.rb +24 -0
- data/lib/queri/composite_agent_level_report_helpers.rb +19 -0
- data/lib/queri/composite_report_helpers.rb +14 -0
- data/lib/queri/stats/agents_and_sessions/agent_availability.rb +2 -49
- data/lib/queri/stats/answered_calls/agents_on_queue.rb +2 -49
- data/lib/queri/stats/answered_calls/all_calls.rb +2 -50
- data/lib/queri/stats/answered_calls/answered_calls_by_direction.rb +2 -51
- data/lib/queri/stats/answered_calls/answered_calls_by_queue.rb +2 -51
- data/lib/queri/stats/answered_calls/answered_calls_by_stints.rb +2 -51
- data/lib/queri/stats/answered_calls/calls_fully_within_the_given_time_interval.rb +2 -50
- data/lib/queri/stats/answered_calls/disconnection_causes.rb +2 -51
- data/lib/queri/stats/answered_calls/dnis_used.rb +2 -51
- data/lib/queri/stats/answered_calls/ivr_selection.rb +2 -51
- data/lib/queri/stats/answered_calls/music_on_hold_by_agent.rb +2 -49
- data/lib/queri/stats/answered_calls/queue_position.rb +2 -51
- data/lib/queri/stats/answered_calls/service_level_agreement.rb +2 -49
- data/lib/queri/stats/answered_calls/transfers.rb +2 -51
- data/lib/queri/stats/details_of_agent_sessions_and_pauses/detail_of_agent_pauses.rb +2 -54
- data/lib/queri/stats/details_of_agent_sessions_and_pauses/detail_of_agent_sessions.rb +2 -54
- data/lib/queri/stats/details_of_answered_calls/queue_details.rb +35 -0
- data/lib/queri/stats/details_of_answered_calls.rb +11 -0
- data/lib/queri/stats/unanswered_calls/all_calls_by_stints.rb +24 -0
- data/lib/queri/stats/unanswered_calls/call_overview.rb +29 -0
- data/lib/queri/stats/unanswered_calls/calls_fully_within_the_given_time_interval.rb +82 -0
- data/lib/queri/stats/unanswered_calls/disconnection_causes.rb +24 -0
- data/lib/queri/stats/unanswered_calls/dnis_used.rb +24 -0
- data/lib/queri/stats/unanswered_calls/dnis_used_for_all_calls.rb +24 -0
- data/lib/queri/stats/unanswered_calls/enter_queue_position.rb +24 -0
- data/lib/queri/stats/unanswered_calls/enter_queue_position_for_all_calls.rb +24 -0
- data/lib/queri/stats/unanswered_calls/inclusive_answered_service_level_agreement.rb +25 -0
- data/lib/queri/stats/unanswered_calls/inclusive_service_level_agreement.rb +25 -0
- data/lib/queri/stats/unanswered_calls/ivr_selection.rb +28 -0
- data/lib/queri/stats/unanswered_calls/ivr_selection_for_all_calls.rb +24 -0
- data/lib/queri/stats/unanswered_calls/unanswered_calls_by_key_press.rb +24 -0
- data/lib/queri/stats/unanswered_calls/unanswered_calls_by_queue.rb +25 -0
- data/lib/queri/stats/unanswered_calls/unanswered_calls_by_stints.rb +24 -0
- data/lib/queri/stats/unanswered_calls/unanswered_calls_distribution_by_length.rb +26 -0
- data/lib/queri/stats/unanswered_calls/unanswered_outbound_calls_by_agent.rb +24 -0
- data/lib/queri/stats.rb +19 -2
- data/lib/queri/version.rb +1 -1
- data/spec/stats/agents_and_sessions/agent_availability_spec.rb +1 -1
- data/spec/stats/agents_and_sessions/agents_and_sessions_spec.rb +1 -1
- data/spec/stats/answered_calls/agents_on_queue_spec.rb +1 -1
- data/spec/stats/answered_calls/all_calls_spec.rb +1 -1
- data/spec/stats/answered_calls/answered_calls_spec.rb +1 -1
- data/spec/stats/details_of_answered_calls/details_of_answered_calls_spec.rb +7 -0
- data/spec/stats/details_of_answered_calls/queue_details_spec.rb +20 -0
- data/spec/stats/unanswered_calls/all_calls_by_stints_spec.rb +22 -0
- data/spec/stats/unanswered_calls/call_overview_spec.rb +22 -0
- data/spec/stats/unanswered_calls/calls_fully_within_the_given_time_interval_spec.rb +20 -0
- data/spec/stats/unanswered_calls/disconnection_causes_spec.rb +20 -0
- data/spec/stats/unanswered_calls/dnis_used_for_all_calls_spec.rb +22 -0
- data/spec/stats/unanswered_calls/dnis_used_spec.rb +22 -0
- data/spec/stats/unanswered_calls/enter_queue_position_for_all_calls_spec.rb +22 -0
- data/spec/stats/unanswered_calls/enter_queue_position_spec.rb +22 -0
- data/spec/stats/unanswered_calls/inclusive_answered_service_level_agreement_spec.rb +20 -0
- data/spec/stats/unanswered_calls/inclusive_service_level_agreement_spec.rb +20 -0
- data/spec/stats/unanswered_calls/ivr_selection_for_all_calls_spec.rb +22 -0
- data/spec/stats/unanswered_calls/ivr_selection_spec.rb +22 -0
- data/spec/stats/unanswered_calls/unanswered_calls_by_key_press_spec.rb +22 -0
- data/spec/stats/unanswered_calls/unanswered_calls_by_queue_spec.rb +22 -0
- data/spec/stats/unanswered_calls/unanswered_calls_by_stints_spec.rb +22 -0
- data/spec/stats/unanswered_calls/unanswered_calls_distribution_by_length_spec.rb +20 -0
- data/spec/stats/unanswered_calls/unanswered_outbound_calls_by_agent_spec.rb +22 -0
- metadata +64 -3
- /data/lib/queri/stats/{details_of_agents_sessions_and_pauses.rb → details_of_agent_sessions_and_pauses.rb} +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 81573e2933bacb797683dfda3f935882e6754f07
|
4
|
+
data.tar.gz: 9da9459034980ce147cb498b850aa783ec41bfd1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5b0184f3413c0d6cdb93564fa5239549adb704abb4e37e201aaf4cf5ee1bccbd299b09c2e3ea7c9b526d85da12b1587ba8a1924f82a2b88260508d4570ae71c9
|
7
|
+
data.tar.gz: b76246a5b1b0c5e1c2e5d7ba532be82eef0cdff49d2122f33f1e0e0a2db4df93f0392438ba0801b5dd075c88bc33f0b3d598614a3431761864e55f3491ffd710
|
data/README.md
CHANGED
@@ -55,7 +55,7 @@ Currently returns analyses from two methods: QM.stats and QM.realtime.
|
|
55
55
|
* AnsweredCallsByDirection
|
56
56
|
* AnsweredCallsByQueue
|
57
57
|
* AnsweredCallsByStints
|
58
|
-
*
|
58
|
+
* CallsFullyWithinTheGivenTimeInterval
|
59
59
|
* DisconnectionCauses
|
60
60
|
* DnisUsed
|
61
61
|
* IvrSelection
|
@@ -66,8 +66,27 @@ Currently returns analyses from two methods: QM.stats and QM.realtime.
|
|
66
66
|
* DetailsOfAgentSessionsAndPauses
|
67
67
|
* DetailOfAgentSessions
|
68
68
|
* DetailOfAgentPauses
|
69
|
+
* DetailsOfAnsweredCalls
|
70
|
+
* QueueDetails
|
69
71
|
* UnansweredCalls
|
70
72
|
* AllCalls
|
73
|
+
* AllCallsByStints
|
74
|
+
* CallOverview
|
75
|
+
* CallsFullyWithinTheGivenTimeInterval
|
76
|
+
* DisconnectionCauses
|
77
|
+
* DnisUsed
|
78
|
+
* DnisUsedForAllCalls
|
79
|
+
* EnterQueuePosition
|
80
|
+
* EnterQueuePositionForAllCalls
|
81
|
+
* InclusiveAnsweredServiceLevelAgreement
|
82
|
+
* InclusiveServiceLevelAgreement
|
83
|
+
* IvrSelection
|
84
|
+
* IvrSelectionForAllCalls
|
85
|
+
* UnansweredCallsByKeyPress
|
86
|
+
* UnansweredCallsByQueue
|
87
|
+
* UnansweredCallsByStints
|
88
|
+
* UnansweredCallsDistributionByLength
|
89
|
+
* UnansweredOutboundCallsByAgent
|
71
90
|
* Realtime
|
72
91
|
* Agents
|
73
92
|
* Queues
|
@@ -93,13 +112,17 @@ Composite aggregate reports return an Array of Hashes, each Hash corresponding t
|
|
93
112
|
* AgentAvailability
|
94
113
|
* AnsweredCalls
|
95
114
|
* AgentsOnQueue
|
115
|
+
* MusicOnHoldByAgent
|
116
|
+
* DetailsOfAnsweredCalls
|
117
|
+
* QueueDetails
|
118
|
+
* UnansweredCalls
|
119
|
+
* UnansweredOutboundCallsByAgent
|
120
|
+
* UnansweredCallsByKeyPress
|
96
121
|
* Realtime
|
97
122
|
* Agents
|
98
123
|
* Queues
|
99
124
|
* Composite agent-level reports
|
100
125
|
* Stats
|
101
|
-
* AnsweredCalls
|
102
|
-
* MusicOnHoldByAgent
|
103
126
|
* DetailsOfAgentSessionsAndPauses
|
104
127
|
* DetailOfAgentSessions
|
105
128
|
* DetailOfAgentPauses
|
@@ -107,9 +130,10 @@ Composite aggregate reports return an Array of Hashes, each Hash corresponding t
|
|
107
130
|
* Stats
|
108
131
|
* AnsweredCalls
|
109
132
|
* AllCalls
|
110
|
-
*
|
133
|
+
* CallsFullyWithinTheGivenTimeInterval
|
111
134
|
* UnansweredCalls
|
112
135
|
* AllCalls
|
136
|
+
* CallsFullyWithinTheGivenTimeInterval
|
113
137
|
* Composite aggregate reports
|
114
138
|
* Stats
|
115
139
|
* AnsweredCalls
|
@@ -122,6 +146,21 @@ Composite aggregate reports return an Array of Hashes, each Hash corresponding t
|
|
122
146
|
* QueuePosition
|
123
147
|
* ServiceLevelAgreement
|
124
148
|
* Transfers
|
149
|
+
* UnansweredCalls
|
150
|
+
* AllCallsByStints
|
151
|
+
* CallOverview
|
152
|
+
* DisconnectionCauses
|
153
|
+
* DnisUsed
|
154
|
+
* DnisUsedForAllCalls
|
155
|
+
* EnterQueuePosition
|
156
|
+
* EnterQueuePositionForAllCalls
|
157
|
+
* InclusiveAnsweredServiceLevelAgreement
|
158
|
+
* InclusiveServiceLevelAgreement
|
159
|
+
* IvrSelection
|
160
|
+
* IvrSelectionForAllCalls
|
161
|
+
* UnansweredCallsByQueue
|
162
|
+
* UnansweredCallsByStints
|
163
|
+
* UnansweredCallsDistributionByLength
|
125
164
|
|
126
165
|
## Contributing
|
127
166
|
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module AggregateReportHelpers
|
2
|
+
private
|
3
|
+
|
4
|
+
def parse_response
|
5
|
+
r = Queri.send_request(@queues, self, @period_start, @period_end)
|
6
|
+
xml_keys_to_human_readable_keys = self.class.key_translations.invert
|
7
|
+
r.each_with_index do |metric,i|
|
8
|
+
if i > 0
|
9
|
+
metric[0] = xml_keys_to_human_readable_keys[ metric[0] ]
|
10
|
+
end
|
11
|
+
end
|
12
|
+
r.shift
|
13
|
+
Hash[*r.flatten]
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module ArgHelpers
|
2
|
+
|
3
|
+
private
|
4
|
+
|
5
|
+
def valid_args? args
|
6
|
+
valid = true
|
7
|
+
valid = false if args[0].class != Array
|
8
|
+
valid = false if args[1].class != Time
|
9
|
+
valid = false if args[2].class != Time
|
10
|
+
if valid and args[0].empty?
|
11
|
+
raise ArgumentError, "queues array cannot be empty"
|
12
|
+
end
|
13
|
+
return valid
|
14
|
+
end
|
15
|
+
|
16
|
+
def normalize_times queues, period_start, period_end
|
17
|
+
if period_start > period_end
|
18
|
+
tmp = period_start
|
19
|
+
period_start = period_end
|
20
|
+
period_end = tmp
|
21
|
+
end
|
22
|
+
return [queues, period_start, period_end]
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module CompositeAgentLevelReportHelpers
|
2
|
+
private
|
3
|
+
|
4
|
+
def parse_response
|
5
|
+
r = Queri.send_request(@queues, self, @period_start, @period_end)
|
6
|
+
xml_keys_to_human_readable_keys = self.class.key_translations.invert
|
7
|
+
new_keys = r.shift.map {|k| xml_keys_to_human_readable_keys[k]}
|
8
|
+
agent_metrics = []
|
9
|
+
r.each do |agent|
|
10
|
+
agent_metrics << Hash[new_keys.zip(agent)]
|
11
|
+
end
|
12
|
+
agents = agent_metrics.map {|a| a[:agent]}.uniq
|
13
|
+
parsed_metrics = Hash.new
|
14
|
+
agents.each do |agent|
|
15
|
+
parsed_metrics[agent] = agent_metrics.select {|m| m[:agent] == agent}
|
16
|
+
end
|
17
|
+
return parsed_metrics
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module CompositeReportHelpers
|
2
|
+
private
|
3
|
+
|
4
|
+
def parse_response
|
5
|
+
r = Queri.send_request(@queues, self, @period_start, @period_end)
|
6
|
+
xml_keys_to_human_readable_keys = self.class.key_translations.invert
|
7
|
+
new_keys = r.shift.map {|k| xml_keys_to_human_readable_keys[k]}
|
8
|
+
agent_metrics = []
|
9
|
+
r.each do |agent|
|
10
|
+
agent_metrics << Hash[new_keys.zip(agent)]
|
11
|
+
end
|
12
|
+
return agent_metrics
|
13
|
+
end
|
14
|
+
end
|
@@ -1,18 +1,14 @@
|
|
1
1
|
module Queri
|
2
2
|
class Stats
|
3
3
|
class AgentsAndSessions
|
4
|
-
class AgentAvailability
|
5
|
-
|
4
|
+
class AgentAvailability < Queri::Stats
|
5
|
+
include CompositeReportHelpers
|
6
6
|
|
7
7
|
class << self
|
8
8
|
def xml_code
|
9
9
|
AgentsAndSessions.xml_code + ".AgentAvail"
|
10
10
|
end
|
11
11
|
|
12
|
-
def query_method
|
13
|
-
Stats.query_method
|
14
|
-
end
|
15
|
-
|
16
12
|
def key_translations
|
17
13
|
Hash[
|
18
14
|
:level, "Level",
|
@@ -26,50 +22,7 @@ module Queri
|
|
26
22
|
:placeholder_for_bar_graph, "..."
|
27
23
|
]
|
28
24
|
end
|
29
|
-
|
30
|
-
def keys
|
31
|
-
key_translations.keys
|
32
|
-
end
|
33
25
|
end
|
34
|
-
|
35
|
-
def initialize *args
|
36
|
-
raise ArgumentError, "expected arguments: queues(Array), period_start(Time), period_end(Time)" unless valid_args?(args)
|
37
|
-
@queues, @period_start, @period_end = normalize_times(*args)
|
38
|
-
@response = parse_response
|
39
|
-
end
|
40
|
-
|
41
|
-
private
|
42
|
-
|
43
|
-
def valid_args? args
|
44
|
-
valid = true
|
45
|
-
valid = false if args[0].class != Array
|
46
|
-
valid = false if args[1].class != Time
|
47
|
-
valid = false if args[2].class != Time
|
48
|
-
if valid and args[0].empty?
|
49
|
-
raise ArgumentError, "queues array cannot be empty"
|
50
|
-
end
|
51
|
-
return valid
|
52
|
-
end
|
53
|
-
|
54
|
-
def normalize_times queues, period_start, period_end
|
55
|
-
if period_start > period_end
|
56
|
-
tmp = period_start
|
57
|
-
period_start = period_end
|
58
|
-
period_end = tmp
|
59
|
-
end
|
60
|
-
return [queues, period_start, period_end]
|
61
|
-
end
|
62
|
-
|
63
|
-
def parse_response
|
64
|
-
r = Queri.send_request(@queues, self, @period_start, @period_end)
|
65
|
-
xml_keys_to_human_readable_keys = self.class.key_translations.invert
|
66
|
-
new_keys = r.shift.map {|k| xml_keys_to_human_readable_keys[k]}
|
67
|
-
agent_metrics = []
|
68
|
-
r.each do |agent|
|
69
|
-
agent_metrics << Hash[new_keys.zip(agent)]
|
70
|
-
end
|
71
|
-
return agent_metrics
|
72
|
-
end
|
73
26
|
end
|
74
27
|
end
|
75
28
|
end
|
@@ -1,18 +1,14 @@
|
|
1
1
|
module Queri
|
2
2
|
class Stats
|
3
3
|
class AnsweredCalls
|
4
|
-
class AgentsOnQueue
|
5
|
-
|
4
|
+
class AgentsOnQueue < Queri::Stats
|
5
|
+
include CompositeReportHelpers
|
6
6
|
|
7
7
|
class << self
|
8
8
|
def xml_code
|
9
9
|
AnsweredCalls.xml_code + ".AgentsOnQueue"
|
10
10
|
end
|
11
11
|
|
12
|
-
def query_method
|
13
|
-
Stats.query_method
|
14
|
-
end
|
15
|
-
|
16
12
|
def key_translations
|
17
13
|
Hash[
|
18
14
|
:agent, "Agent",
|
@@ -23,50 +19,7 @@ module Queri
|
|
23
19
|
:average_call_time, "Average call time"
|
24
20
|
]
|
25
21
|
end
|
26
|
-
|
27
|
-
def keys
|
28
|
-
key_translations.keys
|
29
|
-
end
|
30
22
|
end
|
31
|
-
|
32
|
-
def initialize *args
|
33
|
-
raise ArgumentError, "expected arguments: queues(Array), period_start(Time), period_end(Time)" unless valid_args?(args)
|
34
|
-
@queues, @period_start, @period_end = normalize_times(*args)
|
35
|
-
@response = parse_response
|
36
|
-
end
|
37
|
-
|
38
|
-
private
|
39
|
-
|
40
|
-
def valid_args? args
|
41
|
-
valid = true
|
42
|
-
valid = false if args[0].class != Array
|
43
|
-
valid = false if args[1].class != Time
|
44
|
-
valid = false if args[2].class != Time
|
45
|
-
if valid and args[0].empty?
|
46
|
-
raise ArgumentError, "queues array cannot be empty"
|
47
|
-
end
|
48
|
-
return valid
|
49
|
-
end
|
50
|
-
|
51
|
-
def normalize_times queues, period_start, period_end
|
52
|
-
if period_start > period_end
|
53
|
-
tmp = period_start
|
54
|
-
period_start = period_end
|
55
|
-
period_end = tmp
|
56
|
-
end
|
57
|
-
return [queues, period_start, period_end]
|
58
|
-
end
|
59
|
-
|
60
|
-
def parse_response
|
61
|
-
r = Queri.send_request(@queues, self, @period_start, @period_end)
|
62
|
-
xml_keys_to_human_readable_keys = self.class.key_translations.invert
|
63
|
-
new_keys = r.shift.map {|k| xml_keys_to_human_readable_keys[k]}
|
64
|
-
agent_metrics = []
|
65
|
-
r.each do |agent|
|
66
|
-
agent_metrics << Hash[new_keys.zip(agent)]
|
67
|
-
end
|
68
|
-
return agent_metrics
|
69
|
-
end
|
70
23
|
end
|
71
24
|
end
|
72
25
|
end
|
@@ -1,18 +1,14 @@
|
|
1
1
|
module Queri
|
2
2
|
class Stats
|
3
3
|
class AnsweredCalls
|
4
|
-
class AllCalls
|
5
|
-
|
4
|
+
class AllCalls < Queri::Stats
|
5
|
+
include AggregateReportHelpers
|
6
6
|
|
7
7
|
class << self
|
8
8
|
def xml_code
|
9
9
|
AnsweredCalls.xml_code + ".RiassAllCalls"
|
10
10
|
end
|
11
11
|
|
12
|
-
def query_method
|
13
|
-
Stats.query_method
|
14
|
-
end
|
15
|
-
|
16
12
|
def key_translations
|
17
13
|
Hash[
|
18
14
|
:calls_answered, "N. calls answered by operators:",
|
@@ -30,51 +26,7 @@ module Queri
|
|
30
26
|
:queue_position_coverage, "Coverage"
|
31
27
|
]
|
32
28
|
end
|
33
|
-
|
34
|
-
def keys
|
35
|
-
key_translations.keys
|
36
|
-
end
|
37
29
|
end
|
38
|
-
|
39
|
-
def initialize *args
|
40
|
-
raise ArgumentError, "expected arguments: queues(Array), period_start(Time), period_end(Time)" unless valid_args?(args)
|
41
|
-
@queues, @period_start, @period_end = normalize_times(*args)
|
42
|
-
@response = parse_response
|
43
|
-
end
|
44
|
-
|
45
|
-
private
|
46
|
-
|
47
|
-
def valid_args? args
|
48
|
-
valid = true
|
49
|
-
valid = false if args[0].class != Array
|
50
|
-
valid = false if args[1].class != Time
|
51
|
-
valid = false if args[2].class != Time
|
52
|
-
if valid and args[0].empty?
|
53
|
-
raise ArgumentError, "queues array cannot be empty"
|
54
|
-
end
|
55
|
-
return valid
|
56
|
-
end
|
57
|
-
|
58
|
-
def normalize_times queues, period_start, period_end
|
59
|
-
if period_start > period_end
|
60
|
-
tmp = period_start
|
61
|
-
period_start = period_end
|
62
|
-
period_end = tmp
|
63
|
-
end
|
64
|
-
return [queues, period_start, period_end]
|
65
|
-
end
|
66
|
-
|
67
|
-
def parse_response
|
68
|
-
r = Queri.send_request(@queues, self, @period_start, @period_end)
|
69
|
-
xml_keys_to_human_readable_keys = self.class.key_translations.invert
|
70
|
-
r.each_with_index do |metric,i|
|
71
|
-
if i > 0
|
72
|
-
metric[0] = xml_keys_to_human_readable_keys[ metric[0] ]
|
73
|
-
end
|
74
|
-
end
|
75
|
-
r.shift
|
76
|
-
Hash[*r.flatten]
|
77
|
-
end
|
78
30
|
end
|
79
31
|
end
|
80
32
|
end
|
@@ -1,18 +1,14 @@
|
|
1
1
|
module Queri
|
2
2
|
class Stats
|
3
3
|
class AnsweredCalls
|
4
|
-
class AnsweredCallsByDirection
|
5
|
-
|
4
|
+
class AnsweredCallsByDirection < Queri::Stats
|
5
|
+
include CompositeReportHelpers
|
6
6
|
|
7
7
|
class << self
|
8
8
|
def xml_code
|
9
9
|
AnsweredCalls.xml_code + ".AnsweredcallsByDirection"
|
10
10
|
end
|
11
11
|
|
12
|
-
def query_method
|
13
|
-
Stats.query_method
|
14
|
-
end
|
15
|
-
|
16
12
|
def key_translations
|
17
13
|
Hash[
|
18
14
|
:direction_icon, " ",
|
@@ -22,52 +18,7 @@ module Queri
|
|
22
18
|
:placeholder_for_bar_graph, "..."
|
23
19
|
]
|
24
20
|
end
|
25
|
-
|
26
|
-
def keys
|
27
|
-
key_translations.keys
|
28
|
-
end
|
29
|
-
|
30
|
-
end
|
31
|
-
|
32
|
-
def initialize *args
|
33
|
-
raise ArgumentError, "expected arguments: queues(Array), period_start(Time), period_end(Time)" unless valid_args?(args)
|
34
|
-
@queues, @period_start, @period_end = normalize_times(*args)
|
35
|
-
@response = parse_response
|
36
21
|
end
|
37
|
-
|
38
|
-
private
|
39
|
-
|
40
|
-
def valid_args? args
|
41
|
-
valid = true
|
42
|
-
valid = false if args[0].class != Array
|
43
|
-
valid = false if args[1].class != Time
|
44
|
-
valid = false if args[2].class != Time
|
45
|
-
if valid and args[0].empty?
|
46
|
-
raise ArgumentError, "queues array cannot be empty"
|
47
|
-
end
|
48
|
-
return valid
|
49
|
-
end
|
50
|
-
|
51
|
-
def normalize_times queues, period_start, period_end
|
52
|
-
if period_start > period_end
|
53
|
-
tmp = period_start
|
54
|
-
period_start = period_end
|
55
|
-
period_end = tmp
|
56
|
-
end
|
57
|
-
return [queues, period_start, period_end]
|
58
|
-
end
|
59
|
-
|
60
|
-
def parse_response
|
61
|
-
r = Queri.send_request(@queues, self, @period_start, @period_end)
|
62
|
-
xml_keys_to_human_readable_keys = self.class.key_translations.invert
|
63
|
-
new_keys = r.shift.map {|k| xml_keys_to_human_readable_keys[k]}
|
64
|
-
agent_metrics = []
|
65
|
-
r.each do |agent|
|
66
|
-
agent_metrics << Hash[new_keys.zip(agent)]
|
67
|
-
end
|
68
|
-
return agent_metrics
|
69
|
-
end
|
70
|
-
|
71
22
|
end
|
72
23
|
end
|
73
24
|
end
|
@@ -1,18 +1,14 @@
|
|
1
1
|
module Queri
|
2
2
|
class Stats
|
3
3
|
class AnsweredCalls
|
4
|
-
class AnsweredCallsByQueue
|
5
|
-
|
4
|
+
class AnsweredCallsByQueue < Queri::Stats
|
5
|
+
include CompositeReportHelpers
|
6
6
|
|
7
7
|
class << self
|
8
8
|
def xml_code
|
9
9
|
AnsweredCalls.xml_code + ".AnsweredcallsByQueue"
|
10
10
|
end
|
11
11
|
|
12
|
-
def query_method
|
13
|
-
Stats.query_method
|
14
|
-
end
|
15
|
-
|
16
12
|
def key_translations
|
17
13
|
Hash[
|
18
14
|
:empty_column, " ",
|
@@ -22,52 +18,7 @@ module Queri
|
|
22
18
|
:placeholder_for_bar_graph, "..."
|
23
19
|
]
|
24
20
|
end
|
25
|
-
|
26
|
-
def keys
|
27
|
-
key_translations.keys
|
28
|
-
end
|
29
|
-
|
30
|
-
end
|
31
|
-
|
32
|
-
def initialize *args
|
33
|
-
raise ArgumentError, "expected arguments: queues(Array), period_start(Time), period_end(Time)" unless valid_args?(args)
|
34
|
-
@queues, @period_start, @period_end = normalize_times(*args)
|
35
|
-
@response = parse_response
|
36
21
|
end
|
37
|
-
|
38
|
-
private
|
39
|
-
|
40
|
-
def valid_args? args
|
41
|
-
valid = true
|
42
|
-
valid = false if args[0].class != Array
|
43
|
-
valid = false if args[1].class != Time
|
44
|
-
valid = false if args[2].class != Time
|
45
|
-
if valid and args[0].empty?
|
46
|
-
raise ArgumentError, "queues array cannot be empty"
|
47
|
-
end
|
48
|
-
return valid
|
49
|
-
end
|
50
|
-
|
51
|
-
def normalize_times queues, period_start, period_end
|
52
|
-
if period_start > period_end
|
53
|
-
tmp = period_start
|
54
|
-
period_start = period_end
|
55
|
-
period_end = tmp
|
56
|
-
end
|
57
|
-
return [queues, period_start, period_end]
|
58
|
-
end
|
59
|
-
|
60
|
-
def parse_response
|
61
|
-
r = Queri.send_request(@queues, self, @period_start, @period_end)
|
62
|
-
xml_keys_to_human_readable_keys = self.class.key_translations.invert
|
63
|
-
new_keys = r.shift.map {|k| xml_keys_to_human_readable_keys[k]}
|
64
|
-
agent_metrics = []
|
65
|
-
r.each do |agent|
|
66
|
-
agent_metrics << Hash[new_keys.zip(agent)]
|
67
|
-
end
|
68
|
-
return agent_metrics
|
69
|
-
end
|
70
|
-
|
71
22
|
end
|
72
23
|
end
|
73
24
|
end
|
@@ -1,18 +1,14 @@
|
|
1
1
|
module Queri
|
2
2
|
class Stats
|
3
3
|
class AnsweredCalls
|
4
|
-
class AnsweredCallsByStints
|
5
|
-
|
4
|
+
class AnsweredCallsByStints < Queri::Stats
|
5
|
+
include CompositeReportHelpers
|
6
6
|
|
7
7
|
class << self
|
8
8
|
def xml_code
|
9
9
|
AnsweredCalls.xml_code + ".StintsOk"
|
10
10
|
end
|
11
11
|
|
12
|
-
def query_method
|
13
|
-
Stats.query_method
|
14
|
-
end
|
15
|
-
|
16
12
|
def key_translations
|
17
13
|
Hash[
|
18
14
|
:number_of_stints, "Number of stints",
|
@@ -21,52 +17,7 @@ module Queri
|
|
21
17
|
:placeholder_for_bar_graph, "..."
|
22
18
|
]
|
23
19
|
end
|
24
|
-
|
25
|
-
def keys
|
26
|
-
key_translations.keys
|
27
|
-
end
|
28
|
-
|
29
|
-
end
|
30
|
-
|
31
|
-
def initialize *args
|
32
|
-
raise ArgumentError, "expected arguments: queues(Array), period_start(Time), period_end(Time)" unless valid_args?(args)
|
33
|
-
@queues, @period_start, @period_end = normalize_times(*args)
|
34
|
-
@response = parse_response
|
35
20
|
end
|
36
|
-
|
37
|
-
private
|
38
|
-
|
39
|
-
def valid_args? args
|
40
|
-
valid = true
|
41
|
-
valid = false if args[0].class != Array
|
42
|
-
valid = false if args[1].class != Time
|
43
|
-
valid = false if args[2].class != Time
|
44
|
-
if valid and args[0].empty?
|
45
|
-
raise ArgumentError, "queues array cannot be empty"
|
46
|
-
end
|
47
|
-
return valid
|
48
|
-
end
|
49
|
-
|
50
|
-
def normalize_times queues, period_start, period_end
|
51
|
-
if period_start > period_end
|
52
|
-
tmp = period_start
|
53
|
-
period_start = period_end
|
54
|
-
period_end = tmp
|
55
|
-
end
|
56
|
-
return [queues, period_start, period_end]
|
57
|
-
end
|
58
|
-
|
59
|
-
def parse_response
|
60
|
-
r = Queri.send_request(@queues, self, @period_start, @period_end)
|
61
|
-
xml_keys_to_human_readable_keys = self.class.key_translations.invert
|
62
|
-
new_keys = r.shift.map {|k| xml_keys_to_human_readable_keys[k]}
|
63
|
-
agent_metrics = []
|
64
|
-
r.each do |agent|
|
65
|
-
agent_metrics << Hash[new_keys.zip(agent)]
|
66
|
-
end
|
67
|
-
return agent_metrics
|
68
|
-
end
|
69
|
-
|
70
21
|
end
|
71
22
|
end
|
72
23
|
end
|
@@ -1,18 +1,14 @@
|
|
1
1
|
module Queri
|
2
2
|
class Stats
|
3
3
|
class AnsweredCalls
|
4
|
-
class CallsFullyWithinTheGivenTimeInterval
|
5
|
-
|
4
|
+
class CallsFullyWithinTheGivenTimeInterval < Queri::Stats
|
5
|
+
include AggregateReportHelpers
|
6
6
|
|
7
7
|
class << self
|
8
8
|
def xml_code
|
9
9
|
AnsweredCalls.xml_code + ".RiassFullyWithin"
|
10
10
|
end
|
11
11
|
|
12
|
-
def query_method
|
13
|
-
Stats.query_method
|
14
|
-
end
|
15
|
-
|
16
12
|
def key_translations
|
17
13
|
Hash[
|
18
14
|
:calls_fully_within_the_given_time_interval, "Calls fully within the given time interval:",
|
@@ -31,51 +27,7 @@ module Queri
|
|
31
27
|
:queue_position_coverage, "Coverage"
|
32
28
|
]
|
33
29
|
end
|
34
|
-
|
35
|
-
def keys
|
36
|
-
key_translations.keys
|
37
|
-
end
|
38
30
|
end
|
39
|
-
|
40
|
-
def initialize *args
|
41
|
-
raise ArgumentError, "expected arguments: queues(Array), period_start(Time), period_end(Time)" unless valid_args?(args)
|
42
|
-
@queues, @period_start, @period_end = normalize_times(*args)
|
43
|
-
@response = parse_response
|
44
|
-
end
|
45
|
-
|
46
|
-
private
|
47
|
-
|
48
|
-
def valid_args? args
|
49
|
-
valid = true
|
50
|
-
valid = false if args[0].class != Array
|
51
|
-
valid = false if args[1].class != Time
|
52
|
-
valid = false if args[2].class != Time
|
53
|
-
if valid and args[0].empty?
|
54
|
-
raise ArgumentError, "queues array cannot be empty"
|
55
|
-
end
|
56
|
-
return valid
|
57
|
-
end
|
58
|
-
|
59
|
-
def normalize_times queues, period_start, period_end
|
60
|
-
if period_start > period_end
|
61
|
-
tmp = period_start
|
62
|
-
period_start = period_end
|
63
|
-
period_end = tmp
|
64
|
-
end
|
65
|
-
return [queues, period_start, period_end]
|
66
|
-
end
|
67
|
-
|
68
|
-
def parse_response
|
69
|
-
r = Queri.send_request(@queues, self, @period_start, @period_end)
|
70
|
-
xml_keys_to_human_readable_keys = self.class.key_translations.invert
|
71
|
-
r.each_with_index do |metric,i|
|
72
|
-
if i > 0
|
73
|
-
metric[0] = xml_keys_to_human_readable_keys[ metric[0] ]
|
74
|
-
end
|
75
|
-
end
|
76
|
-
r.shift
|
77
|
-
Hash[*r.flatten]
|
78
|
-
end
|
79
31
|
end
|
80
32
|
end
|
81
33
|
end
|