qa_server 7.5.1 → 7.9.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 (59) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop_fixme.yml +3 -2
  3. data/.travis.yml +1 -1
  4. data/CHANGELOG.md +28 -0
  5. data/app/assets/stylesheets/qa_server/_check-status.scss +4 -0
  6. data/app/assets/stylesheets/qa_server/_monitor-status.scss +45 -0
  7. data/app/cache_processors/concerns/qa_server/cache_keys.rb +1 -0
  8. data/app/cache_processors/qa_server/scenario_history_cache.rb +19 -1
  9. data/app/controllers/qa_server/monitor_status_controller.rb +39 -9
  10. data/app/models/qa_server/scenario_run_history.rb +12 -3
  11. data/app/models/qa_server/search_scenario.rb +6 -0
  12. data/app/presenters/qa_server/check_status_presenter.rb +1 -1
  13. data/app/presenters/qa_server/monitor_status/current_status_presenter.rb +9 -8
  14. data/app/presenters/qa_server/monitor_status/history_presenter.rb +55 -4
  15. data/app/presenters/qa_server/monitor_status/history_up_down_presenter.rb +58 -0
  16. data/app/presenters/qa_server/monitor_status_presenter.rb +7 -2
  17. data/app/services/qa_server/history_up_down_service.rb +103 -0
  18. data/app/services/qa_server/time_service.rb +6 -0
  19. data/app/views/qa_server/check_status/index.html.erb +7 -6
  20. data/app/views/qa_server/monitor_status/_test_summary.html.erb +1 -1
  21. data/app/views/qa_server/monitor_status/_test_up_down_connection_history.html.erb +30 -0
  22. data/app/views/qa_server/monitor_status/index.html.erb +2 -1
  23. data/config/locales/qa_server.en.yml +8 -7
  24. data/lib/generators/qa_server/templates/config/authorities/linked_data/getty_tgn_ld4l_cache.json +24 -14
  25. data/lib/generators/qa_server/templates/config/authorities/linked_data/getty_ulan_ld4l_cache.json +104 -8
  26. data/lib/generators/qa_server/templates/config/authorities/linked_data/locnames_rwo2_ld4l_cache.json +4 -4
  27. data/lib/generators/qa_server/templates/config/authorities/linked_data/locnames_rwo3_ld4l_cache.json +4 -4
  28. data/lib/generators/qa_server/templates/config/authorities/linked_data/locnames_rwo_ld4l_cache.json +4 -4
  29. data/lib/generators/qa_server/templates/config/authorities/linked_data/locvocabs_ld4l_cache.json +1 -1
  30. data/lib/generators/qa_server/templates/config/authorities/linked_data/mesh_nlm_ld4l_cache.json +1 -0
  31. data/lib/generators/qa_server/templates/config/authorities/linked_data/oclcfast_direct.json +4 -0
  32. data/lib/generators/qa_server/templates/config/authorities/linked_data/oclcfast_ld4l_cache.json +1 -0
  33. data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/cerl_ld4l_cache_validation.yml +3 -3
  34. data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/geonames_ld4l_cache_validation.yml +2 -5
  35. data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/getty_aat_ld4l_cache_validation.yml +0 -3
  36. data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/getty_tgn_ld4l_cache_validation.yml +3 -7
  37. data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/getty_ulan_ld4l_cache_validation.yml +5 -5
  38. data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/locdemographics_ld4l_cache_validation.yml +0 -4
  39. data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/locgenres_ld4l_cache_validation.yml +0 -9
  40. data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/locnames_ld4l_cache_validation.yml +1 -7
  41. data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/locnames_rwo2_ld4l_cache_validation.yml +78 -0
  42. data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/locnames_rwo3_ld4l_cache_validation.yml +73 -0
  43. data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/locnames_rwo_ld4l_cache_validation.yml +11 -11
  44. data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/locsubjects_ld4l_cache_validation.yml +1 -3
  45. data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/locvocabs_ld4l_cache_validation.yml +246 -0
  46. data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/mesh_nlm_ld4l_cache_validation.yml +8 -5
  47. data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/oclcfast_direct_validation.yml +13 -7
  48. data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/oclcfast_ld4l_cache_validation.yml +19 -3
  49. data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/rda_registry_ld4l_cache_validation.yml +0 -3
  50. data/lib/generators/qa_server/templates/config/initializers/qa_server.rb +8 -0
  51. data/lib/qa_server/configuration.rb +14 -0
  52. data/lib/qa_server/version.rb +1 -1
  53. data/qa_server.gemspec +5 -5
  54. data/spec/feature/accuracy_spec.rb +1 -1
  55. data/spec/i18n_spec.rb +0 -1
  56. data/spec/lib/configuration_spec.rb +22 -0
  57. data/spec/presenters/qa_server/monitor_status/history_presenter_spec.rb +81 -0
  58. data/spec/services/qa_server/history_up_down_service_spec.rb +86 -0
  59. metadata +39 -12
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+ # This presenter class provides historical testing data needed by the view that monitors status of authorities.
3
+ module QaServer::MonitorStatus
4
+ class HistoryUpDownPresenter
5
+ attr_reader :historical_up_down_data
6
+
7
+ # @param parent [QaServer::MonitorStatusPresenter] parent presenter
8
+ # @param historical_up_down_data [Hash<Array>] recent connection status of queries (typically last 30 days)
9
+ # @example historical_up_down_data
10
+ # { 'AGROVOC' = [
11
+ # :FULLY_UP, # 0 - today
12
+ # :MOSTLY_UP, # 1 - yesterday
13
+ # :MOSTLY_UP, # 2 - two days ago
14
+ # :FULLY_UP, # 3 - three days ago
15
+ # :DOWN, # 4 - four days ago
16
+ # ... # etc.
17
+ # ],
18
+ # 'CERL' = [ ... ]
19
+ # }
20
+ def initialize(parent:, historical_up_down_data:)
21
+ @parent = parent
22
+ @historical_up_down_data = historical_up_down_data
23
+ end
24
+
25
+ # Return the last date of data represented in the history graph and data table
26
+ # @return [ActiveSupport::TimeWithZone] date time stamp
27
+ def up_down_start
28
+ QaServer::TimeService.pretty_date(up_down_end_dt - 29.days)
29
+ end
30
+
31
+ def up_down_end
32
+ QaServer::TimeService.pretty_date(up_down_end_dt)
33
+ end
34
+
35
+ def up_down_end_dt
36
+ @parent.last_updated_dt
37
+ end
38
+
39
+ # @param status [Symbol] :fully_up, :mostly_up, :timeouts, :barely_up, :down
40
+ # @param day [Integer] retrieve the status for this day
41
+ # @return [String] name of the css class for the status
42
+ def historical_up_down_status_class(status, day) # rubocop:disable Metrics/CyclomaticComplexity
43
+ case status[day]
44
+ when :no_date then 'connection-no-date'
45
+ when :fully_up then 'connection-fully-up'
46
+ when :mostly_up then 'connection-mostly-up'
47
+ when :timeouts then 'connection-timeouts'
48
+ when :barely_up then 'connection-barely-up'
49
+ when :down then 'connection-down'
50
+ end
51
+ end
52
+
53
+ # @return [Boolean] true if historical datatable should be visible; otherwise false
54
+ def display_historical_up_down?
55
+ QaServer.config.display_historical_datatable? && @historical_up_down_data.present?
56
+ end
57
+ end
58
+ end
@@ -5,12 +5,14 @@ module QaServer
5
5
  extend Forwardable
