Class: LogStash::Modules::KibanaConfig

Inherits:
Object
  • Object
show all
Includes:
Util::Loggable
Defined in:
lib/logstash/modules/kibana_config.rb

Constant Summary collapse

ALLOWED_DIRECTORIES =
["search", "visualization"]

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Util::Loggable

included, #logger, #slow_logger

Constructor Details

#initialize(modul, settings) ⇒ KibanaConfig

We name it ‘modul` here because `module` has meaning in Ruby.



17
18
19
20
21
22
# File 'lib/logstash/modules/kibana_config.rb', line 17

def initialize(modul, settings)
  @directory = ::File.join(modul.directory, "kibana")
  @name = modul.module_name
  @settings = settings
  @index_name = settings.fetch("dashboards.kibana_index", ".kibana")
end

Instance Attribute Details

#index_nameObject (readonly)

Returns the value of attribute index_name.



14
15
16
# File 'lib/logstash/modules/kibana_config.rb', line 14

def index_name
  @index_name
end

Instance Method Details

#dashboardsObject



24
25
26
27
28
29
30
# File 'lib/logstash/modules/kibana_config.rb', line 24

def dashboards
  # there can be more than one dashboard to load
  filenames = FileReader.read_json(dynamic("dashboard"))
  filenames.map do |filename|
    KibanaResource.new(@index_name, "dashboard", dynamic("dashboard", filename))
  end
end

#extract_saved_searches(list) ⇒ Object



89
90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/logstash/modules/kibana_config.rb', line 89

def extract_saved_searches(list)
  result = [] # must not add to list while iterating
  list.each do |resource|
    next unless resource.contains?("savedSearchId")
    content = resource.content_as_object
    next if content.nil?
    saved_search = content["savedSearchId"]
    next if saved_search.nil?
    ss_resource = KibanaResource.new(@index_name, "search", dynamic("search", saved_search))
    next if list.member?(ss_resource) || result.member?(ss_resource)
    result << ss_resource
  end
  result
end

#index_patternObject



32
33
34
35
36
37
38
39
40
# File 'lib/logstash/modules/kibana_config.rb', line 32

def index_pattern
  pattern_name = "#{@name}-*"
  default_index_json = '{"defaultIndex": "#{pattern_name}"}'
  default_index_content_id = @settings.fetch("index_pattern.kibana_version", "5.5.0")
  [
    KibanaResource.new(@index_name, "index-pattern", dynamic("index-pattern"),nil, pattern_name),
    KibanaResource.new(@index_name, "config", nil, default_index_json, default_index_content_id)
  ]
end

#resourcesObject



42
43
44
45
46
47
48
# File 'lib/logstash/modules/kibana_config.rb', line 42

def resources
  list = index_pattern
  dashboards.each do |board|
    extract_panels_into(board, list)
  end
  list.concat(extract_saved_searches(list))
end