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.
Files changed (113) hide show
  1. checksums.yaml +5 -5
  2. data/.rubocop_fixme.yml +3 -0
  3. data/.travis.yml +4 -5
  4. data/CHANGELOG.md +45 -0
  5. data/Rakefile +1 -1
  6. data/app/assets/stylesheets/qa_server/_check-status.scss +36 -0
  7. data/app/cache_processors/qa_server/cache_expiry_service.rb +8 -8
  8. data/app/cache_processors/qa_server/job_id_cache.rb +4 -4
  9. data/app/cache_processors/qa_server/performance_cache.rb +34 -34
  10. data/app/cache_processors/qa_server/performance_day_graph_cache.rb +7 -7
  11. data/app/cache_processors/qa_server/performance_month_graph_cache.rb +7 -7
  12. data/app/cache_processors/qa_server/performance_year_graph_cache.rb +7 -7
  13. data/app/cache_processors/qa_server/scenario_history_cache.rb +7 -7
  14. data/app/cache_processors/qa_server/scenario_history_graph_cache.rb +7 -7
  15. data/app/cache_processors/qa_server/scenario_run_cache.rb +7 -7
  16. data/app/cache_processors/qa_server/scenario_run_failures_cache.rb +7 -7
  17. data/app/cache_processors/qa_server/scenario_run_summary_cache.rb +7 -7
  18. data/app/controllers/concerns/qa_server/authority_validation_behavior.rb +49 -44
  19. data/app/controllers/qa_server/check_status_controller.rb +92 -22
  20. data/app/controllers/qa_server/fetch_controller.rb +36 -36
  21. data/app/controllers/qa_server/monitor_status_controller.rb +106 -84
  22. data/app/jobs/qa_server/history_graph_job.rb +10 -10
  23. data/app/jobs/qa_server/monitor_tests_job.rb +17 -17
  24. data/app/jobs/qa_server/performance_day_graph_job.rb +21 -21
  25. data/app/jobs/qa_server/performance_month_graph_job.rb +21 -21
  26. data/app/jobs/qa_server/performance_per_byte_job.rb +85 -0
  27. data/app/jobs/qa_server/performance_year_graph_job.rb +21 -21
  28. data/app/loggers/qa_server/scenario_logger.rb +74 -4
  29. data/app/models/concerns/qa_server/performance_history_data_keys.rb +8 -0
  30. data/app/models/qa_server/authority_scenario.rb +4 -4
  31. data/app/models/qa_server/authority_status.rb +2 -2
  32. data/app/models/qa_server/authority_status_failure.rb +1 -1
  33. data/app/models/qa_server/performance_history.rb +2 -2
  34. data/app/models/qa_server/scenario_run_history.rb +63 -54
  35. data/app/models/qa_server/scenario_run_registry.rb +2 -2
  36. data/app/models/qa_server/scenarios.rb +26 -26
  37. data/app/models/qa_server/search_scenario.rb +24 -13
  38. data/app/models/qa_server/term_scenario.rb +29 -29
  39. data/app/prepends/prepended_linked_data/find_term.rb +40 -40
  40. data/app/prepends/prepended_linked_data/search_query.rb +36 -36
  41. data/app/prepends/prepended_rdf/rdf_graph.rb +7 -7
  42. data/app/presenters/concerns/qa_server/monitor_status/performance_datatable_behavior.rb +32 -32
  43. data/app/presenters/concerns/qa_server/monitor_status/performance_graph_behavior.rb +64 -64
  44. data/app/presenters/qa_server/check_status_presenter.rb +63 -7
  45. data/app/presenters/qa_server/monitor_status/current_status_presenter.rb +9 -8
  46. data/app/presenters/qa_server/monitor_status/history_presenter.rb +5 -2
  47. data/app/services/concerns/qa_server/gruff_graph.rb +16 -16
  48. data/app/services/qa_server/authority_loader_service.rb +14 -14
  49. data/app/services/qa_server/authority_validator_service.rb +1 -0
  50. data/app/services/qa_server/database_migrator.rb +14 -14
  51. data/app/services/qa_server/history_graphing_service.rb +30 -30
  52. data/app/services/qa_server/performance_calculator_service.rb +80 -80
  53. data/app/services/qa_server/performance_datatable_service.rb +35 -35
  54. data/app/services/qa_server/performance_graph_data_service.rb +27 -27
  55. data/app/services/qa_server/performance_graphing_service.rb +55 -55
  56. data/app/services/qa_server/performance_per_byte_calculator_service.rb +88 -0
  57. data/app/services/qa_server/performance_per_byte_data_service.rb +41 -0
  58. data/app/services/qa_server/scenarios_loader_service.rb +1 -1
  59. data/app/services/qa_server/time_period_service.rb +21 -21
  60. data/app/validators/qa_server/scenario_validator.rb +99 -87
  61. data/app/validators/qa_server/search_scenario_validator.rb +67 -61
  62. data/app/validators/qa_server/term_scenario_validator.rb +20 -15
  63. data/app/views/qa_server/check_status/index.html.erb +120 -24
  64. data/app/views/qa_server/monitor_status/_test_summary.html.erb +1 -1
  65. data/config/i18n-tasks.yml +133 -0
  66. data/config/locales/qa_server.en.yml +21 -5
  67. data/lib/generators/qa_server/assets_generator.rb +4 -4
  68. data/lib/generators/qa_server/templates/config/authorities/linked_data/cerl_ld4l_cache.json +2 -2
  69. data/lib/generators/qa_server/templates/config/authorities/linked_data/getty_aat_ld4l_cache.json +62 -1
  70. data/lib/generators/qa_server/templates/config/authorities/linked_data/getty_tgn_ld4l_cache.json +45 -11
  71. data/lib/generators/qa_server/templates/config/authorities/linked_data/getty_ulan_ld4l_cache.json +104 -8
  72. data/lib/generators/qa_server/templates/config/authorities/linked_data/isni_ld4l_cache.json +90 -0
  73. data/lib/generators/qa_server/templates/config/authorities/linked_data/ligatus_ld4l_cache.json +133 -0
  74. data/lib/generators/qa_server/templates/config/authorities/linked_data/locnames_rwo2_ld4l_cache.json +248 -0
  75. data/lib/generators/qa_server/templates/config/authorities/linked_data/locnames_rwo3_ld4l_cache.json +248 -0
  76. data/lib/generators/qa_server/templates/config/authorities/linked_data/locnames_rwo_ld4l_cache.json +4 -4
  77. data/lib/generators/qa_server/templates/config/authorities/linked_data/locvocabs_ld4l_cache.json +117 -0
  78. data/lib/generators/qa_server/templates/config/authorities/linked_data/mesh_nlm_ld4l_cache.json +135 -3
  79. data/lib/generators/qa_server/templates/config/authorities/linked_data/oclcfast_direct.json +5 -0
  80. data/lib/generators/qa_server/templates/config/authorities/linked_data/oclcfast_ld4l_cache.json +2 -4
  81. data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/agrovoc_direct_validation.yml +31 -0
  82. data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/agrovoc_ld4l_cache_validation.yml +31 -0
  83. data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/cerl_ld4l_cache_validation.yml +24 -12
  84. data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/dbpedia_ld4l_cache_validation.yml +33 -0
  85. data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/geonames_direct_validation.yml +35 -0
  86. data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/geonames_ld4l_cache_validation.yml +55 -5
  87. data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/getty_aat_ld4l_cache_validation.yml +253 -0
  88. data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/getty_tgn_ld4l_cache_validation.yml +31 -1
  89. data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/getty_ulan_ld4l_cache_validation.yml +38 -1
  90. data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/isni_ld4l_cache_validation.yml +10 -0
  91. data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/ligatus_ld4l_cache_validation.yml +36 -0
  92. data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/locdemographics_ld4l_cache_validation.yml +69 -44
  93. data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/locgenres_ld4l_cache_validation.yml +22 -0
  94. data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/locnames_ld4l_cache_validation.yml +65 -0
  95. data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/locnames_rwo2_ld4l_cache_validation.yml +78 -0
  96. data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/locnames_rwo3_ld4l_cache_validation.yml +73 -0
  97. data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/locnames_rwo_ld4l_cache_validation.yml +71 -3
  98. data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/locperformance_ld4l_cache_validation.yml +6 -0
  99. data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/locsubjects_ld4l_cache_validation.yml +30 -0
  100. data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/locvocabs_ld4l_cache_validation.yml +430 -0
  101. data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/mesh_nlm_ld4l_cache_validation.yml +54 -1
  102. data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/nalt_ld4l_cache_validation.yml +37 -0
  103. data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/oclc_fast_validation.yml +71 -5
  104. data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/oclcfast_direct_validation.yml +73 -2
  105. data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/oclcfast_ld4l_cache_validation.yml +73 -0
  106. data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/rda_registry_ld4l_cache_validation.yml +307 -0
  107. data/lib/qa_server/configuration.rb +28 -24
  108. data/lib/qa_server/version.rb +1 -1
  109. data/qa_server.gemspec +6 -5
  110. data/spec/feature/accuracy_spec.rb +32 -0
  111. data/spec/i18n_spec.rb +35 -0
  112. data/spec/spec_helper.rb +4 -0
  113. metadata +66 -17