6
6
 
7
7
  # @param current_summary [ScenarioRunSummary] summary status of the latest run of test scenarios
8
- # @param current_data [Array<Hash>] current set of failures for the latest test run, if any
8
+ # @param current_failure_data [Array<Hash>] current set of failures for the latest test run, if any
9
9
  # @param historical_summary_data [Array<Hash>] summary of past failuring runs per authority to drive chart
10
+ # @param historical_up_down_data [Hash<Array>] status of queries for the last 30 days
10
11
  # @param performance_data [Hash<Hash>] performance datatable data
11
- def initialize(current_summary:, current_failure_data:, historical_summary_data:, performance_data:)
12
+ def initialize(current_summary:, current_failure_data:, historical_summary_data:, historical_up_down_data:, performance_data:)
12
13
  @current_status_presenter = QaServer::MonitorStatus::CurrentStatusPresenter.new(parent: self, current_summary: current_summary, current_failure_data: current_failure_data)
13
14
  @history_presenter = QaServer::MonitorStatus::HistoryPresenter.new(parent: self, historical_summary_data: historical_summary_data)
15
+ @history_up_down_presenter = QaServer::MonitorStatus::HistoryUpDownPresenter.new(parent: self, historical_up_down_data: historical_up_down_data)
14
16
  @performance_presenter = QaServer::MonitorStatus::PerformancePresenter.new(parent: self, performance_data: performance_data)
