class Grafana::GrafanaAnnotationsDatasource

Implements the datasource interface to grafana annotations.

Public Instance Methods

request(query_description) click to toggle source

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

{
  dashboardId: Dashboard ID as String or nil
  panelId:     Panel ID as String or nil
  columns:
  limit:
  alertId:
  userId:
  type:
  tags:
}

@see AbstractDatasource#request

# File lib/grafana/grafana_annotations_datasource.rb, line 19
def request(query_description)
  webrequest = query_description[:prepared_request]
  webrequest.relative_url = "/api/annotations#{url_parameters(query_description)}"

  result = webrequest.execute(query_description[:timeout])

  json = JSON.parse(result.body)

  content = []
  begin
    json.each { |item| content << item.fetch_values(*query_description[:raw_query]['columns'].split(',')) }
  rescue KeyError => e
    raise MalformedAttributeContentError.new(e.message, 'columns', query_description[:raw_query]['columns'])
  end

  result = {}
  result[:header] = [query_description[:raw_query]['columns'].split(',')]
  result[:content] = content

  result
end

Private Instance Methods

url_parameters(query_desc) click to toggle source
# File lib/grafana/grafana_annotations_datasource.rb, line 43
def url_parameters(query_desc)
  url_vars = {}
  url_vars.merge!(query_desc[:raw_query].select do |k, _v|
    k =~ /^(?:limit|alertId|dashboardId|panelId|userId|type|tags)/
  end)
  url_vars['from'] = query_desc[:from] if query_desc[:from]
  url_vars['to'] = query_desc[:to] if query_desc[:to]
  url_params = URI.encode_www_form(url_vars.map { |k, v| [k, v.to_s] })
  return '' if url_params.empty?

  "?#{url_params}"
end