ruby-grafana-reporter 0.4.3 → 0.4.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +337 -203
  3. data/lib/VERSION.rb +2 -2
  4. data/lib/grafana/abstract_datasource.rb +6 -3
  5. data/lib/grafana/errors.rb +2 -2
  6. data/lib/grafana/grafana_property_datasource.rb +8 -1
  7. data/lib/grafana/panel.rb +1 -1
  8. data/lib/grafana/sql_datasource.rb +1 -9
  9. data/lib/grafana/variable.rb +26 -20
  10. data/lib/grafana_reporter/abstract_query.rb +37 -19
  11. data/lib/grafana_reporter/abstract_report.rb +17 -4
  12. data/lib/grafana_reporter/abstract_table_format_strategy.rb +34 -0
  13. data/lib/grafana_reporter/alerts_table_query.rb +5 -1
  14. data/lib/grafana_reporter/annotations_table_query.rb +5 -1
  15. data/lib/grafana_reporter/application/application.rb +7 -2
  16. data/lib/grafana_reporter/application/webservice.rb +34 -29
  17. data/lib/grafana_reporter/asciidoctor/adoc_plain_table_format_strategy.rb +25 -0
  18. data/lib/grafana_reporter/asciidoctor/alerts_table_include_processor.rb +2 -1
  19. data/lib/grafana_reporter/asciidoctor/annotations_table_include_processor.rb +2 -1
  20. data/lib/grafana_reporter/asciidoctor/help.rb +458 -0
  21. data/lib/grafana_reporter/asciidoctor/panel_image_block_macro.rb +5 -1
  22. data/lib/grafana_reporter/asciidoctor/panel_image_inline_macro.rb +5 -1
  23. data/lib/grafana_reporter/asciidoctor/panel_property_inline_macro.rb +5 -1
  24. data/lib/grafana_reporter/asciidoctor/panel_query_table_include_processor.rb +5 -1
  25. data/lib/grafana_reporter/asciidoctor/panel_query_value_inline_macro.rb +3 -0
  26. data/lib/grafana_reporter/asciidoctor/processor_mixin.rb +3 -2
  27. data/lib/grafana_reporter/asciidoctor/report.rb +15 -13
  28. data/lib/grafana_reporter/asciidoctor/show_help_include_processor.rb +1 -1
  29. data/lib/grafana_reporter/asciidoctor/sql_table_include_processor.rb +5 -1
  30. data/lib/grafana_reporter/asciidoctor/sql_value_inline_macro.rb +5 -1
  31. data/lib/grafana_reporter/console_configuration_wizard.rb +2 -2
  32. data/lib/grafana_reporter/csv_table_format_strategy.rb +23 -0
  33. data/lib/grafana_reporter/demo_report_wizard.rb +0 -1
  34. data/lib/grafana_reporter/erb/demo_report_builder.rb +46 -0
  35. data/lib/grafana_reporter/erb/report.rb +13 -7
  36. data/lib/grafana_reporter/errors.rb +9 -7
  37. data/lib/grafana_reporter/query_value_query.rb +1 -1
  38. data/lib/grafana_reporter/report_webhook.rb +12 -8
  39. metadata +7 -3
  40. data/lib/grafana_reporter/help.rb +0 -443
@@ -46,10 +46,14 @@ module GrafanaReporter
46
46
  " panel: #{target})")
47
47
 
48
48
  begin
49
- query = PanelImageQuery.new(@report.grafana(instance).dashboard(dashboard).panel(target), variables: build_attribute_hash(parent.document.attributes, attrs))
49
+ query = PanelImageQuery.new(@report.grafana(instance).dashboard(dashboard).panel(target),
50
+ variables: build_attribute_hash(parent.document.attributes, attrs))
50
51
 
51
52
  image = query.execute
52
53
  image_path = @report.save_image_file(image)
54
+ rescue GrafanaError => e
55
+ @report.logger.error(e.message)
56
+ return create_paragraph(parent, e.message, attrs)
53
57
  rescue GrafanaReporterError => e
54
58
  @report.logger.error(e.message)
55
59
  return create_paragraph(parent, e.message, attrs)
@@ -48,10 +48,14 @@ module GrafanaReporter
48
48
  begin
49
49
  # set alt text to a default, because otherwise asciidoctor fails
50
50
  attrs['alt'] = '' unless attrs['alt']
