logstash-core 5.6.16-java → 6.0.0.alpha1-java
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/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
|