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
@@ -1,18 +1,14 @@
1
1
  module Queri
2
2
  class Stats
3
3
  class AnsweredCalls
4
- class DisconnectionCauses
5
- attr_reader :response
4
+ class DisconnectionCauses < Queri::Stats
5
+ include CompositeReportHelpers
6
6
 
7
7
  class << self
8
8
  def xml_code
9
9
  AnsweredCalls.xml_code + ".DisconnectionCauses"
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
  :disconnection_cause, "Cause",
@@ -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 DnisUsed
5
- attr_reader :response
4
+ class DnisUsed < Queri::Stats
5
+ include CompositeReportHelpers
6
6
 
7
7
  class << self
8
8
  def xml_code
9
9
  AnsweredCalls.xml_code + ".DnisOk"
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
  :dnis, "DNIS",
@@ -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 IvrSelection
5
- attr_reader :response
4
+ class IvrSelection < Queri::Stats
5
+ include CompositeReportHelpers
6
6
 
7
7
  class << self
8
8
  def xml_code
9
9
  AnsweredCalls.xml_code + ".IvrOk"
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
  :ivr_selection, "IVR",
@@ -25,52 +21,7 @@ module Queri
25
21
  :maximum_duration_of_call_in_ivr, "Max Duration"
26
22
  ]
27
23
  end
28
-
29
- def keys
30
- key_translations.keys
31
- end
32
-
33
- 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
24
  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
-
74
25
  end
75
26
  end
76
27
  end
@@ -1,18 +1,14 @@
1
1
  module Queri
2
2
  class Stats
3
3
  class AnsweredCalls
4
- class MusicOnHoldByAgent
5
- attr_reader :response
4
+ class MusicOnHoldByAgent < Queri::Stats
5
+ include CompositeReportHelpers
6
6
 
7
7
  class << self
8
8
  def xml_code
9
9
  AnsweredCalls.xml_code + ".MOHOk"
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",
@@ -22,50 +18,7 @@ module Queri
22
18
  :average_duration_of_hold_events, "Average Duration"
23
19
  ]
24
20
  end
25
-
26
- def keys
27
- key_translations.keys
28
- end
29
21
  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
- 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
22
  end
70
23
  end
71
24
  end
@@ -1,18 +1,14 @@
1
1
  module Queri
2
2
  class Stats
3
3
  class AnsweredCalls
4
- class QueuePosition
5
- attr_reader :response
4
+ class QueuePosition < Queri::Stats
5
+ include CompositeReportHelpers
6
6
 
7
7
  class << self
8
8
  def xml_code
9
9
  AnsweredCalls.xml_code + ".QPosOk"
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
  :initial_queue_position, "Position at enter",
@@ -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 ServiceLevelAgreement
5
- attr_reader :response
4
+ class ServiceLevelAgreement < Queri::Stats
5
+ include CompositeReportHelpers
6
6
 
7
7
  class << self
8
8
  def xml_code
9
9
  AnsweredCalls.xml_code + ".ServiceLevelAgreement"
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
  :time_interval, "Answer",
@@ -23,50 +19,7 @@ module Queri
23
19
  :placeholder_for_bar_graph, "..."
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 Transfers
5
- attr_reader :response
4
+ class Transfers < Queri::Stats
5
+ include CompositeReportHelpers
6
6
 
7
7
  class << self
8
8
  def xml_code
9
9
  AnsweredCalls.xml_code + ".Transfers"
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
  :extension_transffered_to, "Transfer to",
@@ -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 DetailsOfAgentSessionsAndPauses
4
- class DetailOfAgentPauses
5
- attr_reader :response
4
+ class DetailOfAgentPauses < Queri::Stats
5
+ include CompositeAgentLevelReportHelpers
6
6
 
7
7
  class << self
8
8
  def xml_code
9
9
  DetailsOfAgentSessionsAndPauses.xml_code + ".AgentPauses"
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",
@@ -26,55 +22,7 @@ module Queri
26
22
  :pause_duration, "Duration"
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
- agents = agent_metrics.map {|a| a[:agent]}.uniq
72
- parsed_metrics = Hash.new
73
- agents.each do |agent|
74
- parsed_metrics[agent] = agent_metrics.select {|m| m[:agent] == agent}
75
- end
76
- return parsed_metrics
77
- end
78
26
  end
79
27
  end
80
28
  end
@@ -1,18 +1,14 @@
1
1
  module Queri
2
2
  class Stats
3
3
  class DetailsOfAgentSessionsAndPauses
4
- class DetailOfAgentSessions
5
- attr_reader :response
4
+ class DetailOfAgentSessions < Queri::Stats
5
+ include CompositeAgentLevelReportHelpers
6
6
 
7
7
  class << self
8
8
  def xml_code
9
9
  DetailsOfAgentSessionsAndPauses.xml_code + ".AgentSessions"
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",
@@ -26,55 +22,7 @@ module Queri
26
22
  :server, "Srv"
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
- agents = agent_metrics.map {|a| a[:agent]}.uniq
72
- parsed_metrics = Hash.new
73
- agents.each do |agent|
74
- parsed_metrics[agent] = agent_metrics.select {|m| m[:agent] == agent}
75
- end
76
- return parsed_metrics
77
- end
78
26
  end
79
27
  end
80
28
  end
@@ -0,0 +1,35 @@
1
+ module Queri
2
+ class Stats
3
+ class DetailsOfAnsweredCalls
4
+ class QueueDetails < Queri::Stats
5
+ include CompositeReportHelpers
6
+
7
+ class << self
8
+ def xml_code
9
+ DetailsOfAnsweredCalls.xml_code + ".CallsOK"
10
+ end
11
+
12
+ def key_translations
13
+ Hash[
14
+ :date, "Date",
15
+ :caller_id, "Caller",
16
+ :queue, "Queue",
17
+ :wait_time, "Wait",
18
+ :call_duration, "Duration",
19
+ :initial_queue_position, "Pos.",
20
+ :disconnection_cause, "Disconnection",
21
+ :handling_agent, "Handled by",
22
+ :number_of_agents_attempted_before_connect, "Attempts",
23
+ :completion_code, "Code",
24
+ :stints, "Stints",
25
+ :server, "Srv",
26
+ :placeholder_for_hourglass, "&nbsp;",
27
+ :empty, "&nbsp;",
28
+ :placeholder_for_linked_url, "&nbsp;"
29
+ ]
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end