Class: GrafanaReporter::Asciidoctor::SqlValueInlineMacro
- Inherits:
-
Asciidoctor::Extensions::InlineMacroProcessor
- Object
- Asciidoctor::Extensions::InlineMacroProcessor
- GrafanaReporter::Asciidoctor::SqlValueInlineMacro
- Includes:
- ProcessorMixin
- Defined in:
- lib/grafana_reporter/asciidoctor/sql_value_inline_macro.rb
Overview
Implements the hook
grafana_sql_value:<datasource_id>[<options>]
Returns the first value of the resulting SQL query.
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
Methods included from ProcessorMixin
#build_attribute_hash, #current_report
Instance Method Details
#build_demo_entry(panel) ⇒ Object
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/grafana_reporter/asciidoctor/sql_value_inline_macro.rb', line 80 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) "grafana_sql_value:#{panel.dashboard.grafana.datasource_by_model_entry(panel.model['datasource']).id}"\ "[sql=\"#{panel.query(ref_id).gsub(/"/, '\"').gsub("\r\n", ' ').gsub("\n", ' ').gsub(/\\/, '\\\\')}\",from=\"now-1h\","\ 'to="now"]' end |
#process(parent, target, attrs) ⇒ Object
41 42 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 73 74 75 76 77 |
# File 'lib/grafana_reporter/asciidoctor/sql_value_inline_macro.rb', line 41 def process(parent, target, attrs) return if @report.cancel @report.next_step instance = attrs['instance'] || parent.document.attr('grafana_default_instance') || 'default' attrs['result_type'] = 'sql_value' sql = attrs['sql'] @report.logger.debug("Processing SqlValueInlineMacro (instance: #{instance}, datasource: #{target},"\ " sql: #{sql})") # translate sql statement to fix asciidoctor issue # refer https://github.com/asciidoctor/asciidoctor/issues/4072#issuecomment-991305715 sql_translated = CGI::unescapeHTML(sql) if sql if sql != sql_translated @report.logger.debug("Translating SQL query to fix asciidoctor issue: #{sql_translated}") sql = sql_translated end begin # catch properly if datasource could not be identified query = QueryValueQuery.new(@report.grafana(instance), variables: build_attribute_hash(parent.document.attributes, attrs)) query.datasource = @report.grafana(instance).datasource_by_id(target) query.raw_query = sql create_inline(parent, :quoted, query.execute) rescue Grafana::GrafanaError => e @report.logger.error(e.) create_inline(parent, :quoted, e.) rescue GrafanaReporterError => e @report.logger.error(e.) create_inline(parent, :quoted, e.) rescue StandardError => e @report.logger.fatal("#{e.}\n#{e.backtrace.join("\n")}") create_inline(parent, :quoted, "#{e.}\n#{e.backtrace.join("\n")}") end end |