51
- query = PanelImageQuery.new(@report.grafana(instance).dashboard(dashboard).panel(target), variables: build_attribute_hash(parent.document.attributes, attrs))
51
+ query = PanelImageQuery.new(@report.grafana(instance).dashboard(dashboard).panel(target),
52
+ variables: build_attribute_hash(parent.document.attributes, attrs))
52
53
 
53
54
  image = query.execute
54
55
  image_path = @report.save_image_file(image)
56
+ rescue GrafanaError => e
57
+ @report.logger.error(e.message)
58
+ return create_inline(parent, :quoted, e.message)
55
59
  rescue GrafanaReporterError => e
56
60
  @report.logger.error(e.message)
57
61
  return create_inline(parent, :quoted, e.message)
@@ -38,10 +38,14 @@ module GrafanaReporter
38
38
  " panel: #{target}, property: #{attrs[:field]})")
39
39
 
40
40
  begin
41
- query = PanelPropertyQuery.new(@report.grafana(instance).dashboard(dashboard).panel(target), variables: build_attribute_hash(parent.document.attributes, attrs))
41
+ query = PanelPropertyQuery.new(@report.grafana(instance).dashboard(dashboard).panel(target),
42
+ variables: build_attribute_hash(parent.document.attributes, attrs))
42
43
  query.raw_query = { property_name: attrs[:field] }
43
44
 
44
45
  description = query.execute
46
+ rescue GrafanaError => e
47
+ @report.logger.error(e.message)
48
+ return create_inline(parent, :quoted, e.message)
45
49
  rescue GrafanaReporterError => e
46
50
  @report.logger.error(e.message)
47
51
  return create_inline(parent, :quoted, e.message)
@@ -59,9 +59,13 @@ module GrafanaReporter
59
59
 
60
60
  begin
61
61
  panel = @report.grafana(instance).dashboard(dashboard).panel(panel_id)
62
- query = QueryValueQuery.new(panel, variables: build_attribute_hash(doc.attributes, attrs))
62
+ vars = { 'table_formatter' => 'adoc_plain' }.merge(build_attribute_hash(doc.attributes, attrs))
63
+ query = QueryValueQuery.new(panel, variables: vars)
63
64
 
64
65
  reader.unshift_lines query.execute
66
+ rescue GrafanaError => e
67
+ @report.logger.error(e.message)
68
+ reader.unshift_line "|#{e.message}"
65
69
  rescue GrafanaReporterError => e
66
70
  @report.logger.error(e.message)
67
71
  reader.unshift_line "|#{e.message}"
@@ -59,6 +59,9 @@ module GrafanaReporter
59
59
  query = QueryValueQuery.new(panel, variables: build_attribute_hash(parent.document.attributes, attrs))
60
60
 
61
61
  create_inline(parent, :quoted, query.execute)
62
+ rescue GrafanaError => e
63
+ @report.logger.error(e.message)
64
+ create_inline(parent, :quoted, e.message)
62
65
  rescue GrafanaReporterError => e
63
66
  @report.logger.error(e.message)
64
67
  create_inline(parent, :quoted, e.message)
@@ -38,8 +38,9 @@ module GrafanaReporter
38
38
  # TODO: specify accepted options for each processor class individually
39
39
  k =~ /^(?:var-|render-)/ ||
40
40
  k =~ /^(?:timeout|from|to)$/ ||
41
- k =~ /filter_columns|format|replace_values_.*|transpose|column_divider|
42
- row_divider|from_timezone|to_timezone|result_type|query/x
41
+ k =~ /filter_columns|format|replace_values_.*|transpose|from_timezone|
42
+ to_timezone|result_type|query|table_formatter|include_headline|
43
+ column_divider|row_divider/x
43
44
  end)
44
45
 
45
46
  result
@@ -15,7 +15,7 @@ module GrafanaReporter
15
15
  # Starts to create an asciidoctor report. It utilizes all extensions in the {GrafanaReporter::Asciidoctor}
16
16
  # namespace to realize the conversion.
17
17
  # @see AbstractReport#build
18
- def build(template, destination_file_or_path, custom_attributes)
18
+ def build
19
19
  attrs = { 'convert-backend' => 'pdf' }.merge(@config.default_document_attributes.merge(@custom_attributes))
20
20
  logger.debug("Document attributes: #{attrs}")
21
21
 
