Class: GrafanaReporter::Asciidoctor::SqlTableIncludeProcessor
- Inherits:
-
Asciidoctor::Extensions::IncludeProcessor
- Object
- Asciidoctor::Extensions::IncludeProcessor
- GrafanaReporter::Asciidoctor::SqlTableIncludeProcessor
- Includes:
- ProcessorMixin
- Defined in:
- lib/grafana_reporter/asciidoctor/sql_table_include_processor.rb
Overview
Implements the hook
include::grafana_sql_table:<datasource_id>[<options>]
Returns the results of the SQL query as a asciidoctor table.
Used document parameters
grafana_default_instance
- name of grafana instance, ‘default’ if not specified
from
- ‘from’ time for the sql query
to
- ‘to’ time for the sql query
All other variables starting with var-
will be used to replace grafana templating strings in the given SQL query.
Supported options
sql
- sql statement (mandatory)
instance
- name of grafana instance, ‘default’ if not specified
from
- ‘from’ time for the sql query
to
- ‘to’ time for the sql query
format
- see GrafanaReporter::AbstractQuery#format_columns
replace_values
- see GrafanaReporter::AbstractQuery#replace_values
filter_columns
- see GrafanaReporter::AbstractQuery#filter_columns
Instance Method Summary collapse
- #build_demo_entry(panel) ⇒ Object
-
#handles?(target) ⇒ Boolean
:nodoc:.
-
#process(doc, reader, target, attrs) ⇒ Object
:nodoc:.
Methods included from ProcessorMixin
#build_attribute_hash, #current_report
Instance Method Details
#build_demo_entry(panel) ⇒ Object
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/grafana_reporter/asciidoctor/sql_table_include_processor.rb', line 75 def build_demo_entry(panel) return nil unless panel return nil unless panel.model['targets'] ref_id = nil panel.model['targets'].each do |item| if !item['hide'] && !panel.query(item['refId']).to_s.empty? ref_id = item['refId'] break end end return nil unless ref_id # FIXME this filters out e.g. prometheus in demo reports, as the query method returns a Hash instead of a string return nil unless panel.query(ref_id).is_a?(String) "|===\ninclude::grafana_sql_table:#{panel.dashboard.grafana.datasource_by_model_entry(panel.model['datasource']).id}"\ "[sql=\"#{panel.query(ref_id).gsub(/"/, '\"').gsub("\r\n", ' ').gsub("\n", ' ').gsub(/\\/, '\\\\')}\",filter_columns=\"time\","\ "dashboard=\"#{panel.dashboard.id}\",from=\"now-1h\",to=\"now\"]\n|===" end |
#handles?(target) ⇒ Boolean
:nodoc:
38 39 40 |
# File 'lib/grafana_reporter/asciidoctor/sql_table_include_processor.rb', line 38 def handles?(target) target.start_with? 'grafana_sql_table:' end |
#process(doc, reader, target, attrs) ⇒ Object
:nodoc:
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/grafana_reporter/asciidoctor/sql_table_include_processor.rb', line 43 def process(doc, reader, target, attrs) return if @report.cancel @report.next_step instance = attrs['instance'] || doc.attr('grafana_default_instance') || 'default' attrs['result_type'] = 'sql_table' @report.logger.debug("Processing SqlTableIncludeProcessor (instance: #{instance},"\ " datasource: #{target.split(':')[1]}, sql: #{attrs['sql']})") begin # catch properly if datasource could not be identified vars = { 'table_formatter' => 'adoc_plain' }.merge(build_attribute_hash(doc.attributes, attrs)) query = QueryValueQuery.new(@report.grafana(instance), variables: vars) query.datasource = @report.grafana(instance).datasource_by_id(target.split(':')[1].to_i) query.raw_query = attrs['sql'] reader.unshift_lines query.execute.split("\n") rescue Grafana::GrafanaError => e @report.logger.error(e.) reader.unshift_line "|#{e.}" rescue GrafanaReporterError => e @report.logger.error(e.) reader.unshift_line "|#{e.}" rescue StandardError => e @report.logger.fatal("#{e.}\n#{e.backtrace.join("\n")}") reader.unshift_line "|#{e.}\n#{e.backtrace.join("\n")}" end reader end |