queri 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (69) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +43 -4
  3. data/lib/queri/aggregate_report_helpers.rb +15 -0
  4. data/lib/queri/arg_helpers.rb +24 -0
  5. data/lib/queri/composite_agent_level_report_helpers.rb +19 -0
  6. data/lib/queri/composite_report_helpers.rb +14 -0
  7. data/lib/queri/stats/agents_and_sessions/agent_availability.rb +2 -49
  8. data/lib/queri/stats/answered_calls/agents_on_queue.rb +2 -49
  9. data/lib/queri/stats/answered_calls/all_calls.rb +2 -50
  10. data/lib/queri/stats/answered_calls/answered_calls_by_direction.rb +2 -51
  11. data/lib/queri/stats/answered_calls/answered_calls_by_queue.rb +2 -51
  12. data/lib/queri/stats/answered_calls/answered_calls_by_stints.rb +2 -51
  13. data/lib/queri/stats/answered_calls/calls_fully_within_the_given_time_interval.rb +2 -50
  14. data/lib/queri/stats/answered_calls/disconnection_causes.rb +2 -51
  15. data/lib/queri/stats/answered_calls/dnis_used.rb +2 -51
  16. data/lib/queri/stats/answered_calls/ivr_selection.rb +2 -51
  17. data/lib/queri/stats/answered_calls/music_on_hold_by_agent.rb +2 -49
  18. data/lib/queri/stats/answered_calls/queue_position.rb +2 -51
  19. data/lib/queri/stats/answered_calls/service_level_agreement.rb +2 -49
  20. data/lib/queri/stats/answered_calls/transfers.rb +2 -51
  21. data/lib/queri/stats/details_of_agent_sessions_and_pauses/detail_of_agent_pauses.rb +2 -54
  22. data/lib/queri/stats/details_of_agent_sessions_and_pauses/detail_of_agent_sessions.rb +2 -54
  23. data/lib/queri/stats/details_of_answered_calls/queue_details.rb +35 -0
  24. data/lib/queri/stats/details_of_answered_calls.rb +11 -0
  25. data/lib/queri/stats/unanswered_calls/all_calls_by_stints.rb +24 -0
  26. data/lib/queri/stats/unanswered_calls/call_overview.rb +29 -0
  27. data/lib/queri/stats/unanswered_calls/calls_fully_within_the_given_time_interval.rb +82 -0
  28. data/lib/queri/stats/unanswered_calls/disconnection_causes.rb +24 -0
  29. data/lib/queri/stats/unanswered_calls/dnis_used.rb +24 -0
  30. data/lib/queri/stats/unanswered_calls/dnis_used_for_all_calls.rb +24 -0
  31. data/lib/queri/stats/unanswered_calls/enter_queue_position.rb +24 -0
  32. data/lib/queri/stats/unanswered_calls/enter_queue_position_for_all_calls.rb +24 -0
  33. data/lib/queri/stats/unanswered_calls/inclusive_answered_service_level_agreement.rb +25 -0
  34. data/lib/queri/stats/unanswered_calls/inclusive_service_level_agreement.rb +25 -0
  35. data/lib/queri/stats/unanswered_calls/ivr_selection.rb +28 -0
  36. data/lib/queri/stats/unanswered_calls/ivr_selection_for_all_calls.rb +24 -0
  37. data/lib/queri/stats/unanswered_calls/unanswered_calls_by_key_press.rb +24 -0
  38. data/lib/queri/stats/unanswered_calls/unanswered_calls_by_queue.rb +25 -0
  39. data/lib/queri/stats/unanswered_calls/unanswered_calls_by_stints.rb +24 -0
  40. data/lib/queri/stats/unanswered_calls/unanswered_calls_distribution_by_length.rb +26 -0
  41. data/lib/queri/stats/unanswered_calls/unanswered_outbound_calls_by_agent.rb +24 -0
  42. data/lib/queri/stats.rb +19 -2
  43. data/lib/queri/version.rb +1 -1
  44. data/spec/stats/agents_and_sessions/agent_availability_spec.rb +1 -1
  45. data/spec/stats/agents_and_sessions/agents_and_sessions_spec.rb +1 -1
  46. data/spec/stats/answered_calls/agents_on_queue_spec.rb +1 -1
  47. data/spec/stats/answered_calls/all_calls_spec.rb +1 -1
  48. data/spec/stats/answered_calls/answered_calls_spec.rb +1 -1
  49. data/spec/stats/details_of_answered_calls/details_of_answered_calls_spec.rb +7 -0
  50. data/spec/stats/details_of_answered_calls/queue_details_spec.rb +20 -0
  51. data/spec/stats/unanswered_calls/all_calls_by_stints_spec.rb +22 -0
  52. data/spec/stats/unanswered_calls/call_overview_spec.rb +22 -0
  53. data/spec/stats/unanswered_calls/calls_fully_within_the_given_time_interval_spec.rb +20 -0
  54. data/spec/stats/unanswered_calls/disconnection_causes_spec.rb +20 -0
  55. data/spec/stats/unanswered_calls/dnis_used_for_all_calls_spec.rb +22 -0
  56. data/spec/stats/unanswered_calls/dnis_used_spec.rb +22 -0
  57. data/spec/stats/unanswered_calls/enter_queue_position_for_all_calls_spec.rb +22 -0
  58. data/spec/stats/unanswered_calls/enter_queue_position_spec.rb +22 -0
  59. data/spec/stats/unanswered_calls/inclusive_answered_service_level_agreement_spec.rb +20 -0
  60. data/spec/stats/unanswered_calls/inclusive_service_level_agreement_spec.rb +20 -0
  61. data/spec/stats/unanswered_calls/ivr_selection_for_all_calls_spec.rb +22 -0
  62. data/spec/stats/unanswered_calls/ivr_selection_spec.rb +22 -0
  63. data/spec/stats/unanswered_calls/unanswered_calls_by_key_press_spec.rb +22 -0
  64. data/spec/stats/unanswered_calls/unanswered_calls_by_queue_spec.rb +22 -0
  65. data/spec/stats/unanswered_calls/unanswered_calls_by_stints_spec.rb +22 -0
  66. data/spec/stats/unanswered_calls/unanswered_calls_distribution_by_length_spec.rb +20 -0
  67. data/spec/stats/unanswered_calls/unanswered_outbound_calls_by_agent_spec.rb +22 -0
  68. metadata +64 -3
  69. /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: 612927a2b34f04be0e348fe2e912d394c76f090f
4
- data.tar.gz: 4190fbb0234b4030c19d99c27b657f46ed04aa83
3
+ metadata.gz: 81573e2933bacb797683dfda3f935882e6754f07
4
+ data.tar.gz: 9da9459034980ce147cb498b850aa783ec41bfd1
5
5
  SHA512:
6
- metadata.gz: 94e0ac64d458d469c8cf265ba2ba992ce9dff4b6db946a92b86352540159a886923ca83d29b4f51e9c864cef890ef680df96a05ea2448d2cc7da4e3bb43b7601
7
- data.tar.gz: 5dbf0d3d62ccfa59d13b0585fe29646ef9b30da8ba7460debc9a2aeff502894936817c5056fa0d09005eace22ecc95c725a6fe3f0d27962d0710ee7a2d55c294
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
- * CallsFullyWithinGivenTimeInterval
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
- * CallsFullyWithinGivenTimeInterval
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
- attr_reader :response
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
- attr_reader :response
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
- attr_reader :response
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
- attr_reader :response
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, "&nbsp;",
@@ -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
- attr_reader :response
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, "&nbsp;",
@@ -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
- attr_reader :response
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
- attr_reader :response
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