logstash-core 5.6.16-java → 6.0.0.alpha1-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/gemspec_jars.rb +4 -7
- data/lib/logstash-core/logstash-core.jar +0 -0
- data/lib/logstash-core/version.rb +4 -8
- data/lib/logstash-core_jars.rb +12 -26
- data/lib/logstash/agent.rb +261 -246
- data/lib/logstash/api/commands/default_metadata.rb +1 -1
- data/lib/logstash/api/commands/hot_threads_reporter.rb +5 -11
- data/lib/logstash/api/commands/node.rb +3 -2
- data/lib/logstash/api/commands/stats.rb +3 -2
- data/lib/logstash/bootstrap_check/bad_java.rb +16 -0
- data/lib/logstash/bootstrap_check/bad_ruby.rb +12 -0
- data/lib/logstash/bootstrap_check/default_config.rb +17 -0
- data/lib/logstash/compiler.rb +38 -0
- data/lib/logstash/compiler/lscl.rb +566 -0
- data/lib/logstash/compiler/lscl/lscl_grammar.rb +3503 -0
- data/lib/logstash/compiler/treetop_monkeypatches.rb +92 -0
- data/lib/logstash/config/config_ast.rb +4 -82
- data/lib/logstash/config/mixin.rb +73 -41
- data/lib/logstash/config/pipeline_config.rb +48 -0
- data/lib/logstash/config/source/base.rb +16 -0
- data/lib/logstash/config/source/local.rb +215 -0
- data/lib/logstash/config/source_loader.rb +125 -0
- data/lib/logstash/converge_result.rb +103 -0
- data/lib/logstash/environment.rb +6 -19
- data/lib/logstash/errors.rb +2 -0
- data/lib/logstash/execution_context.rb +4 -7
- data/lib/logstash/filter_delegator.rb +6 -9
- data/lib/logstash/inputs/base.rb +0 -2
- data/lib/logstash/instrument/collector.rb +5 -7
- data/lib/logstash/instrument/metric_store.rb +12 -12
- data/lib/logstash/instrument/metric_type/mean.rb +0 -5
- data/lib/logstash/instrument/namespaced_metric.rb +0 -4
- data/lib/logstash/instrument/namespaced_null_metric.rb +0 -4
- data/lib/logstash/instrument/null_metric.rb +0 -10
- data/lib/logstash/instrument/periodic_poller/cgroup.rb +85 -168
- data/lib/logstash/instrument/periodic_poller/jvm.rb +5 -5
- data/lib/logstash/instrument/periodic_poller/pq.rb +3 -7
- data/lib/logstash/instrument/periodic_pollers.rb +1 -3
- data/lib/logstash/instrument/wrapped_write_client.rb +24 -33
- data/lib/logstash/logging/logger.rb +15 -47
- data/lib/logstash/namespace.rb +0 -1
- data/lib/logstash/output_delegator.rb +5 -7
- data/lib/logstash/outputs/base.rb +0 -2
- data/lib/logstash/pipeline.rb +159 -87
- data/lib/logstash/pipeline_action.rb +13 -0
- data/lib/logstash/pipeline_action/base.rb +29 -0
- data/lib/logstash/pipeline_action/create.rb +47 -0
- data/lib/logstash/pipeline_action/reload.rb +48 -0
- data/lib/logstash/pipeline_action/stop.rb +23 -0
- data/lib/logstash/plugin.rb +0 -1
- data/lib/logstash/plugins/hooks_registry.rb +6 -0
- data/lib/logstash/plugins/registry.rb +0 -1
- data/lib/logstash/program.rb +14 -0
- data/lib/logstash/queue_factory.rb +5 -1
- data/lib/logstash/runner.rb +58 -80
- data/lib/logstash/settings.rb +3 -27
- data/lib/logstash/state_resolver.rb +41 -0
- data/lib/logstash/util/java_version.rb +6 -0
- data/lib/logstash/util/safe_uri.rb +12 -148
- data/lib/logstash/util/thread_dump.rb +4 -7
- data/lib/logstash/util/wrapped_acked_queue.rb +36 -39
- data/lib/logstash/util/wrapped_synchronous_queue.rb +29 -39
- data/lib/logstash/version.rb +10 -8
- data/locales/en.yml +3 -54
- data/logstash-core.gemspec +8 -35
- data/spec/{logstash/api/modules → api/lib/api}/logging_spec.rb +10 -1
- data/spec/{logstash/api/modules → api/lib/api}/node_plugins_spec.rb +2 -1
- data/spec/{logstash/api/modules → api/lib/api}/node_spec.rb +3 -3
- data/spec/{logstash/api/modules → api/lib/api}/node_stats_spec.rb +3 -7
- data/spec/{logstash/api/modules → api/lib/api}/plugins_spec.rb +3 -4
- data/spec/{logstash/api/modules → api/lib/api}/root_spec.rb +2 -2
- data/spec/api/lib/api/support/resource_dsl_methods.rb +87 -0
- data/spec/{logstash/api/commands/stats_spec.rb → api/lib/commands/stats.rb} +2 -7
- data/spec/{logstash/api → api/lib}/errors_spec.rb +1 -1
- data/spec/{logstash/api → api/lib}/rack_app_spec.rb +0 -0
- data/spec/api/spec_helper.rb +106 -0
- data/spec/logstash/agent/converge_spec.rb +286 -0
- data/spec/logstash/agent/metrics_spec.rb +244 -0
- data/spec/logstash/agent_spec.rb +213 -225
- data/spec/logstash/compiler/compiler_spec.rb +584 -0
- data/spec/logstash/config/config_ast_spec.rb +8 -47
- data/spec/logstash/config/mixin_spec.rb +2 -42
- data/spec/logstash/config/pipeline_config_spec.rb +75 -0
- data/spec/logstash/config/source/local_spec.rb +395 -0
- data/spec/logstash/config/source_loader_spec.rb +122 -0
- data/spec/logstash/converge_result_spec.rb +179 -0
- data/spec/logstash/event_spec.rb +0 -66
- data/spec/logstash/execution_context_spec.rb +8 -12
- data/spec/logstash/filter_delegator_spec.rb +12 -24
- data/spec/logstash/inputs/base_spec.rb +7 -5
- data/spec/logstash/instrument/periodic_poller/cgroup_spec.rb +92 -225
- data/spec/logstash/instrument/periodic_poller/jvm_spec.rb +1 -1
- data/spec/logstash/instrument/periodic_poller/os_spec.rb +32 -29
- data/spec/logstash/instrument/wrapped_write_client_spec.rb +33 -33
- data/spec/logstash/legacy_ruby_event_spec.rb +13 -4
- data/spec/logstash/output_delegator_spec.rb +11 -20
- data/spec/logstash/outputs/base_spec.rb +7 -5
- data/spec/logstash/pipeline_action/create_spec.rb +83 -0
- data/spec/logstash/pipeline_action/reload_spec.rb +83 -0
- data/spec/logstash/pipeline_action/stop_spec.rb +37 -0
- data/spec/logstash/pipeline_pq_file_spec.rb +1 -1
- data/spec/logstash/pipeline_spec.rb +81 -137
- data/spec/logstash/plugin_spec.rb +2 -1
- data/spec/logstash/plugins/hooks_registry_spec.rb +6 -0
- data/spec/logstash/queue_factory_spec.rb +13 -1
- data/spec/logstash/runner_spec.rb +29 -140
- data/spec/logstash/settings/writable_directory_spec.rb +10 -13
- data/spec/logstash/settings_spec.rb +0 -91
- data/spec/logstash/state_resolver_spec.rb +156 -0
- data/spec/logstash/timestamp_spec.rb +2 -6
- data/spec/logstash/util/java_version_spec.rb +22 -0
- data/spec/logstash/util/safe_uri_spec.rb +0 -56
- data/spec/logstash/util/wrapped_synchronous_queue_spec.rb +22 -0
- data/spec/support/helpers.rb +9 -11
- data/spec/support/matchers.rb +96 -6
- data/spec/support/mocks_classes.rb +80 -0
- data/spec/support/shared_contexts.rb +2 -27
- metadata +100 -149
- data/lib/logstash/config/loader.rb +0 -107
- data/lib/logstash/config/modules_common.rb +0 -103
- data/lib/logstash/config/source/modules.rb +0 -55
- data/lib/logstash/config/string_escape.rb +0 -27
- data/lib/logstash/dependency_report.rb +0 -131
- data/lib/logstash/dependency_report_runner.rb +0 -17
- data/lib/logstash/elasticsearch_client.rb +0 -142
- data/lib/logstash/instrument/global_metrics.rb +0 -13
- data/lib/logstash/instrument/periodic_poller/dlq.rb +0 -24
- data/lib/logstash/modules/cli_parser.rb +0 -74
- data/lib/logstash/modules/elasticsearch_config.rb +0 -22
- data/lib/logstash/modules/elasticsearch_importer.rb +0 -37
- data/lib/logstash/modules/elasticsearch_resource.rb +0 -10
- data/lib/logstash/modules/file_reader.rb +0 -36
- data/lib/logstash/modules/kibana_base.rb +0 -24
- data/lib/logstash/modules/kibana_client.rb +0 -124
- data/lib/logstash/modules/kibana_config.rb +0 -105
- data/lib/logstash/modules/kibana_dashboards.rb +0 -36
- data/lib/logstash/modules/kibana_importer.rb +0 -17
- data/lib/logstash/modules/kibana_resource.rb +0 -10
- data/lib/logstash/modules/kibana_settings.rb +0 -40
- data/lib/logstash/modules/logstash_config.rb +0 -120
- data/lib/logstash/modules/resource_base.rb +0 -38
- data/lib/logstash/modules/scaffold.rb +0 -52
- data/lib/logstash/modules/settings_merger.rb +0 -23
- data/lib/logstash/modules/util.rb +0 -17
- data/lib/logstash/util/dead_letter_queue_manager.rb +0 -61
- data/lib/logstash/util/environment_variables.rb +0 -43
- data/spec/logstash/config/loader_spec.rb +0 -38
- data/spec/logstash/config/string_escape_spec.rb +0 -24
- data/spec/logstash/instrument/periodic_poller/dlq_spec.rb +0 -17
- data/spec/logstash/modules/logstash_config_spec.rb +0 -56
- data/spec/logstash/modules/scaffold_spec.rb +0 -234
- data/spec/logstash/pipeline_dlq_commit_spec.rb +0 -109
- data/spec/logstash/settings/splittable_string_array_spec.rb +0 -51
- data/spec/logstash/util/wrapped_acked_queue_spec.rb +0 -49
- data/versions-gem-copy.yml +0 -12
@@ -1,24 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require 'logstash/instrument/periodic_poller/base'
|
3
|
-
|
4
|
-
module LogStash module Instrument module PeriodicPoller
|
5
|
-
class DeadLetterQueue < Base
|
6
|
-
def initialize(metric, agent, options = {})
|
7
|
-
super(metric, options)
|
8
|
-
@metric = metric
|
9
|
-
@agent = agent
|
10
|
-
end
|
11
|
-
|
12
|
-
def collect
|
13
|
-
pipelines = @agent.get_running_user_defined_pipelines
|
14
|
-
unless pipelines.nil?
|
15
|
-
pipelines.each {|_, pipeline|
|
16
|
-
unless pipeline.nil?
|
17
|
-
pipeline.collect_dlq_stats
|
18
|
-
end
|
19
|
-
}
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end end end
|
24
|
-
|
@@ -1,74 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require "logstash/namespace"
|
3
|
-
require "logstash/logging"
|
4
|
-
require "logstash/errors"
|
5
|
-
|
6
|
-
module LogStash module Modules class CLIParser
|
7
|
-
include LogStash::Util::Loggable
|
8
|
-
|
9
|
-
attr_reader :output
|
10
|
-
def initialize(module_names, module_variables)
|
11
|
-
@output = []
|
12
|
-
# The #compact here catches instances when module_variables may be nil or
|
13
|
-
# [nil] and sets it to []
|
14
|
-
parse_it(module_names, Array(module_variables).compact)
|
15
|
-
end
|
16
|
-
|
17
|
-
def parse_modules(module_list)
|
18
|
-
parsed_modules = []
|
19
|
-
module_list.each do |module_value|
|
20
|
-
# Calling --modules but not filling it results in [nil], so skip that.
|
21
|
-
next if module_value.nil?
|
22
|
-
# Catch if --modules was launched empty but an option/flag (-something)
|
23
|
-
# follows immediately after
|
24
|
-
if module_value.start_with?('-')
|
25
|
-
raise LogStash::ConfigLoadingError, I18n.t("logstash.modules.configuration.modules-invalid-name", :module_name => module_value)
|
26
|
-
end
|
27
|
-
parsed_modules.concat module_value.split(',')
|
28
|
-
end
|
29
|
-
parsed_modules
|
30
|
-
end
|
31
|
-
|
32
|
-
def get_kv(module_name, unparsed)
|
33
|
-
# Ensure that there is at least 1 equals sign in our variable string
|
34
|
-
# Using String#partition to split on the first '='
|
35
|
-
# This hackery is to catch the possibility of an equals (`=`) sign
|
36
|
-
# in a passphrase, which might result in an incomplete key. The
|
37
|
-
# portion before the first `=` should always be the key, leaving
|
38
|
-
# the rest to be the value
|
39
|
-
k, op, rest = unparsed.partition('=')
|
40
|
-
if rest.size.zero?
|
41
|
-
raise LogStash::ConfigLoadingError, I18n.t("logstash.modules.configuration.modules-variables-malformed", :rawvar => (module_name + '.' + unparsed))
|
42
|
-
end
|
43
|
-
return k.strip, rest.strip
|
44
|
-
end
|
45
|
-
|
46
|
-
def name_splitter(unparsed)
|
47
|
-
# It must have at least `modulename.something`
|
48
|
-
module_name, dot, rest = unparsed.partition('.')
|
49
|
-
if rest.count('.') >= 1
|
50
|
-
return module_name, rest
|
51
|
-
else
|
52
|
-
raise LogStash::ConfigLoadingError, I18n.t("logstash.modules.configuration.modules-variables-malformed", :rawvar => unparsed)
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
def parse_vars(module_name, vars_list)
|
57
|
-
module_hash = {"name" => module_name}
|
58
|
-
vars_list.each do |unparsed|
|
59
|
-
extracted_name, modvar = name_splitter(unparsed)
|
60
|
-
next if extracted_name != module_name
|
61
|
-
k, v = get_kv(extracted_name, modvar)
|
62
|
-
module_hash[k] = v
|
63
|
-
end
|
64
|
-
module_hash
|
65
|
-
end
|
66
|
-
|
67
|
-
def parse_it(module_list, module_variable_list)
|
68
|
-
if module_list.is_a?(Array)
|
69
|
-
parse_modules(module_list).each do |module_name|
|
70
|
-
@output << parse_vars(module_name, module_variable_list)
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end end end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require "logstash/namespace"
|
3
|
-
require "logstash/logging"
|
4
|
-
|
5
|
-
require_relative "elasticsearch_resource"
|
6
|
-
|
7
|
-
module LogStash module Modules class ElasticsearchConfig
|
8
|
-
attr_reader :index_name
|
9
|
-
|
10
|
-
# We name it `modul` here because `module` has meaning in Ruby.
|
11
|
-
def initialize(modul, settings)
|
12
|
-
@directory = ::File.join(modul.directory, "elasticsearch")
|
13
|
-
@name = modul.module_name
|
14
|
-
@settings = settings
|
15
|
-
@full_path = ::File.join(@directory, "#{@name}.json")
|
16
|
-
@index_name = @settings.fetch("elasticsearch.template_path", "_template")
|
17
|
-
end
|
18
|
-
|
19
|
-
def resources
|
20
|
-
[ElasticsearchResource.new(@index_name, "not-used", @full_path)]
|
21
|
-
end
|
22
|
-
end end end
|
@@ -1,37 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require "logstash/namespace"
|
3
|
-
require "logstash/logging"
|
4
|
-
|
5
|
-
module LogStash module Modules class ElasticsearchImporter
|
6
|
-
include LogStash::Util::Loggable
|
7
|
-
|
8
|
-
def initialize(client)
|
9
|
-
@client = client
|
10
|
-
end
|
11
|
-
|
12
|
-
def put(resource, overwrite = true)
|
13
|
-
path = resource.import_path
|
14
|
-
logger.debug("Attempting PUT", :url_path => path, :file_path => resource.content_path)
|
15
|
-
if !overwrite && content_exists?(path)
|
16
|
-
logger.debug("Found existing Elasticsearch resource.", :resource => path)
|
17
|
-
return
|
18
|
-
end
|
19
|
-
put_overwrite(path, resource.content)
|
20
|
-
end
|
21
|
-
|
22
|
-
private
|
23
|
-
|
24
|
-
def put_overwrite(path, content)
|
25
|
-
if content_exists?(path)
|
26
|
-
response = @client.delete(path)
|
27
|
-
end
|
28
|
-
# hmmm, versioning?
|
29
|
-
@client.put(path, content).status == 201
|
30
|
-
end
|
31
|
-
|
32
|
-
def content_exists?(path)
|
33
|
-
response = @client.head(path)
|
34
|
-
response.status >= 200 && response.status < 300
|
35
|
-
end
|
36
|
-
|
37
|
-
end end end # class LogStash::Modules::Importer
|
@@ -1,36 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require "logstash/namespace"
|
3
|
-
require "logstash/logging"
|
4
|
-
require "logstash/json"
|
5
|
-
|
6
|
-
module LogStash module Modules class FileReader
|
7
|
-
# stub these methods for testing
|
8
|
-
include LogStash::Util::Loggable
|
9
|
-
|
10
|
-
def self.read(path)
|
11
|
-
begin
|
12
|
-
::File.read(path)
|
13
|
-
rescue => e
|
14
|
-
logger.error("Error when reading file from path", :path => path)
|
15
|
-
""
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
def self.read_json(path)
|
20
|
-
json = read(path)
|
21
|
-
begin
|
22
|
-
LogStash::Json.load(json)
|
23
|
-
rescue => e
|
24
|
-
logger.error("Error when parsing json from path", :path => path)
|
25
|
-
return {}
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
def self.glob(path)
|
30
|
-
files = Dir.glob(path)
|
31
|
-
if files.empty?
|
32
|
-
logger.warn("No files found for glob", :pattern => path)
|
33
|
-
end
|
34
|
-
files
|
35
|
-
end
|
36
|
-
end end end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require "logstash/namespace"
|
3
|
-
require "logstash/json"
|
4
|
-
|
5
|
-
module LogStash module Modules class KibanaBase
|
6
|
-
attr_reader :import_path, :content
|
7
|
-
|
8
|
-
def initialize(import_path, content)
|
9
|
-
@import_path, @content = import_path, content
|
10
|
-
end
|
11
|
-
|
12
|
-
def import(client)
|
13
|
-
raise NotImplementedError, "#{self.class.name} needs to implement `#import`"
|
14
|
-
end
|
15
|
-
|
16
|
-
def to_s
|
17
|
-
import_path
|
18
|
-
end
|
19
|
-
|
20
|
-
def content_as_object
|
21
|
-
return content unless content.is_a?(String)
|
22
|
-
LogStash::Json.load(content) rescue nil
|
23
|
-
end
|
24
|
-
end end end
|
@@ -1,124 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require "logstash/namespace"
|
3
|
-
require "logstash/logging"
|
4
|
-
require "logstash/json"
|
5
|
-
require "manticore/client"
|
6
|
-
|
7
|
-
module LogStash module Modules class KibanaClient
|
8
|
-
include LogStash::Util::Loggable
|
9
|
-
|
10
|
-
class Response
|
11
|
-
# to create a custom response with body as an Object (Hash or Array)
|
12
|
-
attr_reader :status, :body, :headers
|
13
|
-
def initialize(status, body, headers={})
|
14
|
-
@status, @body, @headers = status, body, headers
|
15
|
-
@body = body.is_a?(String) ? LogStash::Json.load(body) : body
|
16
|
-
end
|
17
|
-
|
18
|
-
def succeeded?
|
19
|
-
@status >= 200 && @status < 300
|
20
|
-
end
|
21
|
-
|
22
|
-
def failed?
|
23
|
-
!succeeded?
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
attr_reader :version
|
28
|
-
|
29
|
-
def initialize(settings)
|
30
|
-
@settings = settings
|
31
|
-
|
32
|
-
client_options = {
|
33
|
-
request_timeout: 5,
|
34
|
-
connect_timeout: 5,
|
35
|
-
socket_timeout: 5,
|
36
|
-
pool_max: 10,
|
37
|
-
pool_max_per_route: 2
|
38
|
-
}
|
39
|
-
|
40
|
-
ssl_options = {}
|
41
|
-
|
42
|
-
if @settings["var.kibana.ssl.enabled"] == "true"
|
43
|
-
ssl_options[:verify] = @settings.fetch("var.kibana.ssl.verification_mode", "strict").to_sym
|
44
|
-
ssl_options[:ca_file] = @settings.fetch("var.kibana.ssl.certificate_authority", nil)
|
45
|
-
ssl_options[:client_cert] = @settings.fetch("var.kibana.ssl.certificate", nil)
|
46
|
-
ssl_options[:client_key] = @settings.fetch("var.kibana.ssl.key", nil)
|
47
|
-
end
|
48
|
-
|
49
|
-
client_options[:ssl] = ssl_options
|
50
|
-
|
51
|
-
@client = Manticore::Client.new(client_options)
|
52
|
-
@host = @settings.fetch("var.kibana.host", "localhost:5601")
|
53
|
-
username = @settings["var.kibana.username"]
|
54
|
-
password = @settings["var.kibana.password"]
|
55
|
-
|
56
|
-
@scheme = @settings.fetch("var.kibana.scheme", "http")
|
57
|
-
@http_options = {:headers => {'Content-Type' => 'application/json'}}
|
58
|
-
if username
|
59
|
-
@http_options[:headers]['Authorization'] = 'Basic ' + Base64.encode64( "#{username}:#{password}" ).chomp
|
60
|
-
end
|
61
|
-
|
62
|
-
# e.g. {"name":"Elastics-MacBook-Pro.local","version":{"number":"6.0.0-alpha3","build_hash":"41e69","build_number":15613,"build_snapshot":true}..}
|
63
|
-
@version = "0.0.0"
|
64
|
-
response = get("api/status")
|
65
|
-
if response.succeeded?
|
66
|
-
status = response.body
|
67
|
-
if status["version"].is_a?(Hash)
|
68
|
-
@version = status["version"]["number"]
|
69
|
-
if status["version"]["build_snapshot"]
|
70
|
-
@version.concat("-SNAPSHOT")
|
71
|
-
end
|
72
|
-
else
|
73
|
-
@version = status["version"]
|
74
|
-
end
|
75
|
-
end
|
76
|
-
@http_options[:headers]['kbn-version'] = @version
|
77
|
-
end
|
78
|
-
|
79
|
-
def version_parts
|
80
|
-
@version.split(/\.|\-/)
|
81
|
-
end
|
82
|
-
|
83
|
-
def host_settings
|
84
|
-
"[\"#{@host}\"]"
|
85
|
-
end
|
86
|
-
|
87
|
-
def get(relative_path)
|
88
|
-
# e.g. api/kibana/settings
|
89
|
-
safely(:get, relative_path, @http_options)
|
90
|
-
end
|
91
|
-
|
92
|
-
# content will be converted to a json string
|
93
|
-
def post(relative_path, content, headers = nil)
|
94
|
-
|
95
|
-
body = content.is_a?(String) ? content : LogStash::Json.dump(content)
|
96
|
-
options = {:body => body}.merge(headers || @http_options)
|
97
|
-
safely(:post, relative_path, options)
|
98
|
-
end
|
99
|
-
|
100
|
-
def head(relative_path)
|
101
|
-
safely(:head, relative_path, @http_options)
|
102
|
-
end
|
103
|
-
|
104
|
-
def can_connect?
|
105
|
-
head("api/status").succeeded?
|
106
|
-
end
|
107
|
-
|
108
|
-
private
|
109
|
-
|
110
|
-
def safely(method_sym, relative_path, options = {})
|
111
|
-
begin
|
112
|
-
resp = @client.http(method_sym, full_url(relative_path), options).call
|
113
|
-
Response.new(resp.code, resp.body, resp.headers)
|
114
|
-
rescue Manticore::ManticoreException => e
|
115
|
-
logger.error("Error when executing Kibana client request", :error => e)
|
116
|
-
body = {"statusCode" => 0, "error" => e.message}
|
117
|
-
Response.new(0, body, {})
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
|
-
def full_url(relative)
|
122
|
-
"#{@scheme}://#{@host}/#{relative}"
|
123
|
-
end
|
124
|
-
end end end
|
@@ -1,105 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require "logstash/namespace"
|
3
|
-
require "logstash/logging"
|
4
|
-
|
5
|
-
require_relative "file_reader"
|
6
|
-
require_relative "kibana_settings"
|
7
|
-
require_relative "kibana_dashboards"
|
8
|
-
require_relative "kibana_resource"
|
9
|
-
|
10
|
-
module LogStash module Modules class KibanaConfig
|
11
|
-
include LogStash::Util::Loggable
|
12
|
-
|
13
|
-
ALLOWED_DIRECTORIES = ["search", "visualization"]
|
14
|
-
attr_reader :index_name # not used when importing via kibana but for BWC with ElastsearchConfig
|
15
|
-
|
16
|
-
# We name it `modul` here because `module` has meaning in Ruby.
|
17
|
-
def initialize(modul, settings)
|
18
|
-
@directory = ::File.join(modul.directory, "kibana")
|
19
|
-
@name = modul.module_name
|
20
|
-
@settings = settings
|
21
|
-
@index_name = "kibana"
|
22
|
-
@pattern_name = "#{@name}-*"
|
23
|
-
@kibana_settings = [
|
24
|
-
KibanaSettings::Setting.new("defaultIndex", @pattern_name)
|
25
|
-
]
|
26
|
-
end
|
27
|
-
|
28
|
-
def dashboards
|
29
|
-
# there can be more than one dashboard to load
|
30
|
-
filenames = FileReader.read_json(dynamic("dashboard"))
|
31
|
-
filenames.map do |filename|
|
32
|
-
KibanaResource.new(@index_name, "dashboard", dynamic("dashboard", filename))
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
def index_pattern
|
37
|
-
[KibanaResource.new(@index_name, "index-pattern", dynamic("index-pattern"),nil, @pattern_name)]
|
38
|
-
end
|
39
|
-
|
40
|
-
def resources
|
41
|
-
list = index_pattern
|
42
|
-
dashboards.each do |board|
|
43
|
-
list << board
|
44
|
-
extract_panels_into(board, list)
|
45
|
-
end
|
46
|
-
list.concat(extract_saved_searches_into(list))
|
47
|
-
[
|
48
|
-
KibanaSettings.new("api/kibana/settings", @kibana_settings),
|
49
|
-
KibanaDashboards.new("api/kibana/dashboards/import", list)
|
50
|
-
]
|
51
|
-
end
|
52
|
-
|
53
|
-
private
|
54
|
-
|
55
|
-
def dynamic(dynamic_folder, filename = @name)
|
56
|
-
::File.join(@directory, dynamic_folder, "#{filename}.json")
|
57
|
-
end
|
58
|
-
|
59
|
-
def extract_panels_into(dashboard, list)
|
60
|
-
dash = dashboard.content_as_object
|
61
|
-
|
62
|
-
if !dash.is_a?(Hash)
|
63
|
-
logger.warn("Kibana dashboard JSON is not an Object", :module => @name)
|
64
|
-
return
|
65
|
-
end
|
66
|
-
|
67
|
-
panelsjson = dash["panelsJSON"]
|
68
|
-
|
69
|
-
if panelsjson.nil?
|
70
|
-
logger.info("No panelJSON key found in kibana dashboard", :module => @name)
|
71
|
-
return
|
72
|
-
end
|
73
|
-
|
74
|
-
begin
|
75
|
-
panels = LogStash::Json.load(panelsjson)
|
76
|
-
rescue => e
|
77
|
-
logger.error("JSON parse error when reading kibana panelsJSON", :module => @name)
|
78
|
-
return
|
79
|
-
end
|
80
|
-
|
81
|
-
panels.each do |panel|
|
82
|
-
panel_type = panel["type"]
|
83
|
-
if ALLOWED_DIRECTORIES.member?(panel_type)
|
84
|
-
list << KibanaResource.new(@index_name, panel_type, dynamic(panel_type, panel["id"]))
|
85
|
-
else
|
86
|
-
logger.warn("panelJSON contained unknown type", :type => panel_type)
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
def extract_saved_searches_into(list)
|
92
|
-
result = [] # must not add to list while iterating
|
93
|
-
list.each do |resource|
|
94
|
-
content = resource.content_as_object
|
95
|
-
next if content.nil?
|
96
|
-
next unless content.keys.include?("savedSearchId")
|
97
|
-
saved_search = content["savedSearchId"]
|
98
|
-
next if saved_search.nil?
|
99
|
-
ss_resource = KibanaResource.new(@index_name, "search", dynamic("search", saved_search))
|
100
|
-
next if list.member?(ss_resource) || result.member?(ss_resource)
|
101
|
-
result << ss_resource
|
102
|
-
end
|
103
|
-
result
|
104
|
-
end
|
105
|
-
end end end
|