queri 0.0.2 → 0.0.3

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 (44) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +38 -2
  3. data/lib/queri.rb +1 -1
  4. data/lib/queri/stats/answered_calls/answered_calls_by_direction.rb +74 -0
  5. data/lib/queri/stats/answered_calls/answered_calls_by_queue.rb +74 -0
  6. data/lib/queri/stats/answered_calls/answered_calls_by_stints.rb +73 -0
  7. data/lib/queri/stats/answered_calls/calls_fully_within_the_given_time_interval.rb +82 -0
  8. data/lib/queri/stats/answered_calls/disconnection_causes.rb +73 -0
  9. data/lib/queri/stats/answered_calls/dnis_used.rb +73 -0
  10. data/lib/queri/stats/answered_calls/ivr_selection.rb +77 -0
  11. data/lib/queri/stats/answered_calls/music_on_hold_by_agent.rb +72 -0
  12. data/lib/queri/stats/answered_calls/queue_position.rb +73 -0
  13. data/lib/queri/stats/answered_calls/service_level_agreement.rb +73 -0
  14. data/lib/queri/stats/answered_calls/transfers.rb +73 -0
  15. data/lib/queri/stats/details_of_agent_sessions_and_pauses/detail_of_agent_pauses.rb +81 -0
  16. data/lib/queri/stats/details_of_agent_sessions_and_pauses/detail_of_agent_sessions.rb +81 -0
  17. data/lib/queri/stats/details_of_agents_sessions_and_pauses.rb +11 -0
  18. data/lib/queri/version.rb +1 -1
  19. data/spec/queri_spec.rb +1 -1
  20. data/spec/realtime/agents_spec.rb +2 -0
  21. data/spec/realtime/queues_spec.rb +2 -0
  22. data/spec/spec_helper.rb +0 -2
  23. data/spec/stats/agents_and_sessions/agent_availability_spec.rb +2 -0
  24. data/spec/stats/answered_calls/agents_on_queue_spec.rb +2 -0
  25. data/spec/stats/answered_calls/all_calls_spec.rb +2 -0
  26. data/spec/stats/answered_calls/answered_calls_by_direction_spec.rb +22 -0
  27. data/spec/stats/answered_calls/answered_calls_by_queue_spec.rb +22 -0
  28. data/spec/stats/answered_calls/answered_calls_by_stints_spec.rb +22 -0
  29. data/spec/stats/answered_calls/calls_fully_within_the_given_time_interval_spec.rb +20 -0
  30. data/spec/stats/answered_calls/disconnection_causes_spec.rb +20 -0
  31. data/spec/stats/answered_calls/dnis_used_spec.rb +22 -0
  32. data/spec/stats/answered_calls/ivr_selection_spec.rb +22 -0
  33. data/spec/stats/answered_calls/music_on_hold_by_agent_spec.rb +20 -0
  34. data/spec/stats/answered_calls/queue_position_spec.rb +22 -0
  35. data/spec/stats/answered_calls/service_level_agreement_spec.rb +20 -0
  36. data/spec/stats/answered_calls/transfers_spec.rb +27 -0
  37. data/spec/stats/details_of_agent_sessions_and_pauses/detail_of_agent_pauses_spec.rb +20 -0
  38. data/spec/stats/details_of_agent_sessions_and_pauses/detail_of_agent_sessions_spec.rb +20 -0
  39. data/spec/stats/details_of_agent_sessions_and_pauses/details_of_agent_sessions_and_pauses_spec.rb +7 -0
  40. data/spec/stats/unanswered_calls/all_calls_spec.rb +2 -0
  41. data/spec/support/shared/shared_examples_for_composite_agent_level_report_instance.rb +37 -0
  42. data/spec/support/shared/shared_examples_for_composite_aggregate_report_instance.rb +38 -0
  43. metadata +48 -4
  44. data/spec/support/constantize.rb +0 -27
