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.
- checksums.yaml +4 -4
- data/README.md +38 -2
- data/lib/queri.rb +1 -1
- data/lib/queri/stats/answered_calls/answered_calls_by_direction.rb +74 -0
- data/lib/queri/stats/answered_calls/answered_calls_by_queue.rb +74 -0
- data/lib/queri/stats/answered_calls/answered_calls_by_stints.rb +73 -0
- data/lib/queri/stats/answered_calls/calls_fully_within_the_given_time_interval.rb +82 -0
- data/lib/queri/stats/answered_calls/disconnection_causes.rb +73 -0
- data/lib/queri/stats/answered_calls/dnis_used.rb +73 -0
- data/lib/queri/stats/answered_calls/ivr_selection.rb +77 -0
- data/lib/queri/stats/answered_calls/music_on_hold_by_agent.rb +72 -0
- data/lib/queri/stats/answered_calls/queue_position.rb +73 -0
- data/lib/queri/stats/answered_calls/service_level_agreement.rb +73 -0
- data/lib/queri/stats/answered_calls/transfers.rb +73 -0
- data/lib/queri/stats/details_of_agent_sessions_and_pauses/detail_of_agent_pauses.rb +81 -0
- data/lib/queri/stats/details_of_agent_sessions_and_pauses/detail_of_agent_sessions.rb +81 -0
- data/lib/queri/stats/details_of_agents_sessions_and_pauses.rb +11 -0
- data/lib/queri/version.rb +1 -1
- data/spec/queri_spec.rb +1 -1
- data/spec/realtime/agents_spec.rb +2 -0
- data/spec/realtime/queues_spec.rb +2 -0
- data/spec/spec_helper.rb +0 -2
- data/spec/stats/agents_and_sessions/agent_availability_spec.rb +2 -0
- data/spec/stats/answered_calls/agents_on_queue_spec.rb +2 -0
- data/spec/stats/answered_calls/all_calls_spec.rb +2 -0
- data/spec/stats/answered_calls/answered_calls_by_direction_spec.rb +22 -0
- data/spec/stats/answered_calls/answered_calls_by_queue_spec.rb +22 -0
- data/spec/stats/answered_calls/answered_calls_by_stints_spec.rb +22 -0
- data/spec/stats/answered_calls/calls_fully_within_the_given_time_interval_spec.rb +20 -0
- data/spec/stats/answered_calls/disconnection_causes_spec.rb +20 -0
- data/spec/stats/answered_calls/dnis_used_spec.rb +22 -0
- data/spec/stats/answered_calls/ivr_selection_spec.rb +22 -0
- data/spec/stats/answered_calls/music_on_hold_by_agent_spec.rb +20 -0
- data/spec/stats/answered_calls/queue_position_spec.rb +22 -0
- data/spec/stats/answered_calls/service_level_agreement_spec.rb +20 -0
- data/spec/stats/answered_calls/transfers_spec.rb +27 -0
- data/spec/stats/details_of_agent_sessions_and_pauses/detail_of_agent_pauses_spec.rb +20 -0
- data/spec/stats/details_of_agent_sessions_and_pauses/detail_of_agent_sessions_spec.rb +20 -0
- data/spec/stats/details_of_agent_sessions_and_pauses/details_of_agent_sessions_and_pauses_spec.rb +7 -0
- data/spec/stats/unanswered_calls/all_calls_spec.rb +2 -0
- data/spec/support/shared/shared_examples_for_composite_agent_level_report_instance.rb +37 -0
- data/spec/support/shared/shared_examples_for_composite_aggregate_report_instance.rb +38 -0
- metadata +48 -4
- 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, " ",
|
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, " ",
|
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, " ",
|
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, " ",
|
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
|