qa_server 2.2.3 → 3.0.0
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/CHANGELOG.md +8 -0
- data/app/assets/stylesheets/qa_server/_authorities.scss +4 -1
- data/app/assets/stylesheets/qa_server/_check-status.scss +5 -0
- data/app/assets/stylesheets/qa_server/_monitor-status.scss +2 -2
- data/app/models/concerns/qa_server/performance_history_data_keys.rb +16 -3
- data/app/models/qa_server/performance_history.rb +54 -46
- data/app/prepends/prepended_linked_data/find_term.rb +51 -9
- data/app/prepends/prepended_linked_data/search_query.rb +37 -9
- data/app/prepends/prepended_rdf/rdf_graph.rb +55 -0
- data/app/presenters/concerns/qa_server/monitor_status/performance_datatable_behavior.rb +55 -21
- data/app/presenters/concerns/qa_server/monitor_status/performance_graph_behavior.rb +54 -25
- data/app/presenters/qa_server/monitor_status_presenter.rb +11 -8
- data/app/services/qa_server/performance_calculator_service.rb +50 -47
- data/app/services/qa_server/performance_graph_data_service.rb +13 -12
- data/app/services/qa_server/performance_graphing_service.rb +49 -40
- data/app/views/qa_server/monitor_status/_performance.html.erb +107 -32
- data/config/locales/qa_server.en.yml +9 -2
- data/lib/generators/qa_server/config_generator.rb +1 -0
- data/lib/generators/qa_server/templates/config/authorities/linked_data/agrovoc_ld4l_cache.json +8 -1
- data/lib/generators/qa_server/templates/config/authorities/linked_data/dbpedia_ld4l_cache.json +8 -1
- data/lib/generators/qa_server/templates/config/authorities/linked_data/geonames_ld4l_cache.json +11 -1
- data/lib/generators/qa_server/templates/config/authorities/linked_data/getty_aat_ld4l_cache.json +8 -1
- data/lib/generators/qa_server/templates/config/authorities/linked_data/getty_tgn_ld4l_cache.json +8 -1
- data/lib/generators/qa_server/templates/config/authorities/linked_data/getty_ulan_ld4l_cache.json +8 -1
- data/lib/generators/qa_server/templates/config/authorities/linked_data/locdemographics_ld4l_cache.json +2 -1
- data/lib/generators/qa_server/templates/config/authorities/linked_data/locnames_ld4l_cache.json +51 -42
- data/lib/generators/qa_server/templates/config/authorities/linked_data/locnames_rwo_ld4l_cache.json +237 -0
- data/lib/generators/qa_server/templates/config/authorities/linked_data/locperformance_ld4l_cache.json +75 -3
- data/lib/generators/qa_server/templates/config/authorities/linked_data/mesh_nlm_ld4l_cache.json +8 -1
- data/lib/generators/qa_server/templates/config/authorities/linked_data/nalt_ld4l_cache.json +8 -1
- data/lib/generators/qa_server/templates/config/authorities/linked_data/oclcfast_ld4l_cache.json +8 -1
- data/lib/generators/qa_server/templates/config/authorities/linked_data/rda_registry_ld4l_cache.json +193 -0
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/locnames_ld4l_cache_validation.yml +3 -18
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/locnames_rwo_ld4l_cache_validation.yml +27 -0
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/locperformance_ld4l_cache_validation.yml +1 -0
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/rda_registry_ld4l_cache_validation.yml +255 -0
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/wikidata_direct_validation.yml +6 -0
- data/lib/generators/qa_server/templates/config/authorities/linked_data/wikidata_direct.json +32 -0
- data/lib/generators/qa_server/templates/config/initializers/qa_server.rb +14 -5
- data/lib/generators/qa_server/templates/db/migrate/20191007134527_update_performance_history_table.rb.erb +19 -0
- data/lib/qa_server/configuration.rb +27 -5
- data/lib/qa_server/version.rb +1 -1
- metadata +10 -2
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
# This module provides methods for creating and accessing performance graphs.
|
3
3
|
module QaServer::MonitorStatus
|
4
|
-
module PerformanceGraphBehavior
|
4
|
+
module PerformanceGraphBehavior # rubocop:disable Metrics/ModuleLength
|
5
5
|
include QaServer::PerformanceHistoryDataKeys
|
6
6
|
include QaServer::MonitorStatus::GruffGraph
|
7
7
|
|
@@ -29,12 +29,20 @@ module QaServer::MonitorStatus
|
|
29
29
|
"performance-for-day-#{ALL_AUTH}"
|
30
30
|
end
|
31
31
|
|
32
|
+
def performance_graph_time_period(graph_info)
|
33
|
+
graph_info[:time_period]
|
34
|
+
end
|
35
|
+
|
36
|
+
def performance_graph_action(graph_info)
|
37
|
+
graph_info[:action]
|
38
|
+
end
|
39
|
+
|
32
40
|
def performance_graph_id(graph_info)
|
33
|
-
"#{graph_info[:base_id]}-during-#{graph_info
|
41
|
+
"#{graph_info[:base_id]}-#{performance_graph_action(graph_info)}-during-#{performance_graph_time_period(graph_info)}-chart"
|
34
42
|
end
|
35
43
|
|
36
44
|
def performance_graph_data_section_id(graph_info)
|
37
|
-
"#{graph_info[:base_id]}-during-#{graph_info
|
45
|
+
"#{graph_info[:base_id]}-#{performance_graph_action(graph_info)}-during-#{performance_graph_time_period(graph_info)}"
|
38
46
|
end
|
39
47
|
|
40
48
|
def performance_graph_data_section_base_id(graph_info)
|
@@ -46,63 +54,84 @@ module QaServer::MonitorStatus
|
|
46
54
|
'performance-data-section-hidden'
|
47
55
|
end
|
48
56
|
|
49
|
-
def
|
50
|
-
return true if graph_info
|
57
|
+
def performance_day_graph?(graph_info)
|
58
|
+
return true if performance_graph_time_period(graph_info) == :day
|
59
|
+
false
|
60
|
+
end
|
61
|
+
|
62
|
+
def performance_month_graph?(graph_info)
|
63
|
+
return true if performance_graph_time_period(graph_info) == :month
|
64
|
+
false
|
65
|
+
end
|
66
|
+
|
67
|
+
def performance_year_graph?(graph_info)
|
68
|
+
return true if performance_graph_time_period(graph_info) == :year
|
69
|
+
false
|
70
|
+
end
|
71
|
+
|
72
|
+
def performance_all_actions_graph?(graph_info)
|
73
|
+
return true if performance_graph_action(graph_info) == :all_actions
|
51
74
|
false
|
52
75
|
end
|
53
76
|
|
54
|
-
def
|
55
|
-
return true if graph_info
|
77
|
+
def performance_search_graph?(graph_info)
|
78
|
+
return true if performance_graph_action(graph_info) == :search
|
56
79
|
false
|
57
80
|
end
|
58
81
|
|
59
|
-
def
|
60
|
-
return true if graph_info
|
82
|
+
def performance_fetch_graph?(graph_info)
|
83
|
+
return true if performance_graph_action(graph_info) == :fetch
|
61
84
|
false
|
62
85
|
end
|
63
86
|
|
64
87
|
private
|
65
88
|
|
66
|
-
def default_graph?(graph_info) # rubocop:disable Metrics/CyclomaticComplexity
|
67
|
-
return
|
68
|
-
return true if QaServer.config.performance_graph_default_time_period == :
|
69
|
-
return true if QaServer.config.performance_graph_default_time_period == :
|
89
|
+
def default_graph?(graph_info) # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
90
|
+
return false unless performance_all_actions_graph?(graph_info)
|
91
|
+
return true if QaServer.config.performance_graph_default_time_period == :day && performance_day_graph?(graph_info)
|
92
|
+
return true if QaServer.config.performance_graph_default_time_period == :month && performance_month_graph?(graph_info)
|
93
|
+
return true if QaServer.config.performance_graph_default_time_period == :year && performance_year_graph?(graph_info)
|
70
94
|
false
|
71
95
|
end
|
72
96
|
|
73
97
|
def performance_graphs_for_authority(graphs, auth_name)
|
74
|
-
|
75
|
-
|
76
|
-
|
98
|
+
[:search, :fetch, :all_actions].each do |action|
|
99
|
+
graphs << performance_for_day_graph(auth_name, action)
|
100
|
+
graphs << performance_for_month_graph(auth_name, action)
|
101
|
+
graphs << performance_for_year_graph(auth_name, action)
|
102
|
+
end
|
77
103
|
end
|
78
104
|
|
79
|
-
def performance_for_day_graph(auth_name)
|
105
|
+
def performance_for_day_graph(auth_name, action)
|
80
106
|
{
|
107
|
+
action: action,
|
81
108
|
time_period: :day,
|
82
|
-
graph: QaServer::PerformanceGraphingService.performance_graph_file(authority_name: auth_name, time_period: :day),
|
109
|
+
graph: QaServer::PerformanceGraphingService.performance_graph_file(authority_name: auth_name, action: action, time_period: :day),
|
83
110
|
label: "Performance data for the last 24 hours.",
|
84
111
|
authority_name: auth_name,
|
85
|
-
base_id: "performance-
|
112
|
+
base_id: "performance-of-#{auth_name}"
|
86
113
|
}
|
87
114
|
end
|
88
115
|
|
89
|
-
def performance_for_month_graph(auth_name)
|
116
|
+
def performance_for_month_graph(auth_name, action)
|
90
117
|
{
|
118
|
+
action: action,
|
91
119
|
time_period: :month,
|
92
|
-
graph: QaServer::PerformanceGraphingService.performance_graph_file(authority_name: auth_name, time_period: :month),
|
120
|
+
graph: QaServer::PerformanceGraphingService.performance_graph_file(authority_name: auth_name, action: action, time_period: :month),
|
93
121
|
label: "Performance data for the last 30 days.",
|
94
122
|
authority_name: auth_name,
|
95
|
-
base_id: "performance-
|
123
|
+
base_id: "performance-of-#{auth_name}"
|
96
124
|
}
|
97
125
|
end
|
98
126
|
|
99
|
-
def performance_for_year_graph(auth_name)
|
127
|
+
def performance_for_year_graph(auth_name, action)
|
100
128
|
{
|
129
|
+
action: action,
|
101
130
|
time_period: :year,
|
102
|
-
graph: QaServer::PerformanceGraphingService.performance_graph_file(authority_name: auth_name, time_period: :year),
|
131
|
+
graph: QaServer::PerformanceGraphingService.performance_graph_file(authority_name: auth_name, action: action, time_period: :year),
|
103
132
|
label: "Performance data for the last 12 months.",
|
104
133
|
authority_name: auth_name,
|
105
|
-
base_id: "performance-
|
134
|
+
base_id: "performance-of-#{auth_name}"
|
106
135
|
}
|
107
136
|
end
|
108
137
|
end
|
@@ -25,13 +25,16 @@ module QaServer
|
|
25
25
|
|
26
26
|
def_delegators :@performance_presenter, :performance_data, :performance_data?, :display_performance?, :display_performance_graph?,
|
27
27
|
:display_performance_datatable?, :performance_data_authority_name, :performance_for_day_graph, :performance_for_month_graph,
|
28
|
-
:performance_for_year_graph, :
|
29
|
-
:
|
30
|
-
:
|
31
|
-
:
|
32
|
-
:
|
33
|
-
:
|
34
|
-
:
|
35
|
-
:
|
28
|
+
:performance_for_year_graph, :datatable_search_stats, :datatable_fetch_stats, :datatable_all_actions_stats,
|
29
|
+
:low_retrieve, :low_graph_load, :low_normalization, :low_full_request, :high_retrieve, :high_graph_load,
|
30
|
+
:high_normalization, :high_full_request, :avg_retrieve, :avg_graph_load, :avg_normalization, :avg_full_request,
|
31
|
+
:datatable_data_style, :low_load_style, :low_normalization_style, :low_full_request_style, :high_load_style,
|
32
|
+
:high_normalization_style, :high_full_request_style, :avg_load_style, :avg_normalization_style, :avg_full_request_style,
|
33
|
+
:performance_style_class, :high_threshold_exceeded, :low_threshold_not_met, :performance_graphs, :performance_graph,
|
34
|
+
:performance_graph_authority, :performance_graph_label, :performance_default_graph_id, :performance_graph_id,
|
35
|
+
:performance_graph_data_section_id, :performance_graph_data_section_base_id, :performance_data_section_class,
|
36
|
+
:performance_day_graph?, :performance_month_graph?, :performance_year_graph?, :performance_all_actions_graph?,
|
37
|
+
:performance_search_graph?, :performance_fetch_graph?, :performance_table_description, :performance_graph_time_period,
|
38
|
+
:performance_graph_action
|
36
39
|
end
|
37
40
|
end
|
@@ -5,99 +5,102 @@ module QaServer
|
|
5
5
|
class PerformanceCalculatorService
|
6
6
|
include QaServer::PerformanceHistoryDataKeys
|
7
7
|
|
8
|
-
attr_reader :records
|
9
|
-
attr_reader :stats
|
8
|
+
attr_reader :records, :stats, :action
|
10
9
|
|
11
10
|
# @param records [Array <Qa::PerformanceHistory>] set of records used to calculate the statistics
|
12
|
-
def initialize(records)
|
11
|
+
def initialize(records, action: nil)
|
13
12
|
@records = records
|
13
|
+
@action = [:search, :fetch].include?(action) ? action : nil
|
14
14
|
@stats = {}
|
15
15
|
end
|
16
16
|
|
17
17
|
# Calculate performance statistics for a set of PerformanceHistory records. Min is at the 10th percentile. Max is at the 90th percentile.
|
18
18
|
# @return [Hash] hash of the statistics
|
19
19
|
# @example
|
20
|
-
#
|
21
|
-
#
|
22
|
-
#
|
20
|
+
# { retrieve_avg_ms: 12.3, graph_load_avg_ms: 2.1, normalization_avg_ms: 4.2, full_request_avg_ms: 16.5,
|
21
|
+
# retrieve_10th_ms: 12.3, graph_load_10th_ms: 12.3, normalization_10th_ms: 4.2, full_request_10th_ms: 16.5,
|
22
|
+
# retrieve_90th_ms: 12.3, graph_load_90th_ms: 12.3, normalization_90th_ms: 4.2, full_request_90th_ms: 16.5 }
|
23
23
|
def calculate_stats(avg: false, low: false, high: false, load: true, norm: true, full: true) # rubocop:disable Metrics/ParameterLists
|
24
|
-
|
25
|
-
|
26
|
-
|
24
|
+
calculate_retrieve_stats(avg, low, high) if load
|
25
|
+
calculate_graph_load_stats(avg, low, high) if load
|
26
|
+
calculate_normalization_stats(avg, low, high) if norm
|
27
|
+
calculate_action_stats(avg, low, high) if full
|
27
28
|
stats
|
28
29
|
end
|
29
30
|
|
30
31
|
private
|
31
32
|
|
32
|
-
def
|
33
|
-
stats[
|
34
|
-
stats[
|
35
|
-
stats[
|
33
|
+
def calculate_retrieve_stats(avg, low, high)
|
34
|
+
stats[AVG_RETR] = calculate_average(retrieve_times) if avg
|
35
|
+
stats[LOW_RETR] = calculate_10th_percentile(retrieve_times) if low
|
36
|
+
stats[HIGH_RETR] = calculate_90th_percentile(retrieve_times) if high
|
36
37
|
end
|
37
38
|
|
38
|
-
def
|
39
|
+
def calculate_graph_load_stats(avg, low, high)
|
40
|
+
stats[AVG_GRPH] = calculate_average(graph_load_times) if avg
|
41
|
+
stats[LOW_GRPH] = calculate_10th_percentile(graph_load_times) if low
|
42
|
+
stats[HIGH_GRPH] = calculate_90th_percentile(graph_load_times) if high
|
43
|
+
end
|
44
|
+
|
45
|
+
def calculate_normalization_stats(avg, low, high)
|
39
46
|
stats[AVG_NORM] = calculate_average(norm_times) if avg
|
40
|
-
stats[LOW_NORM] = calculate_10th_percentile(
|
41
|
-
stats[HIGH_NORM] = calculate_90th_percentile(
|
47
|
+
stats[LOW_NORM] = calculate_10th_percentile(norm_times) if low
|
48
|
+
stats[HIGH_NORM] = calculate_90th_percentile(norm_times) if high
|
42
49
|
end
|
43
50
|
|
44
|
-
def
|
45
|
-
stats[
|
46
|
-
stats[
|
47
|
-
stats[
|
51
|
+
def calculate_action_stats(avg, low, high)
|
52
|
+
stats[AVG_ACTN] = calculate_average(action_times) if avg
|
53
|
+
stats[LOW_ACTN] = calculate_10th_percentile(action_times) if low
|
54
|
+
stats[HIGH_ACTN] = calculate_90th_percentile(action_times) if high
|
48
55
|
end
|
49
56
|
|
50
57
|
def count
|
51
58
|
@count ||= records.count
|
52
59
|
end
|
53
60
|
|
54
|
-
def tenth_percentile_count
|
55
|
-
|
56
|
-
percentile_count = (count * 0.1).round
|
61
|
+
def tenth_percentile_count(times)
|
62
|
+
percentile_count = (times.count * 0.1).round
|
57
63
|
percentile_count = 1 if percentile_count.zero? && count > 1
|
58
|
-
|
59
|
-
end
|
60
|
-
|
61
|
-
def load_times
|
62
|
-
@load_times ||= records.pluck(:load_time_ms).to_a
|
64
|
+
percentile_count
|
63
65
|
end
|
64
66
|
|
65
|
-
def
|
66
|
-
|
67
|
+
def times(column)
|
68
|
+
where_clause = action.nil? ? "" : { "action" => action }
|
69
|
+
records.where(where_clause).where.not(column => nil).order(column).pluck(column)
|
67
70
|
end
|
68
71
|
|
69
|
-
def
|
70
|
-
@
|
72
|
+
def retrieve_times
|
73
|
+
@retrieve_times ||= times(:retrieve_time_ms)
|
71
74
|
end
|
72
75
|
|
73
|
-
def
|
74
|
-
@
|
76
|
+
def graph_load_times
|
77
|
+
@graph_load_times ||= times(:graph_load_time_ms)
|
75
78
|
end
|
76
79
|
|
77
|
-
def
|
78
|
-
@
|
80
|
+
def norm_times
|
81
|
+
@norm_times ||= times(:normalization_time_ms)
|
79
82
|
end
|
80
83
|
|
81
|
-
def
|
82
|
-
@
|
84
|
+
def action_times
|
85
|
+
@action_times ||= times(:action_time_ms)
|
83
86
|
end
|
84
87
|
|
85
88
|
def calculate_average(times)
|
86
89
|
return 0 if count.zero?
|
87
90
|
return times[0] if count == 1
|
88
|
-
times.inject(0.0) { |sum, el| sum + el } / count
|
91
|
+
times.inject(0.0) { |sum, el| sum + el } / times.count
|
89
92
|
end
|
90
93
|
|
91
|
-
def calculate_10th_percentile(
|
92
|
-
return 0 if count.zero?
|
93
|
-
return
|
94
|
-
|
94
|
+
def calculate_10th_percentile(times)
|
95
|
+
return 0 if times.count.zero?
|
96
|
+
return times[0] if times.count == 1
|
97
|
+
times[tenth_percentile_count(times) - 1]
|
95
98
|
end
|
96
99
|
|
97
|
-
def calculate_90th_percentile(
|
98
|
-
return 0 if count.zero?
|
99
|
-
return
|
100
|
-
|
100
|
+
def calculate_90th_percentile(times)
|
101
|
+
return 0 if times.count.zero?
|
102
|
+
return times[0] if times.count == 1
|
103
|
+
times[times.count - tenth_percentile_count(times)]
|
101
104
|
end
|
102
105
|
end
|
103
106
|
end
|
@@ -18,13 +18,11 @@ module QaServer
|
|
18
18
|
# ...,
|
19
19
|
# 23: { hour: 'NOW', stats: { load_avg_ms: 12.3, normalization_avg_ms: 4.2, full_request_avg_ms: 16.5, etc. }}
|
20
20
|
# }
|
21
|
-
def average_last_24_hours(
|
21
|
+
def average_last_24_hours(authority_name: nil, action: nil)
|
22
22
|
start_hour = Time.now.getlocal.beginning_of_hour - 23.hours
|
23
23
|
avgs = {}
|
24
24
|
0.upto(23).each do |idx|
|
25
|
-
|
26
|
-
where_clause[:authority] = auth_name unless auth_name.nil?
|
27
|
-
records = performance_data_class.where(where_clause)
|
25
|
+
records = records_by(authority_name, action, start_hour..start_hour.end_of_hour)
|
28
26
|
stats = stats_calculator_class.new(records).calculate_stats(avg: true, full: false)
|
29
27
|
data = {}
|
30
28
|
data[BY_HOUR] = performance_by_hour_label(idx, start_hour)
|
@@ -44,13 +42,11 @@ module QaServer
|
|
44
42
|
# ...,
|
45
43
|
# 29: { day: 'TODAY', stats: { load_avg_ms: 12.3, normalization_avg_ms: 4.2, full_request_avg_ms: 16.5, etc. }}
|
46
44
|
# }
|
47
|
-
def average_last_30_days(
|
45
|
+
def average_last_30_days(authority_name: nil, action: nil)
|
48
46
|
start_day = Time.now.getlocal.beginning_of_day - 29.days
|
49
47
|
avgs = {}
|
50
48
|
0.upto(29).each do |idx|
|
51
|
-
|
52
|
-
where_clause[:authority] = auth_name unless auth_name.nil?
|
53
|
-
records = performance_data_class.where(where_clause)
|
49
|
+
records = records_by(authority_name, action, start_day..start_day.end_of_day)
|
54
50
|
stats = stats_calculator_class.new(records).calculate_stats(avg: true, full: false)
|
55
51
|
data = {}
|
56
52
|
data[BY_DAY] = performance_by_day_label(idx, start_day)
|
@@ -70,13 +66,11 @@ module QaServer
|
|
70
66
|
# ...,
|
71
67
|
# 11: { month: '08-2019', stats: { load_avg_ms: 12.3, normalization_avg_ms: 4.2, full_request_avg_ms: 16.5, etc. }}
|
72
68
|
# }
|
73
|
-
def average_last_12_months(
|
69
|
+
def average_last_12_months(authority_name: nil, action: nil)
|
74
70
|
start_month = Time.now.getlocal.beginning_of_month - 11.months
|
75
71
|
avgs = {}
|
76
72
|
0.upto(11).each do |idx|
|
77
|
-
|
78
|
-
where_clause[:authority] = auth_name unless auth_name.nil?
|
79
|
-
records = performance_data_class.where(where_clause)
|
73
|
+
records = records_by(authority_name, action, start_month..start_month.end_of_month)
|
80
74
|
stats = stats_calculator_class.new(records).calculate_stats(avg: true, full: false)
|
81
75
|
data = {}
|
82
76
|
data[BY_MONTH] = start_month.strftime("%m-%Y")
|
@@ -89,6 +83,13 @@ module QaServer
|
|
89
83
|
|
90
84
|
private
|
91
85
|
|
86
|
+
def records_by(authority_name, action, time_period)
|
87
|
+
where_clause = { dt_stamp: time_period }
|
88
|
+
where_clause[:authority] = authority_name unless authority_name.nil?
|
89
|
+
where_clause[:action] = action unless action.nil? || action == :all_actions
|
90
|
+
performance_data_class.where(where_clause)
|
91
|
+
end
|
92
|
+
|
92
93
|
def performance_by_hour_label(idx, start_hour)
|
93
94
|
if idx == 23
|
94
95
|
I18n.t('qa_server.monitor_status.performance.now')
|
@@ -12,45 +12,50 @@ module QaServer
|
|
12
12
|
# @param performance_data [Hash] hash of all performance data for all authorities
|
13
13
|
# @see QaServer:PerformanceHistory
|
14
14
|
def create_performance_graphs(performance_data:)
|
15
|
-
performance_data.each_key
|
15
|
+
performance_data.each_key do |auth_name|
|
16
|
+
create_graphs_for_authority(performance_data, auth_name.to_sym, :search)
|
17
|
+
create_graphs_for_authority(performance_data, auth_name.to_sym, :fetch)
|
18
|
+
create_graphs_for_authority(performance_data, auth_name.to_sym, :all_actions)
|
19
|
+
end
|
16
20
|
end
|
17
21
|
|
18
22
|
# @param authority_name [String] name of the authority
|
23
|
+
# @param action [Symbol] action performed by the request (e.g. :search, :fetch, :all_actions)
|
19
24
|
# @param time_period [Symbol] time period for the graph (i.e. :day, :month, :year)
|
20
|
-
def performance_graph_file(authority_name: ALL_AUTH, time_period:)
|
21
|
-
File.join(graph_relative_path, graph_filename(authority_name, time_period))
|
25
|
+
def performance_graph_file(authority_name: ALL_AUTH, action:, time_period:)
|
26
|
+
File.join(graph_relative_path, graph_filename(authority_name, action, time_period))
|
22
27
|
end
|
23
28
|
|
24
29
|
private
|
25
30
|
|
26
|
-
def create_graphs_for_authority(performance_data, authority_name)
|
27
|
-
create_performance_for_day_graph(performance_data, authority_name)
|
28
|
-
create_performance_for_month_graph(performance_data, authority_name)
|
29
|
-
create_performance_for_year_graph(performance_data, authority_name)
|
31
|
+
def create_graphs_for_authority(performance_data, authority_name, action)
|
32
|
+
create_performance_for_day_graph(performance_data, authority_name, action)
|
33
|
+
create_performance_for_month_graph(performance_data, authority_name, action)
|
34
|
+
create_performance_for_year_graph(performance_data, authority_name, action)
|
30
35
|
end
|
31
36
|
|
32
|
-
def create_performance_for_day_graph(performance_data, authority_name)
|
37
|
+
def create_performance_for_day_graph(performance_data, authority_name, action)
|
33
38
|
auth_data = authority_performance_data(performance_data, authority_name)
|
34
39
|
return unless auth_data
|
35
|
-
gruff_data = rework_performance_data_for_gruff(auth_data[FOR_DAY], BY_HOUR)
|
40
|
+
gruff_data = rework_performance_data_for_gruff(auth_data[action][FOR_DAY], BY_HOUR)
|
36
41
|
create_gruff_graph(gruff_data,
|
37
|
-
performance_for_day_graph_full_path(authority_name),
|
42
|
+
performance_for_day_graph_full_path(authority_name, action),
|
38
43
|
I18n.t('qa_server.monitor_status.performance.x_axis_hour'))
|
39
44
|
end
|
40
45
|
|
41
|
-
def create_performance_for_month_graph(performance_data, authority_name)
|
46
|
+
def create_performance_for_month_graph(performance_data, authority_name, action)
|
42
47
|
auth_data = authority_performance_data(performance_data, authority_name)
|
43
|
-
gruff_data = rework_performance_data_for_gruff(auth_data[FOR_MONTH], BY_DAY)
|
48
|
+
gruff_data = rework_performance_data_for_gruff(auth_data[action][FOR_MONTH], BY_DAY)
|
44
49
|
create_gruff_graph(gruff_data,
|
45
|
-
performance_for_month_graph_full_path(authority_name),
|
50
|
+
performance_for_month_graph_full_path(authority_name, action),
|
46
51
|
I18n.t('qa_server.monitor_status.performance.x_axis_day'))
|
47
52
|
end
|
48
53
|
|
49
|
-
def create_performance_for_year_graph(performance_data, authority_name)
|
54
|
+
def create_performance_for_year_graph(performance_data, authority_name, action)
|
50
55
|
auth_data = authority_performance_data(performance_data, authority_name)
|
51
|
-
gruff_data = rework_performance_data_for_gruff(auth_data[FOR_YEAR], BY_MONTH)
|
56
|
+
gruff_data = rework_performance_data_for_gruff(auth_data[action][FOR_YEAR], BY_MONTH)
|
52
57
|
create_gruff_graph(gruff_data,
|
53
|
-
performance_for_year_graph_full_path(authority_name),
|
58
|
+
performance_for_year_graph_full_path(authority_name, action),
|
54
59
|
I18n.t('qa_server.monitor_status.performance.x_axis_month'))
|
55
60
|
end
|
56
61
|
|
@@ -59,44 +64,47 @@ module QaServer
|
|
59
64
|
data[auth_name]
|
60
65
|
end
|
61
66
|
|
62
|
-
def
|
63
|
-
|
64
|
-
g.colors = [QaServer.config.performance_normalization_color,
|
65
|
-
QaServer.config.performance_load_color]
|
66
|
-
g.marker_font_size = 12
|
67
|
-
g.x_axis_increment = 10
|
68
|
-
g.x_axis_label = x_axis_label
|
69
|
-
g.y_axis_label = I18n.t('qa_server.monitor_status.performance.y_axis_ms')
|
70
|
-
g.minimum_value = 0
|
71
|
-
g.maximum_value = 2000
|
72
|
-
end
|
73
|
-
|
74
|
-
def performance_for_day_graph_full_path(authority_name)
|
75
|
-
graph_full_path(graph_filename(authority_name, :day))
|
67
|
+
def performance_for_day_graph_full_path(authority_name, action)
|
68
|
+
graph_full_path(graph_filename(authority_name, action, :day))
|
76
69
|
end
|
77
70
|
|
78
|
-
def performance_for_month_graph_full_path(authority_name)
|
79
|
-
graph_full_path(graph_filename(authority_name, :month))
|
71
|
+
def performance_for_month_graph_full_path(authority_name, action)
|
72
|
+
graph_full_path(graph_filename(authority_name, action, :month))
|
80
73
|
end
|
81
74
|
|
82
|
-
def performance_for_year_graph_full_path(authority_name)
|
83
|
-
graph_full_path(graph_filename(authority_name, :year))
|
75
|
+
def performance_for_year_graph_full_path(authority_name, action)
|
76
|
+
graph_full_path(graph_filename(authority_name, action, :year))
|
84
77
|
end
|
85
78
|
|
86
|
-
def graph_filename(authority_name, time_period)
|
87
|
-
"performance_of_#{authority_name}_for_#{time_period}_graph.png"
|
79
|
+
def graph_filename(authority_name, action, time_period)
|
80
|
+
"performance_of_#{authority_name}_#{action}_for_#{time_period}_graph.png"
|
88
81
|
end
|
89
82
|
|
90
83
|
def rework_performance_data_for_gruff(performance_data, label_key)
|
91
84
|
labels = {}
|
92
|
-
|
85
|
+
retrieve_data = []
|
86
|
+
graph_load_data = []
|
93
87
|
normalization_data = []
|
94
88
|
performance_data.each do |i, data|
|
95
89
|
labels[i] = data[label_key]
|
96
|
-
|
90
|
+
retrieve_data << data[STATS][AVG_RETR]
|
91
|
+
graph_load_data << data[STATS][AVG_GRPH]
|
97
92
|
normalization_data << data[STATS][AVG_NORM]
|
98
93
|
end
|
99
|
-
[labels, normalization_data,
|
94
|
+
[labels, normalization_data, graph_load_data, retrieve_data]
|
95
|
+
end
|
96
|
+
|
97
|
+
def performance_graph_theme(g, x_axis_label)
|
98
|
+
g.theme_pastel
|
99
|
+
g.colors = [QaServer.config.performance_normalization_color,
|
100
|
+
QaServer.config.performance_graph_load_color,
|
101
|
+
QaServer.config.performance_retrieve_color]
|
102
|
+
g.marker_font_size = 12
|
103
|
+
g.x_axis_increment = 10
|
104
|
+
g.x_axis_label = x_axis_label
|
105
|
+
g.y_axis_label = I18n.t('qa_server.monitor_status.performance.y_axis_ms')
|
106
|
+
g.minimum_value = 0
|
107
|
+
g.maximum_value = QaServer.config.performance_y_axis_max
|
100
108
|
end
|
101
109
|
|
102
110
|
def create_gruff_graph(performance_data, performance_graph_full_path, x_axis_label)
|
@@ -105,7 +113,8 @@ module QaServer
|
|
105
113
|
g.title = ''
|
106
114
|
g.labels = performance_data[0]
|
107
115
|
g.data(I18n.t('qa_server.monitor_status.performance.normalization_time_ms'), performance_data[1])
|
108
|
-
g.data(I18n.t('qa_server.monitor_status.performance.
|
116
|
+
g.data(I18n.t('qa_server.monitor_status.performance.graph_load_time_ms'), performance_data[2])
|
117
|
+
g.data(I18n.t('qa_server.monitor_status.performance.retrieve_time_ms'), performance_data[3])
|
109
118
|
g.write performance_graph_full_path
|
110
119
|
end
|
111
120
|
end
|