@@ -0,0 +1,73 @@
1
+ module Queri
2
+ class Stats
3
+ class AnsweredCalls
4
+ class DnisUsed
5
+ attr_reader :response
6
+
7
+ class << self
8
+ def xml_code
9
+ AnsweredCalls.xml_code + ".DnisOk"
10
+ end
11
+
12
+ def query_method
13
+ Stats.query_method
14
+ end
15
+
16
+ def key_translations
17
+ Hash[
18
+ :dnis, "DNIS",
19
+ :number_of_calls, "N. Calls",
20
+ :percentage_of_calls, "&nbsp;",
21
+ :placeholder_for_bar_graph, "..."
22
+ ]
23
+ 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
+ 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
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,77 @@
1
+ module Queri
2
+ class Stats
3
+ class AnsweredCalls
4
+ class IvrSelection
5
+ attr_reader :response
6
+
7
+ class << self
8
+ def xml_code
9
+ AnsweredCalls.xml_code + ".IvrOk"
10
+ end
11
+
12
+ def query_method
13
+ Stats.query_method
14
+ end
15
+
16
+ def key_translations
17
+ Hash[
18
+ :ivr_selection, "IVR",
19
+ :number_of_calls, "N. Calls",
20
+ :percentage_of_calls, "&nbsp;",
21
+ :placeholder_for_bar_graph, "...",
22
+ :total_duration_of_call_in_ivr, "Total Duration",
23
+ :average_duration_of_call_in_ivr, "Average Duration",
24
+ :minimum_duration_of_call_in_ivr, "Min Duration",
25
+ :maximum_duration_of_call_in_ivr, "Max Duration"
26
+ ]
27
+ 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
+ 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
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,72 @@
1
+ module Queri
2
+ class Stats
3
+ class AnsweredCalls
4
+ class MusicOnHoldByAgent
5
+ attr_reader :response
6
+
7
+ class << self
8
+ def xml_code
9
+ AnsweredCalls.xml_code + ".MOHOk"
10
+ end
11
+
12
+ def query_method
13
+ Stats.query_method
14
+ end
15
+
16
+ def key_translations
17
+ Hash[
18
+ :agent, "Agent",
19
+ :total_hold_events, "Total Events",
20
+ :hold_events_per_call, "Events per Call",
21
+ :duration_of_hold_events, "Total Duration",
22
+ :average_duration_of_hold_events, "Average Duration"
23
+ ]
24
+ end
25
+
26
+ def keys
27
+ key_translations.keys
28
+ end
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
+ 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
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,73 @@
1
+ module Queri
2
+ class Stats
3
+ class AnsweredCalls
4
+ class QueuePosition
5
+ attr_reader :response
6
+
7
+ class << self
8
+ def xml_code
9
+ AnsweredCalls.xml_code + ".QPosOk"
10
+ end
11
+
12
+ def query_method
13
+ Stats.query_method
14
+ end
15
+
16
+ def key_translations
17
+ Hash[
18
+ :initial_queue_position, "Position at enter",
19
+ :number_of_calls, "N. Calls",
20
+ :percentage_of_calls, "&nbsp;",
21
+ :placeholder_for_bar_graph, "..."
22
+ ]
23
+ 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
+ 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
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,73 @@
1
+ module Queri
2
+ class Stats
3
+ class AnsweredCalls
4
+ class ServiceLevelAgreement
5
+ attr_reader :response
6
+
7
+ class << self
8
+ def xml_code
9
+ AnsweredCalls.xml_code + ".ServiceLevelAgreement"
10
+ end
11
+
12
+ def query_method
13
+ Stats.query_method
14
+ end
15
+
16
+ def key_translations
17
+ Hash[
18
+ :time_interval, "Answer",
19
+ :calls_taken_in_time_interval, "N. Calls",
20
+ :calls_between_lower_interval, "Delta",
21
+ :percentage_of_calls_within_interval, "Percent",
22
+ :percentage_of_all_calls, "Of Offered",
23
+ :placeholder_for_bar_graph, "..."
24
+ ]
25
+ end
26
+
27
+ def keys
28
+ key_translations.keys
29
+ end
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
+ 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
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,73 @@
1
+ module Queri
2
+ class Stats
3
+ class AnsweredCalls
4
+ class Transfers
5
+ attr_reader :response
6
+
7
+ class << self
8
+ def xml_code
9
+ AnsweredCalls.xml_code + ".Transfers"
10
+ end
11
+
12
+ def query_method
13
+ Stats.query_method
14
+ end
15
+
16
+ def key_translations
17
+ Hash[
18
+ :extension_transffered_to, "Transfer to",
19
+ :number_of_calls, "N. Calls",
20
+ :percentage_of_calls, "&nbsp;",
21
+ :placeholder_for_bar_graph, "..."
22
+ ]
23
+ 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
+ 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
+ end
71
+ end
72
+ end
73
+ end