@@ -26,15 +26,15 @@ module QaServer
26
26
  end
27
27
  end
28
28
 
29
- private
29
+ private
30
30
 
31
- def cache_key_for_run_summary(id)
32
- "#{SCENARIO_RUN_SUMMARY_DATA_CACHE_KEY}--#{id}"
33
- end
31
+ def cache_key_for_run_summary(id)
32
+ "#{SCENARIO_RUN_SUMMARY_DATA_CACHE_KEY}--#{id}"
33
+ end
34
34
 
35
- def next_expiry
36
- QaServer::CacheExpiryService.cache_expiry
37
- end
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
- private
22
+ private
22
23
 
23
- def status_log
24
- @status_log ||= logger_class.new
25
- end
24
+ def status_log
25
+ @status_log ||= logger_class.new
26
+ end
26
27
 
27
- def status_data_from_log
28
- @status_data = status_log.to_a
29
- end
28
+ def status_data_from_log
29
+ @status_data = status_log.to_a
30
+ end
30
31
 
31
- def authorities_list
32
- @authorities_list ||= lister_class.authorities_list
33
- end
32
+ def authorities_list
33
+ @authorities_list ||= lister_class.authorities_list
34
+ end
34
35
 
35
- def validate(authorities_list, validation_type = validator_class::DEFAULT_VALIDATION_TYPE)
36
- return if authorities_list.blank?
37
- authorities_list.each { |auth_name| validate_authority(auth_name, validation_type) }
38
- end
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
- def validate_authority(auth_name, validation_type)
41
- validator_class.run(authority_name: auth_name, validation_type: validation_type, status_log: status_log)
42
- end
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
- def list(authorities_list)
45
- return if authorities_list.blank?
46
- authorities_list.each { |auth_name| list_scenarios(auth_name) }
47
- end
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
- def list_scenarios(auth_name)
50
- lister_class.scenarios_list(authority_name: auth_name, status_log: status_log)
51
- end
52
+ def list_scenarios(auth_name)
53
+ lister_class.scenarios_list(authority_name: auth_name, status_log: status_log)
54
+ end
52
55
 
