qa_server 7.3.0 → 7.7.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 +5 -5
- data/.rubocop_fixme.yml +3 -0
- data/.travis.yml +4 -5
- data/CHANGELOG.md +45 -0
- data/Rakefile +1 -1
- data/app/assets/stylesheets/qa_server/_check-status.scss +36 -0
- data/app/cache_processors/qa_server/cache_expiry_service.rb +8 -8
- data/app/cache_processors/qa_server/job_id_cache.rb +4 -4
- data/app/cache_processors/qa_server/performance_cache.rb +34 -34
- data/app/cache_processors/qa_server/performance_day_graph_cache.rb +7 -7
- data/app/cache_processors/qa_server/performance_month_graph_cache.rb +7 -7
- data/app/cache_processors/qa_server/performance_year_graph_cache.rb +7 -7
- data/app/cache_processors/qa_server/scenario_history_cache.rb +7 -7
- data/app/cache_processors/qa_server/scenario_history_graph_cache.rb +7 -7
- data/app/cache_processors/qa_server/scenario_run_cache.rb +7 -7
- data/app/cache_processors/qa_server/scenario_run_failures_cache.rb +7 -7
- data/app/cache_processors/qa_server/scenario_run_summary_cache.rb +7 -7
- data/app/controllers/concerns/qa_server/authority_validation_behavior.rb +49 -44
- data/app/controllers/qa_server/check_status_controller.rb +92 -22
- data/app/controllers/qa_server/fetch_controller.rb +36 -36
- data/app/controllers/qa_server/monitor_status_controller.rb +106 -84
- data/app/jobs/qa_server/history_graph_job.rb +10 -10
- data/app/jobs/qa_server/monitor_tests_job.rb +17 -17
- data/app/jobs/qa_server/performance_day_graph_job.rb +21 -21
- data/app/jobs/qa_server/performance_month_graph_job.rb +21 -21
- data/app/jobs/qa_server/performance_per_byte_job.rb +85 -0
- data/app/jobs/qa_server/performance_year_graph_job.rb +21 -21
- data/app/loggers/qa_server/scenario_logger.rb +74 -4
- data/app/models/concerns/qa_server/performance_history_data_keys.rb +8 -0
- data/app/models/qa_server/authority_scenario.rb +4 -4
- data/app/models/qa_server/authority_status.rb +2 -2
- data/app/models/qa_server/authority_status_failure.rb +1 -1
- data/app/models/qa_server/performance_history.rb +2 -2
- data/app/models/qa_server/scenario_run_history.rb +63 -54
- data/app/models/qa_server/scenario_run_registry.rb +2 -2
- data/app/models/qa_server/scenarios.rb +26 -26
- data/app/models/qa_server/search_scenario.rb +24 -13
- data/app/models/qa_server/term_scenario.rb +29 -29
- data/app/prepends/prepended_linked_data/find_term.rb +40 -40
- data/app/prepends/prepended_linked_data/search_query.rb +36 -36
- data/app/prepends/prepended_rdf/rdf_graph.rb +7 -7
- data/app/presenters/concerns/qa_server/monitor_status/performance_datatable_behavior.rb +32 -32
- data/app/presenters/concerns/qa_server/monitor_status/performance_graph_behavior.rb +64 -64
- data/app/presenters/qa_server/check_status_presenter.rb +63 -7
- data/app/presenters/qa_server/monitor_status/current_status_presenter.rb +9 -8
- data/app/presenters/qa_server/monitor_status/history_presenter.rb +5 -2
- data/app/services/concerns/qa_server/gruff_graph.rb +16 -16
- data/app/services/qa_server/authority_loader_service.rb +14 -14
- data/app/services/qa_server/authority_validator_service.rb +1 -0
- data/app/services/qa_server/database_migrator.rb +14 -14
- data/app/services/qa_server/history_graphing_service.rb +30 -30
- data/app/services/qa_server/performance_calculator_service.rb +80 -80
- data/app/services/qa_server/performance_datatable_service.rb +35 -35
- data/app/services/qa_server/performance_graph_data_service.rb +27 -27
- data/app/services/qa_server/performance_graphing_service.rb +55 -55
- data/app/services/qa_server/performance_per_byte_calculator_service.rb +88 -0
- data/app/services/qa_server/performance_per_byte_data_service.rb +41 -0
- data/app/services/qa_server/scenarios_loader_service.rb +1 -1
- data/app/services/qa_server/time_period_service.rb +21 -21
- data/app/validators/qa_server/scenario_validator.rb +99 -87
- data/app/validators/qa_server/search_scenario_validator.rb +67 -61
- data/app/validators/qa_server/term_scenario_validator.rb +20 -15
- data/app/views/qa_server/check_status/index.html.erb +120 -24
- data/app/views/qa_server/monitor_status/_test_summary.html.erb +1 -1
- data/config/i18n-tasks.yml +133 -0
- data/config/locales/qa_server.en.yml +21 -5
- data/lib/generators/qa_server/assets_generator.rb +4 -4
- data/lib/generators/qa_server/templates/config/authorities/linked_data/cerl_ld4l_cache.json +2 -2
- data/lib/generators/qa_server/templates/config/authorities/linked_data/getty_aat_ld4l_cache.json +62 -1
- data/lib/generators/qa_server/templates/config/authorities/linked_data/getty_tgn_ld4l_cache.json +45 -11
- data/lib/generators/qa_server/templates/config/authorities/linked_data/getty_ulan_ld4l_cache.json +104 -8
- data/lib/generators/qa_server/templates/config/authorities/linked_data/isni_ld4l_cache.json +90 -0
- data/lib/generators/qa_server/templates/config/authorities/linked_data/ligatus_ld4l_cache.json +133 -0
- data/lib/generators/qa_server/templates/config/authorities/linked_data/locnames_rwo2_ld4l_cache.json +248 -0
- data/lib/generators/qa_server/templates/config/authorities/linked_data/locnames_rwo3_ld4l_cache.json +248 -0
- data/lib/generators/qa_server/templates/config/authorities/linked_data/locnames_rwo_ld4l_cache.json +4 -4
- data/lib/generators/qa_server/templates/config/authorities/linked_data/locvocabs_ld4l_cache.json +117 -0
- data/lib/generators/qa_server/templates/config/authorities/linked_data/mesh_nlm_ld4l_cache.json +135 -3
- data/lib/generators/qa_server/templates/config/authorities/linked_data/oclcfast_direct.json +5 -0
- data/lib/generators/qa_server/templates/config/authorities/linked_data/oclcfast_ld4l_cache.json +2 -4
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/agrovoc_direct_validation.yml +31 -0
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/agrovoc_ld4l_cache_validation.yml +31 -0
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/cerl_ld4l_cache_validation.yml +24 -12
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/dbpedia_ld4l_cache_validation.yml +33 -0
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/geonames_direct_validation.yml +35 -0
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/geonames_ld4l_cache_validation.yml +55 -5
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/getty_aat_ld4l_cache_validation.yml +253 -0
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/getty_tgn_ld4l_cache_validation.yml +31 -1
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/getty_ulan_ld4l_cache_validation.yml +38 -1
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/isni_ld4l_cache_validation.yml +10 -0
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/ligatus_ld4l_cache_validation.yml +36 -0
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/locdemographics_ld4l_cache_validation.yml +69 -44
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/locgenres_ld4l_cache_validation.yml +22 -0
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/locnames_ld4l_cache_validation.yml +65 -0
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/locnames_rwo2_ld4l_cache_validation.yml +78 -0
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/locnames_rwo3_ld4l_cache_validation.yml +73 -0
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/locnames_rwo_ld4l_cache_validation.yml +71 -3
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/locperformance_ld4l_cache_validation.yml +6 -0
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/locsubjects_ld4l_cache_validation.yml +30 -0
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/locvocabs_ld4l_cache_validation.yml +430 -0
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/mesh_nlm_ld4l_cache_validation.yml +54 -1
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/nalt_ld4l_cache_validation.yml +37 -0
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/oclc_fast_validation.yml +71 -5
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/oclcfast_direct_validation.yml +73 -2
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/oclcfast_ld4l_cache_validation.yml +73 -0
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/rda_registry_ld4l_cache_validation.yml +307 -0
- data/lib/qa_server/configuration.rb +28 -24
- data/lib/qa_server/version.rb +1 -1
- data/qa_server.gemspec +6 -5
- data/spec/feature/accuracy_spec.rb +32 -0
- data/spec/i18n_spec.rb +35 -0
- data/spec/spec_helper.rb +4 -0
- metadata +66 -17
|
@@ -26,15 +26,15 @@ module QaServer
|
|
|
26
26
|
end
|
|
27
27
|
end
|
|
28
28
|
|
|
29
|
-
|
|
29
|
+
private
|
|
30
30
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
def cache_key_for_run_summary(id)
|
|
32
|
+
"#{SCENARIO_RUN_SUMMARY_DATA_CACHE_KEY}--#{id}"
|
|
33
|
+
end
|
|
34
34
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
35
|
+
def next_expiry
|
|
36
|
+
QaServer::CacheExpiryService.cache_expiry
|
|
37
|
+
end
|
|
38
38
|
end
|
|
39
39
|
end
|
|
40
40
|
end
|
|
@@ -6,6 +6,7 @@ module QaServer
|
|
|
6
6
|
VALIDATION_TYPE_PARAM = :validation_type
|
|
7
7
|
VALIDATE_CONNECTIONS = 'connections'
|
|
8
8
|
VALIDATE_ACCURACY = 'accuracy'
|
|
9
|
+
VALIDATE_ACCURACY_COMPARISON = 'accuracy_comparison'
|
|
9
10
|
ALL_VALIDATIONS = 'all_checks'
|
|
10
11
|
|
|
11
12
|
included do
|
|
@@ -18,60 +19,64 @@ module QaServer
|
|
|
18
19
|
self.logger_class = QaServer::ScenarioLogger
|
|
19
20
|
end
|
|
20
21
|
|
|
21
|
-
|
|
22
|
+
private
|
|
22
23
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
def status_log
|
|
25
|
+
@status_log ||= logger_class.new
|
|
26
|
+
end
|
|
26
27
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
def status_data_from_log
|
|
29
|
+
@status_data = status_log.to_a
|
|
30
|
+
end
|
|
30
31
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
def authorities_list
|
|
33
|
+
@authorities_list ||= lister_class.authorities_list
|
|
34
|
+
end
|
|
34
35
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
36
|
+
def validate(authorities_list, validation_type = validator_class::DEFAULT_VALIDATION_TYPE)
|
|
37
|
+
return if authorities_list.blank?
|
|
38
|
+
result = []
|
|
39
|
+
authorities_list.each { |auth_name| result << validate_authority(auth_name, validation_type) }
|
|
40
|
+
result
|
|
41
|
+
end
|
|
39
42
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
+
def validate_authority(auth_name, validation_type)
|
|
44
|
+
validator_class.run(authority_name: auth_name, validation_type: validation_type, status_log: status_log)
|
|
45
|
+
end
|
|
43
46
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
47
|
+
def list(authorities_list)
|
|
48
|
+
return if authorities_list.blank?
|
|
49
|
+
authorities_list.each { |auth_name| list_scenarios(auth_name) }
|
|
50
|
+
end
|
|
48
51
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
+
def list_scenarios(auth_name)
|
|
53
|
+
lister_class.scenarios_list(authority_name: auth_name, status_log: status_log)
|
|
54
|
+
end
|
|
52
55
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
56
|
+
def validating_accuracy?
|
|
57
|
+
return true if validation_type == validator_class::VALIDATE_ACCURACY
|
|
58
|
+
false
|
|
59
|
+
end
|
|
57
60
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
61
|
+
def comparing_accuracy?
|
|
62
|
+
return true if validation_type == validator_class::VALIDATE_ACCURACY_COMPARISON
|
|
63
|
+
false
|
|
64
|
+
end
|
|
62
65
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
66
|
+
def validation_type
|
|
67
|
+
return @validation_type if @validation_type.present?
|
|
68
|
+
case params[VALIDATION_TYPE_PARAM]
|
|
69
|
+
when ALL_VALIDATIONS
|
|
70
|
+
validator_class::ALL_VALIDATIONS
|
|
71
|
+
when VALIDATE_CONNECTIONS
|
|
72
|
+
validator_class::VALIDATE_CONNECTIONS
|
|
73
|
+
when VALIDATE_ACCURACY
|
|
74
|
+
validator_class::VALIDATE_ACCURACY
|
|
75
|
+
when VALIDATE_ACCURACY_COMPARISON
|
|
76
|
+
validator_class::VALIDATE_ACCURACY_COMPARISON
|
|
77
|
+
else
|
|
78
|
+
validator_class::DEFAULT_VALIDATION_TYPE
|
|
75
79
|
end
|
|
80
|
+
end
|
|
76
81
|
end
|
|
77
82
|
end
|
|
@@ -7,6 +7,7 @@ module QaServer
|
|
|
7
7
|
include QaServer::AuthorityValidationBehavior
|
|
8
8
|
|
|
9
9
|
ALL_AUTHORITIES = '__all__'
|
|
10
|
+
VALIDATE_ACCURACY_COMPARISON = :accuracy_comparison
|
|
10
11
|
|
|
11
12
|
class_attribute :presenter_class
|
|
12
13
|
self.presenter_class = QaServer::CheckStatusPresenter
|
|
@@ -17,36 +18,105 @@ module QaServer
|
|
|
17
18
|
validate(authorities_to_validate, validation_type)
|
|
18
19
|
@presenter = presenter_class.new(authorities_list: authorities_list,
|
|
19
20
|
connection_status_data: connection_status_data_from_log,
|
|
20
|
-
accuracy_status_data: accuracy_status_data_from_log
|
|
21
|
+
accuracy_status_data: accuracy_status_data_from_log,
|
|
22
|
+
comparison_status_data: comparison_status_data_from_log)
|
|
21
23
|
end
|
|
22
24
|
|
|
23
|
-
|
|
25
|
+
private
|
|
24
26
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
27
|
+
def connection_status_data_from_log
|
|
28
|
+
status_log.filter(type: validator_class::VALIDATE_CONNECTIONS)
|
|
29
|
+
end
|
|
28
30
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
31
|
+
def accuracy_status_data_from_log
|
|
32
|
+
return [] unless validating_accuracy?
|
|
33
|
+
status_log.filter(type: validator_class::VALIDATE_ACCURACY)
|
|
34
|
+
end
|
|
32
35
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
36
|
+
def comparison_status_data_from_log
|
|
37
|
+
return [] unless comparing_accuracy?
|
|
38
|
+
filtered_log = status_log.filter(type: validator_class::VALIDATE_ACCURACY, group: true)
|
|
39
|
+
return [] unless filtered_log.count == 2
|
|
40
|
+
overlay_log(filtered_log)
|
|
41
|
+
end
|
|
37
42
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
43
|
+
def overlay_log(log)
|
|
44
|
+
auths = log.keys
|
|
45
|
+
auth_a = log[auths[0]]
|
|
46
|
+
auth_b = log[auths[1]]
|
|
47
|
+
overlay = []
|
|
48
|
+
auth_a.each { |test| overlay << match_and_merge_test(test, auth_b) }
|
|
49
|
+
auth_b.each { |test| overlay << merge_test_results(empty_test(test), test) }
|
|
50
|
+
overlay
|
|
51
|
+
end
|
|
42
52
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
53
|
+
def match_and_merge_test(a_test, auth_b)
|
|
54
|
+
auth_b.each_with_index do |b_test, idx|
|
|
55
|
+
next unless b_test[:action] == a_test[:action]
|
|
56
|
+
next unless b_test[:subauthority_name] == a_test[:subauthority_name]
|
|
57
|
+
next unless b_test[:request_data] == a_test[:request_data]
|
|
58
|
+
next unless b_test[:target] == a_test[:target]
|
|
59
|
+
return merge_test_results(a_test, auth_b.delete_at(idx))
|
|
46
60
|
end
|
|
61
|
+
merge_test_results(a_test, empty_test(a_test))
|
|
62
|
+
end
|
|
47
63
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
64
|
+
def merge_test_results(a_test, b_test)
|
|
65
|
+
merged_tests = {}
|
|
66
|
+
merged_tests[:status] = [a_test[:status], b_test[:status]]
|
|
67
|
+
merged_tests[:service] = [a_test[:service], b_test[:service]]
|
|
68
|
+
merged_tests[:action] = a_test[:action]
|
|
69
|
+
merged_tests[:authority_name] = [a_test[:authority_name], b_test[:authority_name]]
|
|
70
|
+
merged_tests[:subauthority_name] = a_test[:subauthority_name]
|
|
71
|
+
merged_tests[:request_data] = a_test[:request_data]
|
|
72
|
+
merged_tests[:target] = a_test[:target]
|
|
73
|
+
merged_tests[:expected] = [a_test[:expected], b_test[:expected]]
|
|
74
|
+
merged_tests[:actual] = [a_test[:actual], b_test[:actual]]
|
|
75
|
+
merged_tests[:url] = [a_test[:url], b_test[:url]]
|
|
76
|
+
merged_tests[:err_message] = [a_test[:err_message], b_test[:err_message]]
|
|
77
|
+
merged_tests
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def empty_test(base_test)
|
|
81
|
+
merged_tests = {}
|
|
82
|
+
merged_tests[:status] = ''
|
|
83
|
+
merged_tests[:service] = ''
|
|
84
|
+
merged_tests[:action] = base_test[:action]
|
|
85
|
+
merged_tests[:authority_name] = ''
|
|
86
|
+
merged_tests[:subauthority_name] = base_test[:subauthority_name]
|
|
87
|
+
merged_tests[:request_data] = base_test[:request_data]
|
|
88
|
+
merged_tests[:target] = base_test[:target]
|
|
89
|
+
merged_tests[:expected] = ''
|
|
90
|
+
merged_tests[:actual] = ''
|
|
91
|
+
merged_tests[:url] = ''
|
|
92
|
+
merged_tests[:err_message] = ''
|
|
93
|
+
merged_tests
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def authorities_to_validate
|
|
97
|
+
return [] if authority_name.blank?
|
|
98
|
+
authority_names = authority_name == ALL_AUTHORITIES ? authorities_list : [authority_name]
|
|
99
|
+
authority_names << compare_with if comparing_accuracy? && compare_with.present?
|
|
100
|
+
authority_names
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def authority_name
|
|
104
|
+
return @authority_name if @authority_name.present?
|
|
105
|
+
@authority_name = params.key?(:authority) ? params[:authority].downcase : nil
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def compare_with
|
|
109
|
+
return @compare_with if @compare_with.present?
|
|
110
|
+
@compare_with = params.key?(:compare_with) ? params[:compare_with].downcase : nil
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def log_header
|
|
114
|
+
QaServer.config.performance_cache_logger.debug("---------------------- check status (max_cache_size = #{max_cache_size}) ----------------------")
|
|
115
|
+
QaServer.config.performance_cache_logger.debug("(#{self.class}##{__method__}) check status page request (authority_name # #{authority_name})")
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def max_cache_size
|
|
119
|
+
ActiveSupport::NumberHelper.number_to_human_size(QaServer.config.max_performance_cache_size)
|
|
120
|
+
end
|
|
51
121
|
end
|
|
52
122
|
end
|
|
@@ -20,41 +20,41 @@ module QaServer
|
|
|
20
20
|
term_results: term_results)
|
|
21
21
|
end
|
|
22
22
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
23
|
+
private
|
|
24
|
+
|
|
25
|
+
def authorities_list
|
|
26
|
+
@authorities_list ||= lister_class.authorities_list
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# @return [Qa::Authorities::LinkedData::GenericAuthority] the instance of the QA authority
|
|
30
|
+
def authority
|
|
31
|
+
return unless authority_name?
|
|
32
|
+
@authority ||= QaServer::AuthorityLoaderService.load(authority_name: authority_name)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def uri?
|
|
36
|
+
uri.present?
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def uri
|
|
40
|
+
@uri ||= params.key?(:uri) ? params[:uri] : nil
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def authority_name?
|
|
44
|
+
authority_name.present?
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def authority_name
|
|
48
|
+
@authority_name ||= params.key?(:authority) ? params[:authority].downcase : nil
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def format
|
|
52
|
+
@format ||= params.key?(:results_format) ? params[:results_format] : 'json'
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def term_results
|
|
56
|
+
return unless authority_name? && uri?
|
|
57
|
+
@term_results = authority.find(uri, format: format)
|
|
58
|
+
end
|
|
59
59
|
end
|
|
60
60
|
end
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
# Controller for Monitor Status header menu item
|
|
3
3
|
module QaServer
|
|
4
|
-
class MonitorStatusController < ApplicationController
|
|
4
|
+
class MonitorStatusController < ApplicationController # rubocop:disable Metrics/ClassLength
|
|
5
5
|
layout 'qa_server'
|
|
6
6
|
|
|
7
7
|
include QaServer::AuthorityValidationBehavior
|
|
@@ -21,113 +21,135 @@ module QaServer
|
|
|
21
21
|
historical_summary_data: historical_data,
|
|
22
22
|
performance_data: performance_table_data)
|
|
23
23
|
QaServer.config.monitor_logger.debug("~~~~~~~~ DONE rendering monitor status")
|
|
24
|
-
render 'index', status: :internal_server_error if latest_summary
|
|
24
|
+
render 'index', status: :internal_server_error if latest_summary&.failing_authority_count&.positive?
|
|
25
25
|
end
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
private
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
29
|
+
def perform_updates
|
|
30
|
+
update_tests
|
|
31
|
+
update_historical_graph
|
|
32
|
+
update_performance_graphs
|
|
33
|
+
end
|
|
34
34
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
35
|
+
def update_tests
|
|
36
|
+
QaServer::ScenarioRunCache.run_tests(force: refresh_tests?)
|
|
37
|
+
end
|
|
38
38
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
39
|
+
# Sets @latest_test_run [QaServer::ScenarioRunRegistry]
|
|
40
|
+
def latest_test_run
|
|
41
|
+
@latest_test_run ||= scenario_run_registry_class.latest_run
|
|
42
|
+
end
|
|
43
43
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
44
|
+
# @returns [QaServer::ScenarioRunSummary] summary statistics on the latest run
|
|
45
|
+
def latest_summary
|
|
46
|
+
latest_test_run ? QaServer::ScenarioRunSummaryCache.summary_for_run(run: latest_test_run) : nil
|
|
47
|
+
end
|
|
48
48
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
49
|
+
# @returns [Array<Hash>] scenario details for any failing scenarios in the latest run
|
|
50
|
+
# @see QaServer::ScenarioRunHistory#run_failures for structure of output
|
|
51
|
+
def latest_failures
|
|
52
|
+
latest_test_run ? QaServer::ScenarioRunFailuresCache.failures_for_run(run: latest_test_run) : nil
|
|
53
|
+
end
|
|
54
54
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
55
|
+
# Get a summary level of historical data
|
|
56
|
+
# @returns [Array<Hash>] summary of passing/failing tests for each authority
|
|
57
|
+
# @see QaServer::ScenarioRunHistory#historical_summary for structure of output
|
|
58
|
+
def historical_data
|
|
59
|
+
@historical_data ||= QaServer::ScenarioHistoryCache.historical_summary(force: refresh_history?)
|
|
60
|
+
end
|
|
61
61
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
62
|
+
def update_historical_graph
|
|
63
|
+
return unless QaServer.config.display_historical_graph?
|
|
64
|
+
QaServer::ScenarioHistoryGraphCache.generate_graph(data: historical_data, force: refresh_history?)
|
|
65
|
+
end
|
|
66
66
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
67
|
+
def performance_table_data
|
|
68
|
+
return {} unless QaServer.config.display_performance_datatable?
|
|
69
|
+
QaServer::PerformanceDatatableCache.data(force: refresh_performance_table?)
|
|
70
|
+
end
|
|
71
71
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
72
|
+
def update_performance_graphs
|
|
73
|
+
return unless QaServer.config.display_performance_graph?
|
|
74
|
+
QaServer::PerformanceDayGraphCache.generate_graphs(force: refresh_performance_graphs?)
|
|
75
|
+
QaServer::PerformanceMonthGraphCache.generate_graphs(force: refresh_performance_graphs?)
|
|
76
|
+
QaServer::PerformanceYearGraphCache.generate_graphs(force: refresh_performance_graphs?)
|
|
77
|
+
end
|
|
78
78
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
79
|
+
def refresh?
|
|
80
|
+
return @refresh unless @refresh.nil?
|
|
81
|
+
@refresh ||= params.key?(:refresh) && validate_auth_reload_token("refresh status")
|
|
82
|
+
end
|
|
82
83
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
84
|
+
def refresh_all?
|
|
85
|
+
return false unless refresh?
|
|
86
|
+
params[:refresh].nil? || params[:refresh].casecmp?('all') # nil is for backward compatibility
|
|
87
|
+
end
|
|
87
88
|
|
|
88
|
-
|
|
89
|
-
|
|
89
|
+
def refresh_tests?
|
|
90
|
+
return @refresh_tests unless @refresh_tests.nil?
|
|
91
|
+
@refresh_tests = refresh? && (refresh_all? || params[:refresh].casecmp?('tests'))
|
|
92
|
+
if @refresh_tests
|
|
93
|
+
msg = I18n.t('qa_server.monitor_status.refreshing_tests')
|
|
94
|
+
logger.info msg
|
|
95
|
+
flash.now[:success] = msg
|
|
90
96
|
end
|
|
97
|
+
@refresh_tests
|
|
98
|
+
end
|
|
91
99
|
|
|
92
|
-
|
|
93
|
-
|
|
100
|
+
def refresh_history?
|
|
101
|
+
return @refresh_history unless @refresh_history.nil?
|
|
102
|
+
@refresh_history = refresh? && (refresh_all? || params[:refresh].casecmp?('history'))
|
|
103
|
+
if @refresh_history
|
|
104
|
+
msg = I18n.t('qa_server.monitor_status.refreshing_history')
|
|
105
|
+
logger.info msg
|
|
106
|
+
flash.now[:success] = msg
|
|
94
107
|
end
|
|
108
|
+
@refresh_history
|
|
109
|
+
end
|
|
95
110
|
|
|
96
|
-
|
|
97
|
-
|
|
111
|
+
def refresh_performance?
|
|
112
|
+
return @refresh_performance unless @refresh_performance.nil?
|
|
113
|
+
@refresh_performance = refresh? && (refresh_all? || params[:refresh].casecmp?('performance'))
|
|
114
|
+
if @refresh_performance
|
|
115
|
+
msg = I18n.t('qa_server.monitor_status.refreshing_performance')
|
|
116
|
+
logger.info msg
|
|
117
|
+
flash.now[:success] = msg
|
|
98
118
|
end
|
|
119
|
+
@refresh_performance
|
|
120
|
+
end
|
|
99
121
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
122
|
+
def refresh_performance_table?
|
|
123
|
+
refresh? ? (refresh_performance? || params[:refresh].casecmp?('performance_table')) : false
|
|
124
|
+
end
|
|
103
125
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
126
|
+
def refresh_performance_graphs?
|
|
127
|
+
refresh? ? (refresh_performance? || params[:refresh].casecmp?('performance_graphs')) : false
|
|
128
|
+
end
|
|
107
129
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
130
|
+
def commit_cache?
|
|
131
|
+
params.key?(:commit) && validate_auth_reload_token("commit cache")
|
|
132
|
+
end
|
|
111
133
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
134
|
+
def commit_cache
|
|
135
|
+
QaServer.config.performance_cache.write_all
|
|
136
|
+
end
|
|
115
137
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
138
|
+
def validate_auth_reload_token(action)
|
|
139
|
+
token = params.key?(:auth_token) ? params[:auth_token] : nil
|
|
140
|
+
valid = Qa.config.valid_authority_reload_token?(token)
|
|
141
|
+
return true if valid
|
|
142
|
+
msg = I18n.t('qa_server.monitor_status.permission_denied', action: action)
|
|
143
|
+
logger.warn msg
|
|
144
|
+
flash.now[:error] = msg
|
|
145
|
+
false
|
|
146
|
+
end
|
|
125
147
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
148
|
+
def log_header
|
|
149
|
+
QaServer.config.monitor_logger.debug("------------------------------------ monitor status -----------------------------------")
|
|
150
|
+
QaServer.config.monitor_logger.debug("refresh_all? #{refresh_all?}, refresh_tests? #{refresh_tests?}, refresh_history? #{refresh_history?}")
|
|
151
|
+
QaServer.config.monitor_logger.debug("refresh_performance? #{refresh_performance?}, refresh_performance_table? #{refresh_performance_table?}, " \
|
|
152
|
+
"refresh_performance_graphs? #{refresh_performance_graphs?})")
|
|
153
|
+
end
|
|
132
154
|
end
|
|
133
155
|
end
|