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.
- checksums.yaml +4 -4
- data/README.md +337 -203
- data/lib/VERSION.rb +2 -2
- data/lib/grafana/abstract_datasource.rb +6 -3
- data/lib/grafana/errors.rb +2 -2
- data/lib/grafana/grafana_property_datasource.rb +8 -1
- data/lib/grafana/panel.rb +1 -1
- data/lib/grafana/sql_datasource.rb +1 -9
- data/lib/grafana/variable.rb +26 -20
- data/lib/grafana_reporter/abstract_query.rb +37 -19
- data/lib/grafana_reporter/abstract_report.rb +17 -4
- data/lib/grafana_reporter/abstract_table_format_strategy.rb +34 -0
- data/lib/grafana_reporter/alerts_table_query.rb +5 -1
- data/lib/grafana_reporter/annotations_table_query.rb +5 -1
- data/lib/grafana_reporter/application/application.rb +7 -2
- data/lib/grafana_reporter/application/webservice.rb +34 -29
- data/lib/grafana_reporter/asciidoctor/adoc_plain_table_format_strategy.rb +25 -0
- data/lib/grafana_reporter/asciidoctor/alerts_table_include_processor.rb +2 -1
- data/lib/grafana_reporter/asciidoctor/annotations_table_include_processor.rb +2 -1
- data/lib/grafana_reporter/asciidoctor/help.rb +458 -0
- data/lib/grafana_reporter/asciidoctor/panel_image_block_macro.rb +5 -1
- data/lib/grafana_reporter/asciidoctor/panel_image_inline_macro.rb +5 -1
- data/lib/grafana_reporter/asciidoctor/panel_property_inline_macro.rb +5 -1
- data/lib/grafana_reporter/asciidoctor/panel_query_table_include_processor.rb +5 -1
- data/lib/grafana_reporter/asciidoctor/panel_query_value_inline_macro.rb +3 -0
- data/lib/grafana_reporter/asciidoctor/processor_mixin.rb +3 -2
- data/lib/grafana_reporter/asciidoctor/report.rb +15 -13
- data/lib/grafana_reporter/asciidoctor/show_help_include_processor.rb +1 -1
- data/lib/grafana_reporter/asciidoctor/sql_table_include_processor.rb +5 -1
- data/lib/grafana_reporter/asciidoctor/sql_value_inline_macro.rb +5 -1
- data/lib/grafana_reporter/console_configuration_wizard.rb +2 -2
- data/lib/grafana_reporter/csv_table_format_strategy.rb +23 -0
- data/lib/grafana_reporter/demo_report_wizard.rb +0 -1
- data/lib/grafana_reporter/erb/demo_report_builder.rb +46 -0
- data/lib/grafana_reporter/erb/report.rb +13 -7
- data/lib/grafana_reporter/errors.rb +9 -7
- data/lib/grafana_reporter/query_value_query.rb +1 -1
- data/lib/grafana_reporter/report_webhook.rb +12 -8
- metadata +7 -3
- 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),
|
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),
|
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),
|
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
|
-
|
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|
|
42
|
-
|
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
|
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("#{
|
59
|
-
zipfile.write File.read(
|
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(
|
66
|
+
File.write(path, zip_file.read)
|
75
67
|
rescue StandardError => e
|
76
|
-
logger.fatal("Could not overwrite report file '#{
|
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
|
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
|
-
|
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),
|
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
|
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}.
|
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
|
@@ -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
|
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
|
-
|
18
|
-
|
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
|
-
|
21
|
-
|
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(
|
14
|
-
super("The datasource '#{
|
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(
|
22
|
-
super("The datasource request to '#{
|
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(
|
29
|
-
super("The datasource request to '#{
|
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
|
-
#
|
16
|
-
#
|
17
|
-
#
|
18
|
-
#
|
19
|
-
#
|
20
|
-
#
|
21
|
-
#
|
22
|
-
#
|
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.
|
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-
|
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"
|