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
@@ -0,0 +1,24 @@
|
|
1
|
+
module Queri
|
2
|
+
class Stats
|
3
|
+
class UnansweredCalls
|
4
|
+
class AllCallsByStints < Queri::Stats
|
5
|
+
include CompositeReportHelpers
|
6
|
+
|
7
|
+
class << self
|
8
|
+
def xml_code
|
9
|
+
UnansweredCalls.xml_code + ".StintsOkKo"
|
10
|
+
end
|
11
|
+
|
12
|
+
def key_translations
|
13
|
+
Hash[
|
14
|
+
:number_of_stints, "Number of stints",
|
15
|
+
:number_of_calls, "N. Calls",
|
16
|
+
:percentage_of_calls, " ",
|
17
|
+
:placeholder_for_bar_graph, "..."
|
18
|
+
]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Queri
|
2
|
+
class Stats
|
3
|
+
class UnansweredCalls
|
4
|
+
class CallOverview < Queri::Stats
|
5
|
+
include CompositeReportHelpers
|
6
|
+
|
7
|
+
class << self
|
8
|
+
def xml_code
|
9
|
+
UnansweredCalls.xml_code + ".OverviewOkKo"
|
10
|
+
end
|
11
|
+
|
12
|
+
def key_translations
|
13
|
+
Hash[
|
14
|
+
:empty, " ",
|
15
|
+
:queue, "Queue",
|
16
|
+
:number_of_calls_to_hit_queue, "Calls offered",
|
17
|
+
:calls_answered, "Calls answered",
|
18
|
+
:calls_unanswered, "Calls lost",
|
19
|
+
:average_call_duration, "Average call length:",
|
20
|
+
:total_call_duration, "Total call length:",
|
21
|
+
:average_call_waiting_time, "Average call waiting time:",
|
22
|
+
:total_call_waiting_time, "Total waiting time:"
|
23
|
+
]
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
module Queri
|
2
|
+
class Stats
|
3
|
+
class UnansweredCalls
|
4
|
+
class CallsFullyWithinTheGivenTimeInterval
|
5
|
+
attr_reader :response
|
6
|
+
|
7
|
+
class << self
|
8
|
+
def xml_code
|
9
|
+
UnansweredCalls.xml_code + ".ReportKoFully"
|
10
|
+
end
|
11
|
+
|
12
|
+
def query_method
|
13
|
+
Stats.query_method
|
14
|
+
end
|
15
|
+
|
16
|
+
def key_translations
|
17
|
+
Hash[
|
18
|
+
:calls_fully_within_the_given_time_interval, "Calls fully within the given time interval:",
|
19
|
+
:calls_unanswered, "N.of unanswered calls:",
|
20
|
+
:average_call_waiting_time, "Average wait time before disconnection:",
|
21
|
+
:minimum_call_waiting_time, "Min wait time before disconnection:",
|
22
|
+
:maximum_call_waiting_time, "Max wait time before disconnection:",
|
23
|
+
:total_call_waiting_time, "Total wait time before disconnection:",
|
24
|
+
:average_initial_queue_position, "Average initial position",
|
25
|
+
:minimum_initial_queue_position, "Min initial position",
|
26
|
+
:maximum_initial_queue_position, "Max initial position",
|
27
|
+
:queue_position_coverage, "Coverage",
|
28
|
+
:average_final_queue_position, "Average queue position at disconnection:",
|
29
|
+
:minimum_final_queue_position, "Min queue position at disconnection:",
|
30
|
+
:maximum_final_queue_position, "Max queue position at disconnection:"
|
31
|
+
]
|
32
|
+
end
|
33
|
+
|
34
|
+
def keys
|
35
|
+
key_translations.keys
|
36
|
+
end
|
37
|
+
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
|
+
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Queri
|
2
|
+
class Stats
|
3
|
+
class UnansweredCalls
|
4
|
+
class DisconnectionCauses < Queri::Stats
|
5
|
+
include CompositeReportHelpers
|
6
|
+
|
7
|
+
class << self
|
8
|
+
def xml_code
|
9
|
+
UnansweredCalls.xml_code + ".DiscCauses"
|
10
|
+
end
|
11
|
+
|
12
|
+
def key_translations
|
13
|
+
Hash[
|
14
|
+
:disconnection_cause, "Cause",
|
15
|
+
:number_of_calls, "N. Calls",
|
16
|
+
:percentage_of_calls, " ",
|
17
|
+
:placeholder_for_bar_graph, "..."
|
18
|
+
]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Queri
|
2
|
+
class Stats
|
3
|
+
class UnansweredCalls
|
4
|
+
class DnisUsed < Queri::Stats
|
5
|
+
include CompositeReportHelpers
|
6
|
+
|
7
|
+
class << self
|
8
|
+
def xml_code
|
9
|
+
UnansweredCalls.xml_code + ".DnisKo"
|
10
|
+
end
|
11
|
+
|
12
|
+
def key_translations
|
13
|
+
Hash[
|
14
|
+
:dnis, "DNIS",
|
15
|
+
:number_of_calls, "N. Calls",
|
16
|
+
:percentage_of_calls, " ",
|
17
|
+
:placeholder_for_bar_graph, "..."
|
18
|
+
]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Queri
|
2
|
+
class Stats
|
3
|
+
class UnansweredCalls
|
4
|
+
class DnisUsedForAllCalls < Queri::Stats
|
5
|
+
include CompositeReportHelpers
|
6
|
+
|
7
|
+
class << self
|
8
|
+
def xml_code
|
9
|
+
UnansweredCalls.xml_code + ".DnisOkKo"
|
10
|
+
end
|
11
|
+
|
12
|
+
def key_translations
|
13
|
+
Hash[
|
14
|
+
:dnis, "DNIS",
|
15
|
+
:number_of_calls, "N. Calls",
|
16
|
+
:percentage_of_calls, " ",
|
17
|
+
:placeholder_for_bar_graph, "..."
|
18
|
+
]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Queri
|
2
|
+
class Stats
|
3
|
+
class UnansweredCalls
|
4
|
+
class EnterQueuePosition < Queri::Stats
|
5
|
+
include CompositeReportHelpers
|
6
|
+
|
7
|
+
class << self
|
8
|
+
def xml_code
|
9
|
+
UnansweredCalls.xml_code + ".QPosKo"
|
10
|
+
end
|
11
|
+
|
12
|
+
def key_translations
|
13
|
+
Hash[
|
14
|
+
:initial_queue_position, "Position at enter",
|
15
|
+
:number_of_calls, "N. Calls",
|
16
|
+
:percentage_of_calls, " ",
|
17
|
+
:placeholder_for_bar_graph, "..."
|
18
|
+
]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Queri
|
2
|
+
class Stats
|
3
|
+
class UnansweredCalls
|
4
|
+
class EnterQueuePositionForAllCalls < Queri::Stats
|
5
|
+
include CompositeReportHelpers
|
6
|
+
|
7
|
+
class << self
|
8
|
+
def xml_code
|
9
|
+
UnansweredCalls.xml_code + ".QPosOkKo"
|
10
|
+
end
|
11
|
+
|
12
|
+
def key_translations
|
13
|
+
Hash[
|
14
|
+
:initial_queue_position, "Position at enter",
|
15
|
+
:number_of_calls, "N. Calls",
|
16
|
+
:percentage_of_calls, " ",
|
17
|
+
:placeholder_for_bar_graph, "..."
|
18
|
+
]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Queri
|
2
|
+
class Stats
|
3
|
+
class UnansweredCalls
|
4
|
+
class InclusiveAnsweredServiceLevelAgreement < Queri::Stats
|
5
|
+
include CompositeReportHelpers
|
6
|
+
|
7
|
+
class << self
|
8
|
+
def xml_code
|
9
|
+
UnansweredCalls.xml_code + ".InclusiveAnswSLA"
|
10
|
+
end
|
11
|
+
|
12
|
+
def key_translations
|
13
|
+
Hash[
|
14
|
+
:time_interval, "Hangup",
|
15
|
+
:calls_taken_in_time_interval, "N. Calls",
|
16
|
+
:calls_between_lower_interval, "Delta",
|
17
|
+
:percentage_of_calls_within_interval, " ",
|
18
|
+
:placeholder_for_bar_graph, "..."
|
19
|
+
]
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Queri
|
2
|
+
class Stats
|
3
|
+
class UnansweredCalls
|
4
|
+
class InclusiveServiceLevelAgreement < Queri::Stats
|
5
|
+
include CompositeReportHelpers
|
6
|
+
|
7
|
+
class << self
|
8
|
+
def xml_code
|
9
|
+
UnansweredCalls.xml_code + ".InclusiveSLA"
|
10
|
+
end
|
11
|
+
|
12
|
+
def key_translations
|
13
|
+
Hash[
|
14
|
+
:time_interval, "Hangup",
|
15
|
+
:calls_taken_in_time_interval, "N. Calls",
|
16
|
+
:calls_between_lower_interval, "Delta",
|
17
|
+
:percentage_of_calls_within_interval, "Percent",
|
18
|
+
:placeholder_for_bar_graph, "..."
|
19
|
+
]
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Queri
|
2
|
+
class Stats
|
3
|
+
class UnansweredCalls
|
4
|
+
class IvrSelection < Queri::Stats
|
5
|
+
include CompositeReportHelpers
|
6
|
+
|
7
|
+
class << self
|
8
|
+
def xml_code
|
9
|
+
UnansweredCalls.xml_code + ".IvrKo"
|
10
|
+
end
|
11
|
+
|
12
|
+
def key_translations
|
13
|
+
Hash[
|
14
|
+
:ivr_selection, "IVR",
|
15
|
+
:number_of_calls, "N. Calls",
|
16
|
+
:percentage_of_calls, " ",
|
17
|
+
:placeholder_for_bar_graph, "...",
|
18
|
+
:total_duration_of_call_in_ivr, "Total Duration",
|
19
|
+
:average_duration_of_call_in_ivr, "Average Duration",
|
20
|
+
:minimum_duration_of_call_in_ivr, "Min Duration",
|
21
|
+
:maximum_duration_of_call_in_ivr, "Max Duration"
|
22
|
+
]
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Queri
|
2
|
+
class Stats
|
3
|
+
class UnansweredCalls
|
4
|
+
class IvrSelectionForAllCalls < Queri::Stats
|
5
|
+
include CompositeReportHelpers
|
6
|
+
|
7
|
+
class << self
|
8
|
+
def xml_code
|
9
|
+
UnansweredCalls.xml_code + ".IvrOkKo"
|
10
|
+
end
|
11
|
+
|
12
|
+
def key_translations
|
13
|
+
Hash[
|
14
|
+
:ivr_selection, "IVR",
|
15
|
+
:number_of_calls, "N. Calls",
|
16
|
+
:percentage_of_calls, " ",
|
17
|
+
:placeholder_for_bar_graph, "..."
|
18
|
+
]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Queri
|
2
|
+
class Stats
|
3
|
+
class UnansweredCalls
|
4
|
+
class UnansweredCallsByKeyPress < Queri::Stats
|
5
|
+
include CompositeReportHelpers
|
6
|
+
|
7
|
+
class << self
|
8
|
+
def xml_code
|
9
|
+
UnansweredCalls.xml_code + ".ReportKoKeyPress"
|
10
|
+
end
|
11
|
+
|
12
|
+
def key_translations
|
13
|
+
Hash[
|
14
|
+
:key_pressed, "Key",
|
15
|
+
:number_of_calls, "N. Calls",
|
16
|
+
:percentage_of_calls, " ",
|
17
|
+
:placeholder_for_bar_graph, "..."
|
18
|
+
]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Queri
|
2
|
+
class Stats
|
3
|
+
class UnansweredCalls
|
4
|
+
class UnansweredCallsByQueue < Queri::Stats
|
5
|
+
include CompositeReportHelpers
|
6
|
+
|
7
|
+
class << self
|
8
|
+
def xml_code
|
9
|
+
UnansweredCalls.xml_code + ".UnansByQueue"
|
10
|
+
end
|
11
|
+
|
12
|
+
def key_translations
|
13
|
+
Hash[
|
14
|
+
:empty_column, " ",
|
15
|
+
:queue, "Queue",
|
16
|
+
:number_of_calls, "N. Calls",
|
17
|
+
:percentage_of_calls, " ",
|
18
|
+
:placeholder_for_bar_graph, "..."
|
19
|
+
]
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Queri
|
2
|
+
class Stats
|
3
|
+
class UnansweredCalls
|
4
|
+
class UnansweredCallsByStints < Queri::Stats
|
5
|
+
include CompositeReportHelpers
|
6
|
+
|
7
|
+
class << self
|
8
|
+
def xml_code
|
9
|
+
UnansweredCalls.xml_code + ".StintsKo"
|
10
|
+
end
|
11
|
+
|
12
|
+
def key_translations
|
13
|
+
Hash[
|
14
|
+
:number_of_stints, "Number of stints",
|
15
|
+
:number_of_calls, "N. Calls",
|
16
|
+
:percentage_of_calls, " ",
|
17
|
+
:placeholder_for_bar_graph, "..."
|
18
|
+
]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Queri
|
2
|
+
class Stats
|
3
|
+
class UnansweredCalls
|
4
|
+
class UnansweredCallsDistributionByLength < Queri::Stats
|
5
|
+
include CompositeReportHelpers
|
6
|
+
|
7
|
+
class << self
|
8
|
+
def xml_code
|
9
|
+
UnansweredCalls.xml_code + ".UnansByLen"
|
10
|
+
end
|
11
|
+
|
12
|
+
def key_translations
|
13
|
+
Hash[
|
14
|
+
:time_interval, "Hangup",
|
15
|
+
:calls_taken_in_time_interval, "N. Calls",
|
16
|
+
:calls_between_lower_interval, "Delta",
|
17
|
+
:percentage_of_calls_within_interval, "Percent",
|
18
|
+
:percentage_of_all_calls, "Of Offered",
|
19
|
+
:placeholder_for_bar_graph, "..."
|
20
|
+
]
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Queri
|
2
|
+
class Stats
|
3
|
+
class UnansweredCalls
|
4
|
+
class UnansweredOutboundCallsByAgent < Queri::Stats
|
5
|
+
include CompositeReportHelpers
|
6
|
+
|
7
|
+
class << self
|
8
|
+
def xml_code
|
9
|
+
UnansweredCalls.xml_code + ".OutboundKo"
|
10
|
+
end
|
11
|
+
|
12
|
+
def key_translations
|
13
|
+
Hash[
|
14
|
+
:agent, "Agent",
|
15
|
+
:number_of_calls, "N. Calls",
|
16
|
+
:percentage_of_calls, " ",
|
17
|
+
:placeholder_for_bar_graph, "..."
|
18
|
+
]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/lib/queri/stats.rb
CHANGED
@@ -1,9 +1,26 @@
|
|
1
1
|
module Queri
|
2
2
|
class Stats
|
3
|
+
include ArgHelpers
|
4
|
+
|
5
|
+
attr_reader :response
|
6
|
+
|
3
7
|
@@query_method = "QM.stats"
|
4
8
|
|
5
|
-
|
6
|
-
|
9
|
+
class << self
|
10
|
+
def query_method
|
11
|
+
@@query_method
|
12
|
+
end
|
13
|
+
|
14
|
+
def keys
|
15
|
+
key_translations.keys
|
16
|
+
end
|
7
17
|
end
|
18
|
+
|
19
|
+
def initialize *args
|
20
|
+
raise ArgumentError, "expected arguments: queues(Array), period_start(Time), period_end(Time)" unless valid_args?(args)
|
21
|
+
@queues, @period_start, @period_end = normalize_times(*args)
|
22
|
+
@response = parse_response
|
23
|
+
end
|
24
|
+
|
8
25
|
end
|
9
26
|
end
|
data/lib/queri/version.rb
CHANGED
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Queri::Stats::DetailsOfAnsweredCalls::QueueDetails do
|
4
|
+
let(:report_class) { Queri::Stats::DetailsOfAnsweredCalls::QueueDetails }
|
5
|
+
let(:xml_code) { report_class.xml_code }
|
6
|
+
|
7
|
+
before { Queri.configure_with(File.join(File.dirname(__FILE__), '..', '..', 'config.yml')) }
|
8
|
+
|
9
|
+
it_behaves_like "a report class"
|
10
|
+
|
11
|
+
it_behaves_like "a report method"
|
12
|
+
|
13
|
+
it_behaves_like "a queuemetrics report"
|
14
|
+
|
15
|
+
it_behaves_like "a stats report"
|
16
|
+
|
17
|
+
describe "An instance of", Queri::Stats::DetailsOfAnsweredCalls::QueueDetails do
|
18
|
+
it_behaves_like "an agent-level report instance"
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Queri::Stats::UnansweredCalls::AllCallsByStints do
|
4
|
+
let(:report_class) { Queri::Stats::UnansweredCalls::AllCallsByStints }
|
5
|
+
let(:xml_code) { report_class.xml_code }
|
6
|
+
|
7
|
+
before do
|
8
|
+
Queri.configure_with(File.join(File.dirname(__FILE__), '..', '..', 'config.yml'))
|
9
|
+
end
|
10
|
+
|
11
|
+
it_behaves_like "a report class"
|
12
|
+
|
13
|
+
it_behaves_like "a report method"
|
14
|
+
|
15
|
+
it_behaves_like "a queuemetrics report"
|
16
|
+
|
17
|
+
it_behaves_like "a stats report"
|
18
|
+
|
19
|
+
describe "An instance of", Queri::Stats::UnansweredCalls::AllCallsByStints do
|
20
|
+
it_behaves_like "a composite aggregate report instance"
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Queri::Stats::UnansweredCalls::CallOverview do
|
4
|
+
let(:report_class) { Queri::Stats::UnansweredCalls::CallOverview }
|
5
|
+
let(:xml_code) { report_class.xml_code }
|
6
|
+
|
7
|
+
before do
|
8
|
+
Queri.configure_with(File.join(File.dirname(__FILE__), '..', '..', 'config.yml'))
|
9
|
+
end
|
10
|
+
|
11
|
+
it_behaves_like "a report class"
|
12
|
+
|
13
|
+
it_behaves_like "a report method"
|
14
|
+
|
15
|
+
it_behaves_like "a queuemetrics report"
|
16
|
+
|
17
|
+
it_behaves_like "a stats report"
|
18
|
+
|
19
|
+
describe "An instance of", Queri::Stats::UnansweredCalls::CallOverview do
|
20
|
+
it_behaves_like "a composite aggregate report instance"
|
21
|
+
end
|
22
|
+
end
|