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.
- checksums.yaml +4 -4
- data/README.md +43 -4
- data/lib/queri/aggregate_report_helpers.rb +15 -0
- data/lib/queri/arg_helpers.rb +24 -0
- data/lib/queri/composite_agent_level_report_helpers.rb +19 -0
- data/lib/queri/composite_report_helpers.rb +14 -0
- data/lib/queri/stats/agents_and_sessions/agent_availability.rb +2 -49
- data/lib/queri/stats/answered_calls/agents_on_queue.rb +2 -49
- data/lib/queri/stats/answered_calls/all_calls.rb +2 -50
- data/lib/queri/stats/answered_calls/answered_calls_by_direction.rb +2 -51
- data/lib/queri/stats/answered_calls/answered_calls_by_queue.rb +2 -51
- data/lib/queri/stats/answered_calls/answered_calls_by_stints.rb +2 -51
- data/lib/queri/stats/answered_calls/calls_fully_within_the_given_time_interval.rb +2 -50
- data/lib/queri/stats/answered_calls/disconnection_causes.rb +2 -51
- data/lib/queri/stats/answered_calls/dnis_used.rb +2 -51
- data/lib/queri/stats/answered_calls/ivr_selection.rb +2 -51
- data/lib/queri/stats/answered_calls/music_on_hold_by_agent.rb +2 -49
- data/lib/queri/stats/answered_calls/queue_position.rb +2 -51
- data/lib/queri/stats/answered_calls/service_level_agreement.rb +2 -49
- data/lib/queri/stats/answered_calls/transfers.rb +2 -51
- data/lib/queri/stats/details_of_agent_sessions_and_pauses/detail_of_agent_pauses.rb +2 -54
- data/lib/queri/stats/details_of_agent_sessions_and_pauses/detail_of_agent_sessions.rb +2 -54
- data/lib/queri/stats/details_of_answered_calls/queue_details.rb +35 -0
- data/lib/queri/stats/details_of_answered_calls.rb +11 -0
- data/lib/queri/stats/unanswered_calls/all_calls_by_stints.rb +24 -0
- data/lib/queri/stats/unanswered_calls/call_overview.rb +29 -0
- data/lib/queri/stats/unanswered_calls/calls_fully_within_the_given_time_interval.rb +82 -0
- data/lib/queri/stats/unanswered_calls/disconnection_causes.rb +24 -0
- data/lib/queri/stats/unanswered_calls/dnis_used.rb +24 -0
- data/lib/queri/stats/unanswered_calls/dnis_used_for_all_calls.rb +24 -0
- data/lib/queri/stats/unanswered_calls/enter_queue_position.rb +24 -0
- data/lib/queri/stats/unanswered_calls/enter_queue_position_for_all_calls.rb +24 -0
- data/lib/queri/stats/unanswered_calls/inclusive_answered_service_level_agreement.rb +25 -0
- data/lib/queri/stats/unanswered_calls/inclusive_service_level_agreement.rb +25 -0
- data/lib/queri/stats/unanswered_calls/ivr_selection.rb +28 -0
- data/lib/queri/stats/unanswered_calls/ivr_selection_for_all_calls.rb +24 -0
- data/lib/queri/stats/unanswered_calls/unanswered_calls_by_key_press.rb +24 -0
- data/lib/queri/stats/unanswered_calls/unanswered_calls_by_queue.rb +25 -0
- data/lib/queri/stats/unanswered_calls/unanswered_calls_by_stints.rb +24 -0
- data/lib/queri/stats/unanswered_calls/unanswered_calls_distribution_by_length.rb +26 -0
- data/lib/queri/stats/unanswered_calls/unanswered_outbound_calls_by_agent.rb +24 -0
- data/lib/queri/stats.rb +19 -2
- data/lib/queri/version.rb +1 -1
- data/spec/stats/agents_and_sessions/agent_availability_spec.rb +1 -1
- data/spec/stats/agents_and_sessions/agents_and_sessions_spec.rb +1 -1
- data/spec/stats/answered_calls/agents_on_queue_spec.rb +1 -1
- data/spec/stats/answered_calls/all_calls_spec.rb +1 -1
- data/spec/stats/answered_calls/answered_calls_spec.rb +1 -1
- data/spec/stats/details_of_answered_calls/details_of_answered_calls_spec.rb +7 -0
- data/spec/stats/details_of_answered_calls/queue_details_spec.rb +20 -0
- data/spec/stats/unanswered_calls/all_calls_by_stints_spec.rb +22 -0
- data/spec/stats/unanswered_calls/call_overview_spec.rb +22 -0
- data/spec/stats/unanswered_calls/calls_fully_within_the_given_time_interval_spec.rb +20 -0
- data/spec/stats/unanswered_calls/disconnection_causes_spec.rb +20 -0
- data/spec/stats/unanswered_calls/dnis_used_for_all_calls_spec.rb +22 -0
- data/spec/stats/unanswered_calls/dnis_used_spec.rb +22 -0
- data/spec/stats/unanswered_calls/enter_queue_position_for_all_calls_spec.rb +22 -0
- data/spec/stats/unanswered_calls/enter_queue_position_spec.rb +22 -0
- data/spec/stats/unanswered_calls/inclusive_answered_service_level_agreement_spec.rb +20 -0
- data/spec/stats/unanswered_calls/inclusive_service_level_agreement_spec.rb +20 -0
- data/spec/stats/unanswered_calls/ivr_selection_for_all_calls_spec.rb +22 -0
- data/spec/stats/unanswered_calls/ivr_selection_spec.rb +22 -0
- data/spec/stats/unanswered_calls/unanswered_calls_by_key_press_spec.rb +22 -0
- data/spec/stats/unanswered_calls/unanswered_calls_by_queue_spec.rb +22 -0
- data/spec/stats/unanswered_calls/unanswered_calls_by_stints_spec.rb +22 -0
- data/spec/stats/unanswered_calls/unanswered_calls_distribution_by_length_spec.rb +20 -0
- data/spec/stats/unanswered_calls/unanswered_outbound_calls_by_agent_spec.rb +22 -0
- metadata +64 -3
- /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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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, " ",
|
27
|
+
:empty, " ",
|
28
|
+
:placeholder_for_linked_url, " "
|
29
|
+
]
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|