53
- def validating_connections?
54
- return true if validation_type == VALIDATE_CONNECTIONS || validation_type == ALL_VALIDATIONS
55
- false
56
- end
56
+ def validating_accuracy?
57
+ return true if validation_type == validator_class::VALIDATE_ACCURACY
58
+ false
59
+ end
57
60
 
58
- def validating_accuracy?
59
- return true if validation_type == VALIDATE_ACCURACY || validation_type == ALL_VALIDATIONS
60
- false
61
- end
61
+ def comparing_accuracy?
62
+ return true if validation_type == validator_class::VALIDATE_ACCURACY_COMPARISON
63
+ false
64
+ end
62
65
 
63
- def validation_type
64
- return @validation_type if @validation_type.present?
65
- case params[VALIDATION_TYPE_PARAM]
66
- when ALL_VALIDATIONS
67
- validator_class::ALL_VALIDATIONS
68
- when VALIDATE_CONNECTIONS
69
- validator_class::VALIDATE_CONNECTIONS
70
- when VALIDATE_ACCURACY
71
- validator_class::VALIDATE_ACCURACY
72
- else
73
- validator_class::DEFAULT_VALIDATION_TYPE
74
- end
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
- private
25
+ private
24
26
 
25
- def connection_status_data_from_log
26
- status_log.filter(type: validator_class::VALIDATE_CONNECTIONS)
27
- end
27
+ def connection_status_data_from_log
28
+ status_log.filter(type: validator_class::VALIDATE_CONNECTIONS)
29
+ end
28
30
 