@@ -41,22 +41,14 @@ module GrafanaReporter
41
41
  ::Asciidoctor.convert_file(@template, extension_registry: registry, backend: attrs['convert-backend'],
42
42
  to_file: path, attributes: attrs, header_footer: true)
43
43
 
44
- @destination_file_or_path.close if @destination_file_or_path.is_a?(File)
45
-
46
44
  # store report including als images as ZIP file, if the result is not a PDF
47
45
  if attrs['convert-backend'] != 'pdf'
48
- dest_path = if @destination_file_or_path.is_a?(File) || @destination_file_or_path.is_a?(Tempfile)
49
- @destination_file_or_path.path
50
- else
51
- @destination_file_or_path
52
- end
53
-
54
46
  # build zip file
55
47
  zip_file = Tempfile.new('gf_zip')
56
48
  buffer = Zip::OutputStream.write_buffer do |zipfile|
57
49
  # add report file
58
- zipfile.put_next_entry("#{dest_path.gsub(@config.reports_folder, '')}.#{attrs['convert-backend']}")
59
- zipfile.write File.read(dest_path)
50
+ zipfile.put_next_entry("#{path.gsub(@config.reports_folder, '')}.#{attrs['convert-backend']}")
51
+ zipfile.write File.read(path)
60
52
 
61
53
  # add image files
62
54
  @image_files.each do |file|
@@ -71,9 +63,9 @@ module GrafanaReporter
71
63
  # replace original file with zip file
72
64
  zip_file.rewind
73
65
  begin
74
- File.write(dest_path, zip_file.read)
66
+ File.write(path, zip_file.read)
75
67
  rescue StandardError => e
76
- logger.fatal("Could not overwrite report file '#{dest_path}' with ZIP file. (#{e.message}).")
68
+ logger.fatal("Could not overwrite report file '#{path}' with ZIP file. (#{e.message}).")
77
69
  end
78
70
 
79
71
  # cleanup temporary zip file
@@ -100,6 +92,16 @@ module GrafanaReporter
100
92
  path
101
93
  end
102
94
 
95
+ # @see AbstractReport#default_template_extension
96
+ def self.default_template_extension
97
+ 'adoc'
98
+ end
99
+
100
+ # @see AbstractReport#default_result_extension
101
+ def self.default_result_extension
102
+ 'pdf'
103
+ end
104
+
103
105
  # @see AbstractReport#demo_report_classes
104
106
  def self.demo_report_classes
