Class: Overseer::TestingControl::Rails::SinksController

Inherits:
ApplicationController show all
Defined in:
app/controllers/overseer/testing_control/rails/sinks_controller.rb

Instance Method Summary collapse

Instance Method Details

#query ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'app/controllers/overseer/testing_control/rails/sinks_controller.rb', line 7

def query
  document = request_document(:sink_query_request)
  data = document.fetch('data')
  id, version = capability_reference(data)
  sink = find_sink(id, version)
  validate_capability_input!(
    sink.query_input_schema,
    data.fetch('input'),
    label: "sink #{id}@#{version} query input"
  )
  limit = data.fetch('limit', configuration.limits.fetch('maxSinkRecordsPerQuery'))
  if limit > configuration.limits.fetch('maxSinkRecordsPerQuery')
    raise ProtocolFailure.new(
      status: :unprocessable_entity,
      code: 'limit-exceeded',
      title: 'Sink query limit exceeded',
      detail: 'The sink query limit exceeds the advertised maximum.'
    )
  end
  records, cursor = query_store(
    capability: id,
    version:,
    run_id: @identity.fetch(:run_id),
    input: data.fetch('input'),
    filter: data.fetch('filter'),
    cursor: data['cursor'],
    limit:
  )
  render_data(
    :sink_query_response,
    {
      'capability' => { 'id' => id, 'version' => version },
      'records' => records,
      **(cursor ? { 'nextCursor' => cursor } : {})
    }
  )
end