qa_server 7.2.0 → 7.5.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.rubocop_fixme.yml +6 -0
- data/.travis.yml +4 -5
- data/CHANGELOG.md +38 -0
- data/Rakefile +1 -1
- data/app/assets/stylesheets/qa_server/_check-status.scss +36 -0
- data/app/cache_processors/concerns/qa_server/cache_keys.rb +0 -5
- data/app/cache_processors/qa_server/cache_expiry_service.rb +13 -8
- data/app/cache_processors/qa_server/job_id_cache.rb +29 -0
- data/app/cache_processors/qa_server/performance_cache.rb +34 -34
- data/app/cache_processors/qa_server/performance_day_graph_cache.rb +27 -0
- data/app/cache_processors/qa_server/performance_month_graph_cache.rb +27 -0
- data/app/cache_processors/qa_server/performance_year_graph_cache.rb +27 -0
- data/app/cache_processors/qa_server/scenario_history_cache.rb +7 -7
- data/app/cache_processors/qa_server/scenario_history_graph_cache.rb +12 -17
- data/app/cache_processors/qa_server/scenario_run_cache.rb +8 -8
- 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 +105 -105
- data/app/jobs/qa_server/history_graph_job.rb +28 -0
- data/app/jobs/qa_server/monitor_tests_job.rb +19 -39
- data/app/jobs/qa_server/performance_day_graph_job.rb +45 -0
- data/app/jobs/qa_server/performance_month_graph_job.rb +45 -0
- data/app/jobs/qa_server/performance_per_byte_job.rb +85 -0
- data/app/jobs/qa_server/performance_year_graph_job.rb +45 -0
- 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 +52 -52
- 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 +18 -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/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 +28 -28
- data/app/services/qa_server/performance_graphing_service.rb +58 -58
- 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/config/i18n-tasks.yml +133 -0
- data/config/locales/qa_server.en.yml +15 -0
- 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 +28 -4
- 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/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 +1 -0
- data/lib/generators/qa_server/templates/config/authorities/linked_data/oclcfast_ld4l_cache.json +1 -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 +23 -11
- 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 +58 -5
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/getty_aat_ld4l_cache_validation.yml +256 -0
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/getty_tgn_ld4l_cache_validation.yml +35 -1
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/getty_ulan_ld4l_cache_validation.yml +37 -0
- 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 +73 -44
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/locgenres_ld4l_cache_validation.yml +31 -0
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/locnames_ld4l_cache_validation.yml +71 -0
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/locnames_rwo_ld4l_cache_validation.yml +70 -2
- 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 +32 -0
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/locvocabs_ld4l_cache_validation.yml +184 -0
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/mesh_nlm_ld4l_cache_validation.yml +51 -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 +66 -1
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/oclcfast_ld4l_cache_validation.yml +57 -0
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/rda_registry_ld4l_cache_validation.yml +310 -0
- data/lib/qa_server/configuration.rb +28 -24
- data/lib/qa_server/version.rb +1 -1
- data/qa_server.gemspec +2 -1
- data/spec/feature/accuracy_spec.rb +32 -0
- data/spec/i18n_spec.rb +36 -0
- data/spec/spec_helper.rb +4 -0
- metadata +46 -12
- data/app/cache_processors/qa_server/performance_daily_graph_cache.rb +0 -60
- data/app/cache_processors/qa_server/performance_hourly_graph_cache.rb +0 -65
- data/app/cache_processors/qa_server/performance_monthly_graph_cache.rb +0 -60
@@ -7,22 +7,22 @@ module QaServer
|
|
7
7
|
|
8
8
|
# Run connection tests
|
9
9
|
def run_tests(force: false)
|
10
|
-
Rails.cache.fetch(
|
10
|
+
Rails.cache.fetch(cache_key, expires_in: next_expiry, race_condition_ttl: 30.seconds, force: force) do
|
11
11
|
QaServer.config.monitor_logger.debug("(QaServer::ScenarioRunCache) - KICKING OFF TEST RUN (force: #{force})")
|
12
12
|
QaServer::MonitorTestsJob.perform_later
|
13
13
|
"Test run initiated at #{QaServer::TimeService.current_time}"
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
-
|
17
|
+
private
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
|
19
|
+
def cache_key
|
20
|
+
"QaServer::ScenarioRunCache.run_tests--latest_run_initiated"
|
21
|
+
end
|
22
22
|
|
23
|
-
|
24
|
-
|
25
|
-
|
23
|
+
def next_expiry
|
24
|
+
QaServer::CacheExpiryService.cache_expiry
|
25
|
+
end
|
26
26
|
end
|
27
27
|
end
|
28
28
|
end
|
@@ -37,15 +37,15 @@ module QaServer
|
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
40
|
-
|
40
|
+
private
|
41
41
|
|
42
|
-
|
43
|
-
|
44
|
-
|
42
|
+
def cache_key_for_run_failures(id)
|
43
|
+
"#{SCENARIO_RUN_FAILURE_DATA_CACHE_KEY}--#{id}{"
|
44
|
+
end
|
45
45
|
|
46
|
-
|
47
|
-
|
48
|
-
|
46
|
+
def next_expiry
|
47
|
+
QaServer::CacheExpiryService.cache_expiry
|
48
|
+
end
|
49
49
|
end
|
50
50
|
end
|
51
51
|
end
|
@@ -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
|
@@ -24,110 +24,110 @@ module QaServer
|
|
24
24
|
render 'index', status: :internal_server_error if latest_summary.failing_authority_count.positive?
|
25
25
|
end
|
26
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
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
27
|
+
private
|
28
|
+
|
29
|
+
def perform_updates
|
30
|
+
update_tests
|
31
|
+
update_historical_graph
|
32
|
+
update_performance_graphs
|
33
|
+
end
|
34
|
+
|
35
|
+
def update_tests
|
36
|
+
QaServer::ScenarioRunCache.run_tests(force: refresh_tests?)
|
37
|
+
end
|
38
|
+
|
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
|
+
|
44
|
+
# @returns [QaServer::ScenarioRunSummary] summary statistics on the latest run
|
45
|
+
def latest_summary
|
46
|
+
QaServer::ScenarioRunSummaryCache.summary_for_run(run: latest_test_run)
|
47
|
+
end
|
48
|
+
|
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
|
+
QaServer::ScenarioRunFailuresCache.failures_for_run(run: latest_test_run)
|
53
|
+
end
|
54
|
+
|
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
|
+
|
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
|
+
|
67
|
+
def performance_table_data
|
68
|
+
return {} unless QaServer.config.display_performance_datatable?
|
69
|
+
QaServer::PerformanceDatatableCache.data(force: refresh_performance_table?)
|
70
|
+
end
|
71
|
+
|
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
|
+
|
79
|
+
def refresh?
|
80
|
+
params.key?(:refresh) && validate_auth_reload_token("refresh status")
|
81
|
+
end
|
82
|
+
|
83
|
+
def refresh_all?
|
84
|
+
return false unless refresh?
|
85
|
+
params[:refresh].nil? || params[:refresh].casecmp?('all') # nil is for backward compatibility
|
86
|
+
end
|
87
|
+
|
88
|
+
def refresh_tests?
|
89
|
+
refresh? ? (refresh_all? || params[:refresh].casecmp?('tests')) : false
|
90
|
+
end
|
91
|
+
|
92
|
+
def refresh_history?
|
93
|
+
refresh? ? (refresh_all? || params[:refresh].casecmp?('history')) : false
|
94
|
+
end
|
95
|
+
|
96
|
+
def refresh_performance?
|
97
|
+
refresh? ? (refresh_all? || params[:refresh].casecmp?('performance')) : false
|
98
|
+
end
|
99
|
+
|
100
|
+
def refresh_performance_table?
|
101
|
+
refresh? ? (refresh_performance? || params[:refresh].casecmp?('performance_table')) : false
|
102
|
+
end
|
103
|
+
|
104
|
+
def refresh_performance_graphs?
|
105
|
+
refresh? ? (refresh_performance? || params[:refresh].casecmp?('performance_graphs')) : false
|
106
|
+
end
|
107
|
+
|
108
|
+
def commit_cache?
|
109
|
+
params.key?(:commit) && validate_auth_reload_token("commit cache")
|
110
|
+
end
|
111
|
+
|
112
|
+
def commit_cache
|
113
|
+
QaServer.config.performance_cache.write_all
|
114
|
+
end
|
115
|
+
|
116
|
+
def validate_auth_reload_token(action)
|
117
|
+
token = params.key?(:auth_token) ? params[:auth_token] : nil
|
118
|
+
valid = Qa.config.valid_authority_reload_token?(token)
|
119
|
+
return true if valid
|
120
|
+
msg = "Permission denied. Unable to #{action}."
|
121
|
+
logger.warn msg
|
122
|
+
flash.now[:error] = msg
|
123
|
+
false
|
124
|
+
end
|
125
|
+
|
126
|
+
def log_header
|
127
|
+
QaServer.config.monitor_logger.debug("------------------------------------ monitor status -----------------------------------")
|
128
|
+
QaServer.config.monitor_logger.debug("refresh_all? #{refresh_all?}, refresh_tests? #{refresh_tests?}, refresh_history? #{refresh_history?}")
|
129
|
+
QaServer.config.monitor_logger.debug("refresh_performance? #{refresh_performance?}, refresh_performance_table? #{refresh_performance_table?}, " \
|
130
|
+
"refresh_performance_graphs? #{refresh_performance_graphs?})")
|
131
|
+
end
|
132
132
|
end
|
133
133
|
end
|