15
17
  end
16
18
 
@@ -23,6 +25,9 @@ module QaServer
23
25
  :percent_authority_failing, :percent_authority_failing_str, :failure_style_class, :passing_style_class,
24
26
  :display_history_details?, :display_historical_graph?, :display_historical_datatable?, :history_start, :history_end
25
27
 
28
+ def_delegators :@history_up_down_presenter, :historical_up_down_data, :display_historical_up_down?, :historical_up_down_status_class,
29
+ :up_down_start, :up_down_end
30
+
26
31
  def_delegators :@performance_presenter, :performance_data, :performance_data?, :display_performance?, :display_performance_graph?,
27
32
  :display_performance_datatable?, :performance_data_authority_name, :performance_for_day_graph, :performance_for_month_graph,
28
33
  :performance_for_year_graph, :datatable_search_stats, :datatable_fetch_stats, :datatable_all_actions_stats,
@@ -0,0 +1,103 @@
1
+ # frozen_string_literal: true
2
+ # This class determines the state (e.g. fully_up, mostly_up, barely_up, down)of an authority during the last 30 days.
3
+ module QaServer
4
+ class HistoryUpDownService
5
+ NO_DATA = :no_data
6
+ FULLY_UP = :fully_up
7
+ MOSTLY_UP = :mostly_up
8
+ EXCESSIVE_TIMEOUTS = :timeouts
9
+ BARELY_UP = :barely_up
10
+ DOWN = :down
11
+
12
+ MOSTLY_UP_THRESHOLD = QaServer.config.up_down_data_mostly_up_threshold
13
+ TIMEOUT_THRESHOLD = QaServer.config.up_down_data_timeouts_max_threshold
14
+
15
+ class_attribute :authority_lister, :scenario_history_class, :time_service
16
+ self.authority_lister = QaServer::AuthorityListerService
17
+ self.scenario_history_class = QaServer::ScenarioRunHistory
18
+ self.time_service = QaServer::TimeService
19
+
20
+ def last_30_days
21
+ data = {}
22
+ authorities_list.each { |authority| data[authority] = last_30_days_for(authority.to_s) }
23
+ data
24
+ end
25
+
26
+ private
27
+
28
+ # @returns [Hash <Array<Hash>>] data for an authority for each of the last 30 days
29
+ # @example
30
+ # { 'AGROVOC' = [
31
+ # :FULLY_UP, # 0 - today
32
+ # :MOSTLY_UP, # 1 - yesterday
33
+ # :MOSTLY_UP, # 2 - two days ago
34
+ # :FULLY_UP, # 3 - three days ago
35
+ # :DOWN, # 4 - four days ago
36
+ # ... # etc.
37
+ # ]
38
+ # }
39
+ def last_30_days_for(authority)
40
+ auth_data = []
41
+ 0.upto(29) { |offset| auth_data[offset] = day_status(authority, offset) }
42
+ auth_data
43
+ end
44
+
45
+ # @returns [Symbol] status for a given day for an authority
46
+ def day_status(authority, offset)
47
+ day = offset_day(offset)
48
+ good_count = count_good(authority, day)
49
+ unknown_count = count_unknown(authority, day)
50
+ bad_count = count_bad(authority, day)
51
+ timeout_count = count_timeouts(authority, day)
52
+ status_determination(good_count, unknown_count, bad_count, timeout_count)
53
+ end
54
+
55
+ def status_determination(good_count, unknown_count, bad_count, timeout_count) # rubocop:disable Metrics/CyclomaticComplexity
56
+ total_count = good_count + unknown_count + bad_count
57
+ return NO_DATA if total_count.zero?
58
+ return FULLY_UP if good_count == total_count
59
+ return DOWN if bad_count == total_count
60
+ return BARELY_UP if unknown_count == total_count
61
+ return EXCESSIVE_TIMEOUTS if (timeout_count.to_f / total_count) > TIMEOUT_THRESHOLD
62
+ return MOSTLY_UP if (bad_count.to_f / total_count) < (1 - MOSTLY_UP_THRESHOLD)
63
+ BARELY_UP
64
+ end
65
+
66
+ def authorities_list
67
+ @authorities_list ||= authority_lister.authorities_list
68
+ end
69
+
70
+ def offset_day(offset)
71
+ @today ||= time_service.current_time
72
+ time_service.pretty_query_date(@today - offset.days)
73
+ end
74
+
75
+ def count_good(authority, day)
76
+ scenario_history_class.where(authority_name: authority)
77
+ .where(date: day)
78
+ .where(status: :good)
79
+ .count(:id)
80
+ end
81
+
82
+ def count_unknown(authority, day)
83
+ scenario_history_class.where(authority_name: authority)
84
+ .where(date: day)
85
+ .where(status: :unknown)
86
+ .count(:id)
87
+ end
88
+
89
+ def count_bad(authority, day)
90
+ scenario_history_class.where(authority_name: authority)
91
+ .where(date: day)
92
+ .where(status: :bad)
93
+ .count(:id)
94
+ end
95
+
96
+ def count_timeouts(authority, day)
97
+ scenario_history_class.where(authority_name: authority)
98
+ .where(date: day)
99
+ .where('err_message LIKE ?', "%timeout%")
100
+ .count(:id)
101
+ end
102
+ end
103
+ end
@@ -24,6 +24,12 @@ module QaServer
24
24
  def pretty_date(dt)