29
- def accuracy_status_data_from_log
30
- status_log.filter(type: validator_class::VALIDATE_ACCURACY)
31
- end
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
- def authorities_to_validate
34
- return [] unless authority_name.present?
35
- authority_name == ALL_AUTHORITIES ? authorities_list : [authority_name]
36
- end
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
- def authority_name
39
- return @authority_name if @authority_name.present?
40
- @authority_name = params.key?(:authority) ? params[:authority].downcase : nil
41
- end
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
- def log_header
44
- QaServer.config.performance_cache_logger.debug("---------------------- check status (max_cache_size = #{max_cache_size}) ----------------------")
45
- QaServer.config.performance_cache_logger.debug("(#{self.class}##{__method__}) check status page request (authority_name # #{authority_name})")
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
- def max_cache_size
49
- ActiveSupport::NumberHelper.number_to_human_size(QaServer.config.max_performance_cache_size)
50
- end
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
- 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
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.failing_authority_count.positive?
24
+ render 'index', status: :internal_server_error if latest_summary&.failing_authority_count&.positive?
25
25
  end
26
26
 
27
- private
27
+ private
28
28
 
29
- def perform_updates
30
- update_tests
31
- update_historical_graph
32
- update_performance_graphs
33
- end
29
+ def perform_updates
30
+ update_tests
31
+ update_historical_graph
32
+ update_performance_graphs
33
+ end
34
34
 
35
- def update_tests
36
- QaServer::ScenarioRunCache.run_tests(force: refresh_tests?)
37
- end
35
+ def update_tests
36
+ QaServer::ScenarioRunCache.run_tests(force: refresh_tests?)
37
+ end
38
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
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
- # @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
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
- # @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
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
- # 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
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
- 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
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
- def performance_table_data
68
- return {} unless QaServer.config.display_performance_datatable?
69
- QaServer::PerformanceDatatableCache.data(force: refresh_performance_table?)
70
- end
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
- 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
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
- def refresh?
80
- params.key?(:refresh) && validate_auth_reload_token("refresh status")
81
- end
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
- def refresh_all?
84
- return false unless refresh?
85
- params[:refresh].nil? || params[:refresh].casecmp?('all') # nil is for backward compatibility
86
- end
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
- def refresh_tests?
89
- refresh? ? (refresh_all? || params[:refresh].casecmp?('tests')) : false
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
- def refresh_history?
93
- refresh? ? (refresh_all? || params[:refresh].casecmp?('history')) : false
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
- def refresh_performance?
97
- refresh? ? (refresh_all? || params[:refresh].casecmp?('performance')) : false
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
- def refresh_performance_table?
101
- refresh? ? (refresh_performance? || params[:refresh].casecmp?('performance_table')) : false
102
- end
122
+ def refresh_performance_table?
123
+ refresh? ? (refresh_performance? || params[:refresh].casecmp?('performance_table')) : false
124
+ end
103
125
 
104
- def refresh_performance_graphs?
105
- refresh? ? (refresh_performance? || params[:refresh].casecmp?('performance_graphs')) : false
106
- end
126
+ def refresh_performance_graphs?
127
+ refresh? ? (refresh_performance? || params[:refresh].casecmp?('performance_graphs')) : false
128
+ end
107
129
 
108
- def commit_cache?
109
- params.key?(:commit) && validate_auth_reload_token("commit cache")
110
- end
130
+ def commit_cache?
131
+ params.key?(:commit) && validate_auth_reload_token("commit cache")
132
+ end
111
133
 
112
- def commit_cache
113
- QaServer.config.performance_cache.write_all
114
- end
134
+ def commit_cache
135
+ QaServer.config.performance_cache.write_all
136
+ end
115
137
 
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
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
- 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
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