qa_server 5.2.1 → 5.3.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/.travis.yml +1 -1
- data/CHANGELOG.md +8 -0
- data/app/models/qa_server/performance_cache.rb +2 -2
- data/app/prepends/prepended_linked_data/find_term.rb +23 -12
- data/app/prepends/prepended_linked_data/search_query.rb +17 -12
- data/lib/qa_server.rb +12 -0
- data/lib/qa_server/version.rb +1 -1
- data/qa_server.gemspec +2 -1
- data/spec/lib/qa_server_spec.rb +44 -0
- metadata +18 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: c2905e19c557faccf19c7dd83f587f06ceacb2c2
|
|
4
|
+
data.tar.gz: db5ce48e087afee79569c080898a612f814f5250
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ac00bc271dd281d3d7e42c5b926cc292210ed200566c9083fab772fbd1e2fd96f0c76f12d9b27536e91c0474d62cdceeca5df0f11ec893776bb7ac86c18482e9
|
|
7
|
+
data.tar.gz: c56721d0a15ddc0d683d9b758a621ae4ae9f26a1b1685d97d22d468332caa9370bb6db77376415abcf1dfea53a1437f18bfd6832bc40da3c6c5226fcba628b49
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
### 5.3.0 (2019-12-19)
|
|
2
|
+
|
|
3
|
+
* optionally log browser and platform user agent info
|
|
4
|
+
* update to qa 5.3
|
|
5
|
+
* add a request id to the search and find request headers
|
|
6
|
+
* log exception for graph load failures
|
|
7
|
+
* optionally include IP info at start of search/find linked data requests
|
|
8
|
+
|
|
1
9
|
### 5.2.1 (2019-12-13)
|
|
2
10
|
|
|
3
11
|
* fix - add defaults to the initializer generator template for new configs
|
|
@@ -41,8 +41,8 @@ module QaServer
|
|
|
41
41
|
end
|
|
42
42
|
|
|
43
43
|
def log(id:)
|
|
44
|
-
Rails.logger.
|
|
45
|
-
Rails.logger.
|
|
44
|
+
Rails.logger.debug("*** performance data for id: #{id} ***")
|
|
45
|
+
Rails.logger.debug(@cache[id].to_yaml)
|
|
46
46
|
end
|
|
47
47
|
|
|
48
48
|
private
|
|
@@ -2,30 +2,35 @@
|
|
|
2
2
|
module PrependedLinkedData::FindTerm
|
|
3
3
|
# Override Qa::Authorities::LinkedData::FindTerm#find method
|
|
4
4
|
# @return [Hash] single term results in requested format
|
|
5
|
-
def find(id, request_header: {}, language: nil, replacements: {}, subauth: nil, format: nil, performance_data: false) # rubocop:disable Metrics/ParameterLists
|
|
5
|
+
def find(id, request_header: {}, language: nil, replacements: {}, subauth: nil, format: nil, performance_data: false) # rubocop:disable Metrics/ParameterLists
|
|
6
6
|
return super if QaServer.config.suppress_performance_gathering
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
request_header = build_request_header(language: language, replacements: replacements, subauth: subauth, format: format, performance_data: performance_data) if request_header.empty?
|
|
10
|
-
saved_performance_data = performance_data || request_header[:performance_data]
|
|
11
|
-
request_header[:performance_data] = true
|
|
12
|
-
|
|
7
|
+
request_header = setup_find(request_header: request_header, language: language, replacements: replacements, subauth: subauth,
|
|
8
|
+
format: format, performance_data: performance_data)
|
|
13
9
|
@phid = QaServer.config.performance_cache.new_entry(authority: authority_name, action: 'fetch')
|
|
14
10
|
begin
|
|
15
11
|
full_results = super
|
|
16
|
-
update_performance_history_record(full_results
|
|
12
|
+
update_performance_history_record(full_results)
|
|
17
13
|
rescue Exception => e # rubocop:disable Lint/RescueException
|
|
18
14
|
QaServer.config.performance_cache.destroy(@phid)
|
|
19
15
|
raise e
|
|
20
16
|
end
|
|
21
|
-
|
|
17
|
+
requested_results(full_results)
|
|
22
18
|
end
|
|
23
19
|
|
|
24
20
|
private
|
|
25
21
|
|
|
26
|
-
def
|
|
22
|
+
def setup_find(request_header: {}, language: nil, replacements: {}, subauth: nil, format: nil, performance_data: false) # rubocop:disable Metrics/ParameterLists
|
|
23
|
+
QaServer.log_agent_info(request_header[:request])
|
|
24
|
+
@start_time_s = QaServer.current_time_s
|
|
25
|
+
request_header = build_request_header(language: language, replacements: replacements, subauth: subauth, format: format, performance_data: performance_data) if request_header.empty?
|
|
26
|
+
@saved_performance_data = performance_data || request_header[:performance_data]
|
|
27
|
+
request_header[:performance_data] = true
|
|
28
|
+
request_header
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def update_performance_history_record(full_results)
|
|
27
32
|
return QaServer.config.performance_cache.destroy(@phid) unless full_results.is_a?(Hash) && full_results.key?(:performance)
|
|
28
|
-
updates = { action_time_ms: (QaServer.current_time_s - start_time_s) * 1000,
|
|
33
|
+
updates = { action_time_ms: (QaServer.current_time_s - @start_time_s) * 1000,
|
|
29
34
|
size_bytes: full_results[:performance][:fetched_bytes],
|
|
30
35
|
retrieve_plus_graph_load_time_ms: full_results[:performance][:fetch_time_s] * 1000,
|
|
31
36
|
normalization_time_ms: full_results[:performance][:normalization_time_s] * 1000 }
|
|
@@ -51,7 +56,13 @@ module PrependedLinkedData::FindTerm
|
|
|
51
56
|
# Temporary override to fix bug. Remove when QA Issue #271 is fixed and a new release is cut
|
|
52
57
|
def performance_data?
|
|
53
58
|
return super if QaServer.config.suppress_performance_gathering
|
|
54
|
-
|
|
55
59
|
@performance_data == true
|
|
56
60
|
end
|
|
61
|
+
|
|
62
|
+
def requested_results(full_results)
|
|
63
|
+
return full_results if @saved_performance_data || !full_results.is_a?(Hash)
|
|
64
|
+
return full_results[:results] unless full_results.key? :response_header
|
|
65
|
+
full_results.delete(:performance)
|
|
66
|
+
full_results
|
|
67
|
+
end
|
|
57
68
|
end
|
|
@@ -4,28 +4,33 @@ module PrependedLinkedData::SearchQuery
|
|
|
4
4
|
# @return [String] json results for search query
|
|
5
5
|
def search(query, request_header: {}, language: nil, replacements: {}, subauth: nil, context: false, performance_data: false) # rubocop:disable Metrics/ParameterLists
|
|
6
6
|
return super if QaServer.config.suppress_performance_gathering
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
request_header = build_request_header(language: language, replacements: replacements, subauth: subauth, context: context, performance_data: performance_data) if request_header.empty?
|
|
10
|
-
saved_performance_data = performance_data || request_header[:performance_data]
|
|
11
|
-
request_header[:performance_data] = true
|
|
12
|
-
|
|
7
|
+
request_header = setup_search(request_header: request_header, language: language, replacements: replacements, subauth: subauth,
|
|
8
|
+
context: context, performance_data: performance_data)
|
|
13
9
|
@phid = QaServer.config.performance_cache.new_entry(authority: authority_name, action: 'search')
|
|
14
10
|
begin
|
|
15
11
|
full_results = super
|
|
16
|
-
update_performance_history_record(full_results
|
|
12
|
+
update_performance_history_record(full_results)
|
|
17
13
|
rescue Exception => e # rubocop:disable Lint/RescueException
|
|
18
14
|
QaServer.config.performance_cache.destroy(@phid)
|
|
19
15
|
raise e
|
|
20
16
|
end
|
|
21
|
-
requested_results(full_results
|
|
17
|
+
requested_results(full_results)
|
|
22
18
|
end
|
|
23
19
|
|
|
24
20
|
private
|
|
25
21
|
|
|
26
|
-
def
|
|
22
|
+
def setup_search(request_header: {}, language: nil, replacements: {}, subauth: nil, context: false, performance_data: false) # rubocop:disable Metrics/ParameterLists
|
|
23
|
+
QaServer.log_agent_info(request_header[:request])
|
|
24
|
+
@start_time_s = QaServer.current_time_s
|
|
25
|
+
request_header = build_request_header(language: language, replacements: replacements, subauth: subauth, context: context, performance_data: performance_data) if request_header.empty?
|
|
26
|
+
@saved_performance_data = performance_data || request_header[:performance_data]
|
|
27
|
+
request_header[:performance_data] = true
|
|
28
|
+
request_header
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def update_performance_history_record(full_results)
|
|
27
32
|
return QaServer.config.performance_cache.destroy(@phid) unless full_results.is_a?(Hash) && full_results.key?(:performance)
|
|
28
|
-
updates = { action_time_ms: (QaServer.current_time_s - start_time_s) * 1000,
|
|
33
|
+
updates = { action_time_ms: (QaServer.current_time_s - @start_time_s) * 1000,
|
|
29
34
|
size_bytes: full_results[:performance][:fetched_bytes],
|
|
30
35
|
retrieve_plus_graph_load_time_ms: full_results[:performance][:fetch_time_s] * 1000,
|
|
31
36
|
normalization_time_ms: full_results[:performance][:normalization_time_s] * 1000 }
|
|
@@ -48,8 +53,8 @@ module PrependedLinkedData::SearchQuery
|
|
|
48
53
|
Rails.logger.info("Time to receive data from authority: #{access_time_s}s")
|
|
49
54
|
end
|
|
50
55
|
|
|
51
|
-
def requested_results(full_results
|
|
52
|
-
return full_results if saved_performance_data
|
|
56
|
+
def requested_results(full_results)
|
|
57
|
+
return full_results if @saved_performance_data
|
|
53
58
|
return full_results[:results] unless full_results.key? :response_header
|
|
54
59
|
full_results.delete(:performance)
|
|
55
60
|
full_results
|
data/lib/qa_server.rb
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
require 'qa_server/engine'
|
|
3
3
|
require 'qa_server/version'
|
|
4
|
+
require 'user_agent'
|
|
4
5
|
|
|
5
6
|
module QaServer
|
|
6
7
|
extend ActiveSupport::Autoload
|
|
@@ -34,4 +35,15 @@ module QaServer
|
|
|
34
35
|
offset = QaServer.config.hour_offset_to_run_monitoring_tests
|
|
35
36
|
(current_time - offset.hours).beginning_of_day + offset.hours
|
|
36
37
|
end
|
|
38
|
+
|
|
39
|
+
def self.log_agent_info(request)
|
|
40
|
+
return if !Qa.config.respond_to?(:suppress_ip_data_from_log) || Qa.config.suppress_ip_data_from_log
|
|
41
|
+
user_agent = request.respond_to?(:user_agent) && !request.user_agent.nil? ? ::UserAgent.parse(request.user_agent) : nil
|
|
42
|
+
return Rails.logger.info("{browser: UNKNOWN, browser_version: UNKNOWN, platform: UNKNOWN, os: UNKNOWN}") if user_agent.nil?
|
|
43
|
+
browser = user_agent.browser
|
|
44
|
+
browser_version = user_agent.version
|
|
45
|
+
platform = user_agent.platform
|
|
46
|
+
os = user_agent.os
|
|
47
|
+
Rails.logger.info("{browser: #{browser}, browser_version: #{browser_version}, platform: #{platform}, os: #{os}}")
|
|
48
|
+
end
|
|
37
49
|
end
|
data/lib/qa_server/version.rb
CHANGED
data/qa_server.gemspec
CHANGED
|
@@ -23,9 +23,10 @@ Gem::Specification.new do |spec|
|
|
|
23
23
|
# minor version releases can include breaking changes; see
|
|
24
24
|
# http://guides.rubyonrails.org/maintenance_policy.html
|
|
25
25
|
spec.add_dependency 'rails', '~> 5.0' # Keep in sync with version supported by Hyrax
|
|
26
|
+
spec.add_dependency 'useragent'
|
|
26
27
|
|
|
27
28
|
# Required gems for QA and linked data access
|
|
28
|
-
spec.add_development_dependency 'qa', '~> 5.
|
|
29
|
+
spec.add_development_dependency 'qa', '~> 5.3'
|
|
29
30
|
spec.add_development_dependency 'linkeddata'
|
|
30
31
|
|
|
31
32
|
# Produces dashboard charts on monitor status page
|
data/spec/lib/qa_server_spec.rb
CHANGED
|
@@ -43,5 +43,49 @@ RSpec.describe QaServer do
|
|
|
43
43
|
end
|
|
44
44
|
end
|
|
45
45
|
end
|
|
46
|
+
|
|
47
|
+
# rubocop:disable RSpec/MessageSpies
|
|
48
|
+
describe '.log_agent_info' do
|
|
49
|
+
let(:request) { double }
|
|
50
|
+
|
|
51
|
+
context 'when ip logging is suppressed' do
|
|
52
|
+
before { allow(Qa).to receive_message_chain(:config, :suppress_ip_data_from_log).and_return(true) }
|
|
53
|
+
|
|
54
|
+
it 'suppresses agent logging' do
|
|
55
|
+
expect(Rails.logger).not_to receive(:info).with(/^\{browser: /)
|
|
56
|
+
described_class.log_agent_info(request)
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
context 'when ip logging is not suppressed' do
|
|
61
|
+
before { allow(Qa).to receive_message_chain(:config, :suppress_ip_data_from_log).and_return(false) }
|
|
62
|
+
|
|
63
|
+
context 'and user_agent is nil' do
|
|
64
|
+
before { allow(request).to receive(:user_agent).and_return(nil) }
|
|
65
|
+
it 'logs agent info as UNKNOWN' do
|
|
66
|
+
expect(Rails.logger).to receive(:info).with("{browser: UNKNOWN, browser_version: UNKNOWN, platform: UNKNOWN, os: UNKNOWN}")
|
|
67
|
+
described_class.log_agent_info(request)
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
context 'and user_agent has data' do
|
|
72
|
+
# rubocop:disable RSpec/AnyInstance
|
|
73
|
+
before do
|
|
74
|
+
allow(request).to receive(:user_agent).and_return("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36")
|
|
75
|
+
allow_any_instance_of(UserAgent::Browsers::Chrome).to receive(:browser).and_return("Chrome")
|
|
76
|
+
allow_any_instance_of(UserAgent::Browsers::Chrome).to receive(:version).and_return("v1.1")
|
|
77
|
+
allow_any_instance_of(UserAgent::Browsers::Chrome).to receive(:platform).and_return("Mac")
|
|
78
|
+
allow_any_instance_of(UserAgent::Browsers::Chrome).to receive(:os).and_return("10.14")
|
|
79
|
+
end
|
|
80
|
+
# rubocop:enable RSpec/AnyInstance
|
|
81
|
+
|
|
82
|
+
it 'logs agent info as UNKNOWN' do
|
|
83
|
+
expect(Rails.logger).to receive(:info).with("{browser: Chrome, browser_version: v1.1, platform: Mac, os: 10.14}")
|
|
84
|
+
described_class.log_agent_info(request)
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
# rubocop:enable RSpec/MessageSpies
|
|
46
90
|
# rubocop:enable RSpec/MessageChain
|
|
47
91
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: qa_server
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 5.
|
|
4
|
+
version: 5.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- E. Lynette Rayle
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2019-12-
|
|
11
|
+
date: 2019-12-19 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rails
|
|
@@ -24,20 +24,34 @@ dependencies:
|
|
|
24
24
|
- - "~>"
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
26
|
version: '5.0'
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: useragent
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - ">="
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '0'
|
|
34
|
+
type: :runtime
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - ">="
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '0'
|
|
27
41
|
- !ruby/object:Gem::Dependency
|
|
28
42
|
name: qa
|
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
|
30
44
|
requirements:
|
|
31
45
|
- - "~>"
|
|
32
46
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: '5.
|
|
47
|
+
version: '5.3'
|
|
34
48
|
type: :development
|
|
35
49
|
prerelease: false
|
|
36
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
51
|
requirements:
|
|
38
52
|
- - "~>"
|
|
39
53
|
- !ruby/object:Gem::Version
|
|
40
|
-
version: '5.
|
|
54
|
+
version: '5.3'
|
|
41
55
|
- !ruby/object:Gem::Dependency
|
|
42
56
|
name: linkeddata
|
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|