25
25
  dt.in_time_zone(QaServer.config.preferred_time_zone_name).strftime("%m/%d/%Y")
26
26
  end
27
+
28
+ # @param dt [ActiveSupport::TimeWithZone] date time stamp
29
+ # @return [String] string version of date formatted with just date (e.g. "2020-02-01")
30
+ def pretty_query_date(dt)
31
+ dt.in_time_zone(QaServer.config.preferred_time_zone_name).strftime("%Y-%m-%d")
32
+ end
27
33
  end
28
34
  end
29
35
  end
@@ -44,8 +44,6 @@
44
44
  <select name="authority" id="authority" class="string optional form-control form-control" value="" aria-labelledby="authority" onchange="hide_data()">
45
45
  <option value=""><%= t('qa_server.check_status.select_authority') %></option>
46
46
  <option disabled>──────────</option>
47
- <option value="<%= @presenter.value_all_collections %>"><%= t('qa_server.check_status.show_all') %></option>
48
- <option disabled>──────────</option>
49
47
  <% @authorities_list.each do |auth_name| %>
50
48
  <option value="<%= auth_name %>"<%= " selected" if auth_name == selected_authority %>><%= auth_name.upcase %></option>
51
49
  <% end %>
@@ -77,7 +75,10 @@
77
75
  <% end %>
78
76
 
79
77
 
80
- <div id="status-loading-message" class="wait-message"><%= t('qa_server.check_status.wait_message') %></div>
78
+ <div id="status-loading-message" class="wait-message">
79
+ <%= t('qa_server.check_status.wait_message_ln1') %><br>
80
+ <%= t('qa_server.check_status.wait_message_ln2') %>
81
+ </div>
81
82
 
