Method: GrafanaReporter::Asciidoctor::SqlValueInlineMacro#process

Defined in:
lib/grafana_reporter/asciidoctor/sql_value_inline_macro.rb

#process(parent, target, attrs) ⇒ Object

See Also:

  • GrafanaReporter::Asciidoctor::SqlFirstValueQuery
[View source]

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.message)
    create_inline(parent, :quoted, e.message)
  rescue GrafanaReporterError => e
    @report.logger.error(e.message)
    create_inline(parent, :quoted, e.message)
  rescue StandardError => e
    @report.logger.fatal("#{e.message}\n#{e.backtrace.join("\n")}")
    create_inline(parent, :quoted, "#{e.message}\n#{e.backtrace.join("\n")}")
  end
end