class Grafana::ImageRenderingDatasource

Implements the interface to image rendering datasources.

Public Instance Methods

request(query_description) click to toggle source

:raw_query needs to contain a Hash with the following structure:

{
  panel: {Panel} which shall be rendered
}

@see AbstractDatasource#request

# File lib/grafana/image_rendering_datasource.rb, line 12
def request(query_description)
  webrequest = query_description[:prepared_request]
  webrequest.relative_url = query_description[:raw_query][:panel].render_url + url_params(query_description)
  webrequest.options.merge!({ accept: 'image/png' })

  result = webrequest.execute

  { header: ['image'], content: [result.body] }
end

Private Instance Methods

default_vars() click to toggle source
# File lib/grafana/image_rendering_datasource.rb, line 36
def default_vars
  {
    'fullscreen' => Variable.new(true),
    'theme' => Variable.new('light'),
    'timeout' => Variable.new(60)
  }
end
url_params(query_desc) click to toggle source
# File lib/grafana/image_rendering_datasource.rb, line 24
def url_params(query_desc)
  url_vars = query_desc[:variables].select { |k, _v| k =~ /^(?:timeout|height|width|theme|fullscreen|var-.+)$/ }
  url_vars = default_vars.merge(url_vars)
  url_vars['from'] = Variable.new(query_desc[:from])
  url_vars['to'] = Variable.new(query_desc[:to])
  result = URI.encode_www_form(url_vars.map { |k, v| [k, v.raw_value.to_s] })

  return '' if result.empty?

  "&#{result}"
end