82
83
  <% if @presenter.connection_status_data? %>
83
84
  <div id="connection-status-section" class="status-section">
@@ -100,7 +101,7 @@
100
101
  </tr>
101
102
  <% end %>
102
103
  <tr>
103
- <td class="<%= @presenter.status_style_class(status[:status]) %>"><%= @presenter.status_label(status[:status]) %></td>
104
+ <td class="<%= @presenter.status_style_class(status) %>"><%= @presenter.status_label(status[:status]) %></td>
104
105
  <td><%= status[:subauthority_name] %></td>
105
106
  <td><%= status[:service] %></td>
106
107
  <td><%= status[:action] %></td>
@@ -137,8 +138,8 @@
137
138
  </tr>
138
139
  <% end %>
139
140
  <tr>
140
- <td class="position <%= @presenter.status_style_class(status[:status]) %>"><%= status[:expected] %></td>
141
- <td class="position <%= @presenter.status_style_class(status[:status]) %>"><%= status[:actual] %></td>
141
+ <td class="position <%= @presenter.status_style_class(status) %>"><%= status[:expected] %></td>
142
+ <td class="position <%= @presenter.status_style_class(status) %>"><%= status[:actual] %></td>
142
143
  <td><%= status[:request_data] %></td>
143
144
  <td><a href="<%= status[:target] %>"><%= status[:target] %></a></td>
144
145
  <td><%= status[:authority_name] %></td>
@@ -17,7 +17,7 @@
17
17
  <td class="status-neutral"><%= @presenter.tests_count %></td>
18
18
  </tr>
19
19
  </table>
20
- <p class="status-update-dtstamp"><%= t('qa_server.monitor_status.summary.last_updated', date: @presenter.last_updated) %></p>
20
+ <p class="status-update-dtstamp"><%= @presenter.last_updated %></p>
21
21
 
22
22
  <% if @presenter.failures?%>
23
23
  <div id="failures" class="status-section">
@@ -0,0 +1,30 @@
1
+ <% if @presenter.history? && @presenter.display_history_details?%>
2
+ <div id="availability-history" class="status-section">
3
+ <h3><%= t('qa_server.monitor_status.history.title') %></h3>
4
+ <% if @presenter.display_historical_graph? %>
5
+ <p class="status-update-dtstamp"><%= t('qa_server.monitor_status.history.range', from: @presenter.history_start, to: @presenter.history_end) %></p>
6
+ <%= image_tag(@presenter.historical_graph, alt: 'History Graph Unavailable') %>
7
+ <% end %>
8
+
9
+ <% if @presenter.display_historical_up_down? %>
10
+ <p class="status-update-dtstamp"><%= t('qa_server.monitor_status.history.range', from: @presenter.up_down_start, to: @presenter.up_down_end) %></p>
11
+ <table class="up-down-history">
12
+ <tr>
13
+ <th class="up-down-history"><%= t('qa_server.monitor_status.history.authority') %></th>
14
+ <% 0.upto(29) do %>
15
+ <th class='up-down-history'></th>
16
+ <% end %>
17
+ <td class='up-down-history'>Most Recent</td>
18
+ </tr>
19
+ <% @presenter.historical_up_down_data.each do |authority_name, status| %>
20
+ <tr>
21
+ <td class="connection-up-down"><%= authority_name %></td>
22
+ <% 29.downto(0) do |day| %>
23
+ <td class="connection-up-down <%= @presenter.historical_up_down_status_class(status, day) %>"></td>
24
+ <% end %>
25
+ </tr>
26
+ <% end %>
27
+ </table>
28
+ <% end %>
29
+ </div>
30
+ <% end %>
@@ -5,7 +5,8 @@
5
5
  <h2><%= t('qa_server.monitor_status.title') %></h2>
6
6
 
7
7
  <%= render 'test_summary' %>
8
- <%= render 'test_history' %>
8
+ <%= render 'test_up_down_connection_history' %>
9
+ <% # = render 'test_history' %>
9
10
  <%= render 'performance' %>