105
107
  [AlertsTableIncludeProcessor, AnnotationsTableIncludeProcessor, PanelImageBlockMacro, PanelImageInlineMacro,
@@ -23,7 +23,7 @@ module GrafanaReporter
23
23
  @report.next_step
24
24
  @report.logger.debug('Processing ShowHelpIncludeProcessor')
25
25
 
26
- reader.unshift_lines GrafanaReporter::Help.new.asciidoctor.split("\n")
26
+ reader.unshift_lines Help.new.asciidoctor.split("\n")
27
27
  end
28
28
 
29
29
  # @see ProcessorMixin#build_demo_entry
@@ -51,11 +51,15 @@ module GrafanaReporter
51
51
 
52
52
  begin
53
53
  # catch properly if datasource could not be identified
54
- query = QueryValueQuery.new(@report.grafana(instance), variables: build_attribute_hash(doc.attributes, attrs))
54
+ vars = { 'table_formatter' => 'adoc_plain' }.merge(build_attribute_hash(doc.attributes, attrs))
55
+ query = QueryValueQuery.new(@report.grafana(instance), variables: vars)
55
56
  query.datasource = @report.grafana(instance).datasource_by_id(target.split(':')[1].to_i)
56
57
  query.raw_query = attrs['sql']
57
58
 
58
59
  reader.unshift_lines query.execute
60
+ rescue GrafanaError => e
61
+ @report.logger.error(e.message)
62
+ reader.unshift_line "|#{e.message}"
59
63
  rescue GrafanaReporterError => e
60
64
  @report.logger.error(e.message)
61
65
  reader.unshift_line "|#{e.message}"
@@ -49,11 +49,15 @@ module GrafanaReporter
49
49
 
50
50
  begin
51
51
  # catch properly if datasource could not be identified
52
- query = QueryValueQuery.new(@report.grafana(instance), variables: build_attribute_hash(parent.document.attributes, attrs))
52
+ query = QueryValueQuery.new(@report.grafana(instance),
53
+ variables: build_attribute_hash(parent.document.attributes, attrs))
53
54
  query.datasource = @report.grafana(instance).datasource_by_id(target)
54
55
  query.raw_query = attrs['sql']
55
56
 
56
57
  create_inline(parent, :quoted, query.execute)
58
+ rescue GrafanaError => e
59
+ @report.logger.error(e.message)
60
+ create_inline(parent, :quoted, e.message)
57
61
  rescue GrafanaReporterError => e
58
62
  @report.logger.error(e.message)
59
63
  create_inline(parent, :quoted, e.message)
@@ -39,7 +39,7 @@ module GrafanaReporter
39
39
  puts 'Now everything is setup properly. Create your reports as required in the templates '\
40
40
  'folder and run the reporter either standalone with e.g. the following command:'
41
41
  puts
42
- puts " #{program_call}#{config_param} -t #{demo_report} -o demo_report_with_help.pdf"
42
+ puts " #{program_call}#{config_param} -t #{demo_report} -o demo_report.#{config.report_class.default_result_extension}"
43
43
  puts
44
44
  puts 'or run it as a service using the following command:'
45
45
  puts
@@ -120,7 +120,7 @@ default-document-attributes:
120
120
  return nil unless create =~ /^(?:y|Y)$/
121
121
 
122
122
  demo_report = 'demo_report'
123
- demo_report_file = "#{config.templates_folder}#{demo_report}.adoc"
123
+ demo_report_file = "#{config.templates_folder}#{demo_report}.#{config.report_class.default_template_extension}"
124
124
 
125
125
  # ask to overwrite file
126
126
  if File.exist?(demo_report_file)
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module GrafanaReporter
4
+ # Implements a default table format strategy, which will return tables
5
+ # as CSV formatted strings.
6
+ class CsvTableFormatStrategy < AbstractTableFormatStrategy
7
+ # @see AbstractTableFormatStrategy#abbreviation
8
+ def self.abbreviation
9
+ 'csv'
10
+ end
11
+
12
+ # @see AbstractTableFormatStrategy#format
13
+ def format(result, include_headline)
14
+ headline = result[:header].map { |item| item.to_s.gsub(',', '\\,') }.join(',')
15
+
16
+ content = result[:content].map do |row|
17
+ row.map { |item| item.to_s.gsub(',', '\,') }.join(',')
18
+ end.join("\n")
19
+
20
+ "#{"#{headline}\n" if include_headline}#{content}"
21
+ end
22
+ end
23
+ end
@@ -84,7 +84,6 @@ module GrafanaReporter
84
84
  results
85
85
  end
86
86
 
87
- # TODO: move this method to Asciidoctor::Report
88
87
  def format_results(raw_results)
89
88
  results = ['= Demo report',
90
89
  "Created by `+ruby-grafana-reporter+` version #{GRAFANA_REPORTER_VERSION.join('.')}",
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ module GrafanaReporter
4
+ module ERB
5
+ # This class builds a demo report for ERB templates
6
+ class DemoReportBuilder
7
+ # This method is called if a demo report shall be built for the given {Grafana::Panel}.
8
+ # @param panel [Grafana::Panel] panel object, for which a demo entry shall be created.
9
+ # @return [String] String containing the entry, or nil if not possible for given panel
10
+ def build_demo_entry(panel)
11
+ return nil unless panel
12
+ return nil unless panel.model['type'].include?('table')
13
+
14
+ ref_id = nil
15
+ panel.model['targets'].each do |item|
16
+ if !item['hide'] && !panel.query(item['refId']).to_s.empty?
17
+ ref_id = item['refId']
18
+ break
19
+ end
20
+ end
21
+ return nil unless ref_id
22
+
23
+ <<~DEMO_ERB_TEMPLATE
24
+ <%
25
+ dashboard = '#{panel.dashboard.id}'
26
+ instance = 'default'
27
+ # load the panel object from grafana instance
28
+ panel = @report.grafana(instance).dashboard(dashboard).panel(#{panel.id})
29
+ # build a complete attributes hash, including the variables set for this report call
30
+ # e.g. including command line parameters etc.
31
+ attrs = @attributes.merge({ 'result_type' => 'panel_table', 'query' => '#{ref_id}' })
32
+ query = QueryValueQuery.new(panel, variables: attrs)
33
+ %>
34
+
35
+ This is a test table for panel <%= panel.id %>:
36
+
37
+ <%= query.execute %>
38
+
39
+ For detailed API documentation you may start with:
40
+ 1) the AbstractReport (https://rubydoc.info/gems/ruby-grafana-reporter/GrafanaReporter/AbstractReport), or
41
+ 2) subclasses of the AbstractQuery (https://rubydoc.info/gems/ruby-grafana-reporter/GrafanaReporter/AbstractQuery)
42
+ DEMO_ERB_TEMPLATE
43
+ end
44
+ end
45
+ end
46
+ end
@@ -10,20 +10,26 @@ module GrafanaReporter
10
10
  # Starts to create an asciidoctor report. It utilizes all extensions in the {GrafanaReporter::Asciidoctor}
11
11
  # namespace to realize the conversion.
12
12
  # @see AbstractReport#build
13
- def build(template, destination_file_or_path, custom_attributes)
14
- attrs = @config.default_document_attributes.merge(@custom_attributes)
13
+ def build
14
+ attrs = @config.default_document_attributes.merge(@custom_attributes).merge({ 'grafana_report_timestamp' => ::Grafana::Variable.new(Time.now.to_s) })
15
15
  logger.debug("Document attributes: #{attrs}")
16
16
 
17
- # TODO: if path is true, a default filename has to be generated. check if this should be a general function instead
18
- File.write(path, ::ERB.new(File.read(template)).result(ReportJail.new(self, attrs).bind))
17
+ File.write(path, ::ERB.new(File.read(@template)).result(ReportJail.new(self, attrs).bind))
18
+ end
19
+
20
+ # @see AbstractReport#default_template_extension
21
+ def self.default_template_extension
22
+ 'erb'
23
+ end
19
24
 
20
- # TODO: check if closing output file is correct here, or maybe can be moved to AbstractReport.done!
21
- @destination_file_or_path.close if @destination_file_or_path.is_a?(File)
25
+ # @see AbstractReport#default_result_extension
26
+ def self.default_result_extension
27
+ 'txt'
22
28
  end
23
29
 
24
30
  # @see AbstractReport#demo_report_classes
25
31
  def self.demo_report_classes
26
- []
32
+ [DemoReportBuilder]
27
33
  end
28
34
  end
29
35
  end
@@ -10,23 +10,25 @@ module GrafanaReporter
10
10
 
11
11
  # Raised if a datasource shall be queried, which is not (yet) supported by the reporter
12
12
  class DatasourceNotSupportedError < GrafanaReporterError
13
- def initialize(ds, query)
14
- super("The datasource '#{ds.name}' is of type '#{ds.type}' which is currently not supported for "\
15
- "the query type '#{query}'.")
13
+ def initialize(datasource, query)
14
+ super("The datasource '#{datasource.name}' is of type '#{datasource.type}' which is currently "\
15
+ "not supported for the query type '#{query}'.")
16
16
  end
17
17
  end
18
18
 
19
19
  # Raised if some unhandled exception is raised during a datasource request execution.
20
20
  class DatasourceRequestInternalError < GrafanaReporterError
21
- def initialize(ds, message)
22
- super("The datasource request to '#{ds.name}' (#{ds.class}) failed with an internal error: #{message}")
21
+ def initialize(datasource, message)
22
+ super("The datasource request to '#{datasource.name}' (#{datasource.class}) failed with "\
23
+ "an internal error: #{message}")
23
24
  end
24
25
  end
25
26
 
26
27
  # Raised if the return value of a datasource request does not match the expected return hash.
27
28
  class DatasourceRequestInvalidReturnValueError < GrafanaReporterError
28
- def initialize(ds, message)
29
- super("The datasource request to '#{ds.name}' (#{ds.class}) returned an invalid value: '#{message}'")
29
+ def initialize(datasource, message)
30
+ super("The datasource request to '#{datasource.name}' (#{datasource.class})"\
31
+ "returned an invalid value: '#{message}'")
30
32
  end
31
33
  end
32
34
 
@@ -20,7 +20,7 @@ module GrafanaReporter
20
20
 
21
21
  case @variables['result_type'].raw_value
22
22
  when /(?:panel_table|sql_table)/
23
- @result = format_table_output(@result, row_divider: @variables['row_divider'], column_divider: @variables['column_divider'])
23
+ @result = format_table_output(@result, row_divider: @variables['row_divider'], column_divider: @variables['column_divider'], table_formatter: @variables['table_formatter'], include_headline: @variables['include_headline'])
24
24
 
25
25
  when /(?:panel_value|sql_value)/
26
26
  tmp = @result[:content] || []
@@ -12,14 +12,18 @@ module GrafanaReporter
12
12
  # Implements the call of the configured webhook.
13
13
  # Provides the following report information in JSON format:
14
14
  #
15
- # +object_id+ - id of the current report
16
- # +path+ - file path to the report
17
- # +status+ - report status as string, e.g. +cancelled+, +finished+ or +in progress+
18
- # +execution_time+ - execution time of the report
19
- # +template+ - name of the used template
20
- # +start_time+ - time when the report creation started
21
- # +end_time+ - time when the report creation ended
22
- # +event+ - event, which has happened
15
+ # :object_id - id of the current report
16
+ # :path - file path to the report
17
+ # :status - report status as string, e.g. `cancelled`, `finished` or `in progress`
18
+ # :execution_time - execution time in seconds of the report
19
+ # :template - name of the used template
20
+ # :start_time - time when the report creation started
21
+ # :end_time - time when the report creation ended
22
+ # :event - event, which has happened, e.g. `on-before-create`
23
+ #
24
+ # Please note that this callback is a non-blocking event, i.e. the report
25
+ # generation is proceeding, no matter if the callback is successfull and
26
+ # no matter how long the execution of the callback does take.
23
27
  def callback(event, report)
24
28
  # build report information as JSON
25
29
  data = { object_id: report.object_id, path: report.path, status: report.status,
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-grafana-reporter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.3
4
+ version: 0.4.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christian Kohlmeyer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-06-18 00:00:00.000000000 Z
11
+ date: 2021-07-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: asciidoctor
@@ -130,13 +130,16 @@ files:
130
130
  - "./lib/grafana/webrequest.rb"
131
131
  - "./lib/grafana_reporter/abstract_query.rb"
132
132
  - "./lib/grafana_reporter/abstract_report.rb"
133
+ - "./lib/grafana_reporter/abstract_table_format_strategy.rb"
133
134
  - "./lib/grafana_reporter/alerts_table_query.rb"
134
135
  - "./lib/grafana_reporter/annotations_table_query.rb"
135
136
  - "./lib/grafana_reporter/application/application.rb"
136
137
  - "./lib/grafana_reporter/application/errors.rb"
137
138
  - "./lib/grafana_reporter/application/webservice.rb"
139
+ - "./lib/grafana_reporter/asciidoctor/adoc_plain_table_format_strategy.rb"
138
140
  - "./lib/grafana_reporter/asciidoctor/alerts_table_include_processor.rb"
139
141
  - "./lib/grafana_reporter/asciidoctor/annotations_table_include_processor.rb"
142
+ - "./lib/grafana_reporter/asciidoctor/help.rb"
140
143
  - "./lib/grafana_reporter/asciidoctor/panel_image_block_macro.rb"
141
144
  - "./lib/grafana_reporter/asciidoctor/panel_image_inline_macro.rb"
142
145
  - "./lib/grafana_reporter/asciidoctor/panel_property_inline_macro.rb"
@@ -151,11 +154,12 @@ files:
151
154
  - "./lib/grafana_reporter/asciidoctor/value_as_variable_include_processor.rb"
152
155
  - "./lib/grafana_reporter/configuration.rb"
153
156
  - "./lib/grafana_reporter/console_configuration_wizard.rb"
157
+ - "./lib/grafana_reporter/csv_table_format_strategy.rb"
154
158
  - "./lib/grafana_reporter/demo_report_wizard.rb"
159
+ - "./lib/grafana_reporter/erb/demo_report_builder.rb"
155
160
  - "./lib/grafana_reporter/erb/report.rb"
156
161
  - "./lib/grafana_reporter/erb/report_jail.rb"
157
162
  - "./lib/grafana_reporter/errors.rb"
158
- - "./lib/grafana_reporter/help.rb"
159
163
  - "./lib/grafana_reporter/logger/two_way_delegate_logger.rb"
160
164
  - "./lib/grafana_reporter/panel_image_query.rb"
161
165
  - "./lib/grafana_reporter/panel_property_query.rb"