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.
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