10
11
 
11
12
  </div>
@@ -25,12 +25,12 @@ en:
25
25
  check_status:
26
26
  title: Check Status
27
27
  select_authority: Select authority...
28
- show_all: ALL Authorities (SLOW)
29
28
  connections: Check Connection Status only
30
29
  accuracy: Check Accuracy only
31
30
  comparison: Compare Accuracy
32
31
  all_checks: Run all checks
33
- wait_message: "Please wait while the status is verified. This will be slow if you selected ALL Authorities."
32
+ wait_message_ln1: "Please wait while the status is verified."
33
+ wait_message_ln2: "This may be slow for large authorities or ones with a lot of tests."
34
34
  connection_checks: Connection Checks
35
35
  accuracy_checks: Accuracy Checks for Search Results
36
36
  comparison_checks: Comparison of Accuracy Checks
@@ -58,7 +58,11 @@ en:
58
58
  wait_message: Fetching term...
59
59
  term_results: Results
60
60
  monitor_status:
61
- title: Monitor Status
61
+ title: Monitor Status
62
+ permission_denied: 'Permission denied. Unable to %{action}.'
63
+ refreshing_tests: Refreshing tests.
64
+ refreshing_history: Refreshing connection history.
65
+ refreshing_performance: Refreshing performance metrics.
62
66
  summary:
63
67
  title: Latest Monitored Status
64
68
  summary_table: Summary
@@ -68,10 +72,10 @@ en:
68
72
  failing_tests: Failing Tests
69
73
  total_tests: TOTAL Tests
70
74
  last_updated: 'Status last updated %{date} ET'
75
+ no_data: 'No Data Available (Common Cause: first time tests are running)'
71
76
  failures:
72
77
  title: Failures During Latest Status Update
73
78
  status: Status
74
- authority: Authority
75
79
  subauthority: Subauthority
76
80
  service: Service
77
81
  action: Action
@@ -79,7 +83,6 @@ en:
79
83
  errmsg: Errors
80
84
  history:
81
85
  title: Authority Connection History
82
- since: 'Since %{date} ET'
83
86
  range: 'From %{from} to %{to}'
84
87
  authority: Authority
85
88
  days_failing: Days Failing
@@ -100,7 +103,6 @@ en:
100
103
  graph_load_time_ms: Graph Load Time (ms)
101
104
  normalization_time_ms: Normalization Time (ms)
102
105
  retrieve_time_ms: Retrieve Time (ms)
103
- full_request_time_ms: Full Request Time (ms)
104
106
  x_axis_hour: Hour
105
107
  x_axis_day: Day
106
108
  x_axis_month: Month
@@ -113,7 +115,6 @@ en:
113
115
  datatable_month_desc: 'Month'
114
116
  datatable_year_desc: 'Year'
115
117
  datarange: 'From %{from} to %{to}'
116
- authority: Authority
117
118
  average_times: Average (ms)
118
119
  fastest_times: 10th percentile (ms)
119
120
  slowest_times: 90th percentile (ms)
@@ -3,8 +3,8 @@
3
3
  "service_uri": "http://ld4l.org/ld4l_services/cache",
4
4
  "prefixes": {
5
5
  "getty": "http://vocab.getty.edu/ontology#",
6
- "vivo": "http://vivoweb.org/ontology/core#",
7
- "xl": "http://www.w3.org/2008/05/skos-xl#"
6
+ "skosxl": "http://www.w3.org/2008/05/skos-xl#",
7
+ "vivo": "http://vivoweb.org/ontology/core#"
8
8
  },
