qa_server 7.5.1 → 7.9.0

Sign up to get free protection for your applications and to get access to all the features.
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
-