9
9
  "term": {
10
10
  "url": {
@@ -28,11 +28,9 @@
28
28
  "term_id": "URI",
29
29
  "results": {
30
30
  "id_ldpath": "dc:identifier ::xsd:string",
31
- "label_ldpath": "skos:prefLabel ::xsd:string",
32
- "altlabel_ldpath": "skos:altLabel ::xsd:string",
33
- "broader_ldpath": "skos:broader ::xsd:anyURI",
34
- "narrower_ldpath": "skos:narrower ::xsd:anyURI",
35
- "sameas_ldpath": "skos:exactMatch ::xsd:anyURI"
31
+ "label_ldpath": "^foaf:focus/skosxl:prefLabel/skosxl:literalForm :: xsd:string",
32
+ "altlabel_ldpath": "^foaf:focus/skosxl:altLabel/skosxl:literalForm :: xsd:string",
33
+ "broader_ldpath": "^foaf:focus/getty:broaderPreferred ::xsd:anyURI"
36
34
  }
37
35
  },
38
36
  "search": {
@@ -79,8 +77,7 @@
79
77
  },
80
78
  "total_count_ldpath": "vivo:count",
81
79
  "results": {
82
- "id_ldpath": "dc:identifier ::xsd:string",
83
- "label_ldpath": "skos:prefLabel ::xsd:string",
80
+ "label_ldpath": "^foaf:focus/skosxl:prefLabel/skosxl:literalForm :: xsd:string",
84
81
  "sort_ldpath": "vivo:rank ::xsd:string"
85
82
  },
86
83
  "context": {
@@ -88,28 +85,42 @@
88
85
  {
89
86
  "property_label_i18n": "qa.linked_data.authority.getty_tgn_ld4l_cache.preferred_label",
90
87
  "property_label_default": "Preferred label",
91
- "ldpath": "^foaf:focus/xl:prefLabel/xl:literalForm :: xsd:string",
88
+ "ldpath": "^foaf:focus/skosxl:prefLabel/skosxl:literalForm :: xsd:string",
92
89
  "selectable": true,
93
90
  "drillable": false
94
91
  },
95
92
  {
96
93
  "property_label_i18n": "qa.linked_data.authority.getty_tgn_ld4l_cache.variant_label",
97
94
  "property_label_default": "Variant Label",
98
- "ldpath": "^foaf:focus/xl:altLabel/xl:literalForm :: xsd:string",
95
+ "ldpath": "^foaf:focus/skosxl:altLabel/skosxl:literalForm :: xsd:string",
96
+ "selectable": false,
97
+ "drillable": false
98
+ },
99
+ {
100
+ "property_label_i18n": "qa.linked_data.authority.getty_tgn_ld4l_cache.parent_body",
101
+ "property_label_default": "Parent body",
102
+ "ldpath": "^foaf:focus/getty:parentString :: xsd:string",
103
+ "selectable": false,
104
+ "drillable": false
105
+ },
106
+ {
107
+ "property_label_i18n": "qa.linked_data.authority.getty_tgn_ld4l_cache.parent_body_abbreviation",
108
+ "property_label_default": "Parent body (abbreviation)",
109
+ "ldpath": "^foaf:focus/getty:parentStringAbbrev :: xsd:string",
99
110
  "selectable": false,
100
111
  "drillable": false
101
112
  },
102
113
  {
103
114
  "property_label_i18n": "qa.linked_data.authority.getty_tgn_ld4l_cache.place_type",
104
115
  "property_label_default": "Place type",
105
- "ldpath": "^foaf:focus/gvp:placeTypePreferred :: xsd:string",
116
+ "ldpath": "^foaf:focus/getty:placeTypePreferred :: xsd:string",
106
117
  "selectable": false,
107
118
  "drillable": false
108
119
  },
109
120
  {
110
121
  "property_label_i18n": "qa.linked_data.authority.getty_aat_ld4l_cache.broader",
111
122
  "property_label_default": "Broader",
112
- "ldpath": "^foaf:focus/gvp:broaderPreferred/xl:altLabel/xl:literalForm :: xsd:string",
123
+ "ldpath": "^foaf:focus/getty:broaderPreferred :: xsd:string",
113
124
  "selectable": false,
114
125
  "drillable": true,
115
126
  "expansion_label_ldpath": "skos:prefLabel ::xsd:string",
@@ -119,4 +130,3 @@
119
130
  }
120
131
  }
121
132
  }
122
-