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,38 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require "spec_helper"
|
3
|
-
require "logstash/config/loader"
|
4
|
-
|
5
|
-
describe LogStash::Config::Loader do
|
6
|
-
let(:logger) { double("logger") }
|
7
|
-
subject { described_class.new(logger) }
|
8
|
-
|
9
|
-
context "when local" do
|
10
|
-
before { expect(subject).to receive(:local_config).with(path) }
|
11
|
-
|
12
|
-
context "unix" do
|
13
|
-
let(:path) { './test.conf' }
|
14
|
-
it 'works with relative path' do
|
15
|
-
subject.load_config(path)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
context "windows" do
|
20
|
-
let(:path) { '.\test.conf' }
|
21
|
-
it 'work with relative windows path' do
|
22
|
-
subject.load_config(path)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
context "when remote" do
|
28
|
-
context 'supported scheme' do
|
29
|
-
let(:path) { "http://test.local/superconfig.conf" }
|
30
|
-
let(:dummy_config) { 'input {}' }
|
31
|
-
|
32
|
-
before { expect(Net::HTTP).to receive(:get) { dummy_config } }
|
33
|
-
it 'works with http' do
|
34
|
-
expect(subject.load_config(path)).to eq("#{dummy_config}\n")
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
|
2
|
-
require "logstash/config/string_escape"
|
3
|
-
|
4
|
-
describe LogStash::Config::StringEscape do
|
5
|
-
let(:result) { described_class.process_escapes(text) }
|
6
|
-
|
7
|
-
table = {
|
8
|
-
'\\"' => '"',
|
9
|
-
"\\'" => "'",
|
10
|
-
"\\n" => "\n",
|
11
|
-
"\\r" => "\r",
|
12
|
-
"\\t" => "\t",
|
13
|
-
"\\\\" => "\\",
|
14
|
-
}
|
15
|
-
|
16
|
-
table.each do |input, expected|
|
17
|
-
context "when processing #{input.inspect}" do
|
18
|
-
let(:text) { input }
|
19
|
-
it "should produce #{expected.inspect}" do
|
20
|
-
expect(result).to be == expected
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require "spec_helper"
|
3
|
-
require "logstash/instrument/periodic_poller/dlq"
|
4
|
-
require "logstash/instrument/collector"
|
5
|
-
|
6
|
-
describe LogStash::Instrument::PeriodicPoller::DeadLetterQueue do
|
7
|
-
subject { LogStash::Instrument::PeriodicPoller::DeadLetterQueue }
|
8
|
-
|
9
|
-
let(:metric) { LogStash::Instrument::Metric.new(LogStash::Instrument::Collector.new) }
|
10
|
-
let(:agent) { double("agent")}
|
11
|
-
let(:options) { {} }
|
12
|
-
subject(:dlq) { described_class.new(metric, agent, options) }
|
13
|
-
|
14
|
-
it "should initialize cleanly" do
|
15
|
-
expect { dlq }.not_to raise_error
|
16
|
-
end
|
17
|
-
end
|
@@ -1,56 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require "logstash/modules/logstash_config"
|
3
|
-
|
4
|
-
describe LogStash::Modules::LogStashConfig do
|
5
|
-
let(:mod) { instance_double("Modules", :directory => Stud::Temporary.directory, :module_name => "testing") }
|
6
|
-
let(:settings) { {"var.logstash.testing.pants" => "fancy" }}
|
7
|
-
subject { described_class.new(mod, settings) }
|
8
|
-
|
9
|
-
describe "configured inputs" do
|
10
|
-
context "when no inputs is send" do
|
11
|
-
it "returns the default" do
|
12
|
-
expect(subject.configured_inputs(["kafka"])).to include("kafka")
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
context "when inputs are send" do
|
17
|
-
let(:settings) { { "var.inputs" => "tcp" } }
|
18
|
-
|
19
|
-
it "returns the configured inputs" do
|
20
|
-
expect(subject.configured_inputs(["kafka"])).to include("tcp")
|
21
|
-
end
|
22
|
-
|
23
|
-
context "when alias is specified" do
|
24
|
-
let(:settings) { { "var.inputs" => "smartconnector" } }
|
25
|
-
|
26
|
-
it "returns the configured inputs" do
|
27
|
-
expect(subject.configured_inputs(["kafka"], { "smartconnector" => "tcp" })).to include("tcp", "smartconnector")
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
describe "array to logstash array string" do
|
34
|
-
it "return an escaped string" do
|
35
|
-
expect(subject.array_to_string(["hello", "ninja"])).to eq("['hello', 'ninja']")
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
describe "alias modules options" do
|
40
|
-
let(:alias_table) do
|
41
|
-
{ "var.logstash.testing" => "var.logstash.better" }
|
42
|
-
end
|
43
|
-
|
44
|
-
before do
|
45
|
-
subject.alias_settings_keys!(alias_table)
|
46
|
-
end
|
47
|
-
|
48
|
-
it "allow to retrieve settings" do
|
49
|
-
expect(subject.setting("var.logstash.better.pants", "dont-exist")).to eq("fancy")
|
50
|
-
end
|
51
|
-
|
52
|
-
it "allow to retrieve settings with the original name" do
|
53
|
-
expect(subject.setting("var.logstash.testing.pants", "dont-exist")).to eq("fancy")
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
@@ -1,234 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
#
|
3
|
-
require "logstash/namespace"
|
4
|
-
require "logstash/elasticsearch_client"
|
5
|
-
require "logstash/modules/kibana_client"
|
6
|
-
require "logstash/modules/kibana_config"
|
7
|
-
require "logstash/modules/scaffold"
|
8
|
-
require "logstash/modules/elasticsearch_importer"
|
9
|
-
require "logstash/modules/kibana_importer"
|
10
|
-
|
11
|
-
require_relative "../../support/helpers"
|
12
|
-
|
13
|
-
describe LogStash::Modules::Scaffold do
|
14
|
-
let(:base_dir) { "gem-home" }
|
15
|
-
let(:mname) { "foo" }
|
16
|
-
subject(:test_module) { described_class.new(mname, base_dir) }
|
17
|
-
let(:module_settings) do
|
18
|
-
{
|
19
|
-
"var.elasticsearch.hosts" => "es.mycloud.com:9200",
|
20
|
-
"var.elasticsearch.user" => "foo",
|
21
|
-
"var.elasticsearch.password" => "password",
|
22
|
-
"var.input.tcp.port" => 5606,
|
23
|
-
}
|
24
|
-
end
|
25
|
-
let(:dashboard_hash) do
|
26
|
-
{
|
27
|
-
"hits" => 0,
|
28
|
-
"timeRestore" => false,
|
29
|
-
"description" => "",
|
30
|
-
"title" => "Filebeat Apache2 Dashboard",
|
31
|
-
"uiStateJSON" => "{}",
|
32
|
-
"panelsJSON" => '[{"col":1,"id":"foo-c","panelIndex":1,"row":1,"size_x":12,"size_y":3,"type":"visualization"},{"id":"foo-d","type":"search","panelIndex":7,"size_x":12,"size_y":3,"col":1,"row":11,"columns":["apache2.error.client","apache2.error.level","apache2.error.module","apache2.error.message"],"sort":["@timestamp","desc"]}]',
|
33
|
-
"optionsJSON" => "{}",
|
34
|
-
"version" => 1,
|
35
|
-
"kibanaSavedObjectMeta" => {
|
36
|
-
"searchSourceJSON" => "{}"
|
37
|
-
}
|
38
|
-
}
|
39
|
-
end
|
40
|
-
let(:viz_hash) do
|
41
|
-
{
|
42
|
-
"visState" => "",
|
43
|
-
"description" => "",
|
44
|
-
"title" => "foo-c",
|
45
|
-
"uiStateJSON" => "",
|
46
|
-
"version" => 1,
|
47
|
-
"savedSearchId" => "foo-e",
|
48
|
-
"kibanaSavedObjectMeta" => {}
|
49
|
-
}
|
50
|
-
end
|
51
|
-
let(:index_pattern_hash) do
|
52
|
-
{
|
53
|
-
"title" => "foo-*",
|
54
|
-
"timeFieldName" =>"time",
|
55
|
-
"fieldFormatMap" => "{some map}",
|
56
|
-
"fields" => "[some array]"
|
57
|
-
}
|
58
|
-
end
|
59
|
-
context "logstash operation" do
|
60
|
-
let(:ls_conf) do
|
61
|
-
<<-ERB
|
62
|
-
input {
|
63
|
-
tcp {
|
64
|
-
port => <%= setting("var.input.tcp.port", 45) %>
|
65
|
-
host => <%= setting("var.input.tcp.host", "localhost") %>
|
66
|
-
type => <%= setting("var.input.tcp.type", "server") %>
|
67
|
-
}
|
68
|
-
}
|
69
|
-
filter {
|
70
|
-
|
71
|
-
}
|
72
|
-
output {
|
73
|
-
<%= elasticsearch_output_config() %>
|
74
|
-
}
|
75
|
-
ERB
|
76
|
-
end
|
77
|
-
|
78
|
-
before do
|
79
|
-
allow(LogStash::Modules::FileReader).to receive(:read).and_return(ls_conf)
|
80
|
-
end
|
81
|
-
|
82
|
-
it "provides a logstash config" do
|
83
|
-
expect(test_module.logstash_configuration).to be_nil
|
84
|
-
test_module.with_settings(module_settings)
|
85
|
-
expect(test_module.logstash_configuration).not_to be_nil
|
86
|
-
config_string = test_module.config_string
|
87
|
-
expect(config_string).to include("port => 5606")
|
88
|
-
expect(config_string).to include("hosts => ['es.mycloud.com:9200']")
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
context "elasticsearch operation" do
|
93
|
-
it "provides the elasticsearch mapping file paths" do
|
94
|
-
test_module.with_settings(module_settings)
|
95
|
-
expect(test_module.elasticsearch_configuration).not_to be_nil
|
96
|
-
files = test_module.elasticsearch_configuration.resources
|
97
|
-
expect(files.size).to eq(1)
|
98
|
-
expect(files.first).to be_a(LogStash::Modules::ElasticsearchResource)
|
99
|
-
expect(files.first.content_path).to eq("gem-home/elasticsearch/foo.json")
|
100
|
-
expect(files.first.import_path).to eq("_template/foo")
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
104
|
-
context "kibana operation" do
|
105
|
-
before do
|
106
|
-
# allow(LogStash::Modules::FileReader).to receive(:read_json).and_return({})
|
107
|
-
allow(LogStash::Modules::FileReader).to receive(:read_json).with("gem-home/kibana/dashboard/foo.json").and_return(["Foo-Dashboard"])
|
108
|
-
allow(LogStash::Modules::FileReader).to receive(:read_json).with("gem-home/kibana/dashboard/Foo-Dashboard.json").and_return(dashboard_hash)
|
109
|
-
allow(LogStash::Modules::FileReader).to receive(:read_json).with("gem-home/kibana/visualization/foo-c.json").and_return(viz_hash)
|
110
|
-
allow(LogStash::Modules::FileReader).to receive(:read_json).with("gem-home/kibana/search/foo-d.json").and_return({"d" => "search"})
|
111
|
-
allow(LogStash::Modules::FileReader).to receive(:read_json).with("gem-home/kibana/search/foo-e.json").and_return({"e" => "search"})
|
112
|
-
allow(LogStash::Modules::FileReader).to receive(:read_json).with("gem-home/kibana/index-pattern/foo.json").and_return(index_pattern_hash)
|
113
|
-
end
|
114
|
-
|
115
|
-
it "provides a list of importable files" do
|
116
|
-
expect(test_module.kibana_configuration).to be_nil
|
117
|
-
test_module.with_settings(module_settings)
|
118
|
-
expect(test_module.kibana_configuration).not_to be_nil
|
119
|
-
resources = test_module.kibana_configuration.resources
|
120
|
-
expect(resources.size).to eq(2)
|
121
|
-
resource1 = resources[0]
|
122
|
-
resource2 = resources[1]
|
123
|
-
expect(resource1).to be_a(LogStash::Modules::KibanaSettings)
|
124
|
-
expect(resource2).to be_a(LogStash::Modules::KibanaDashboards)
|
125
|
-
expect(resource1.import_path).to eq("api/kibana/settings")
|
126
|
-
expect(resource1.content).to be_a(Array)
|
127
|
-
expect(resource1.content.size).to eq(1)
|
128
|
-
|
129
|
-
test_object = resource1.content[0]
|
130
|
-
expect(test_object).to be_a(LogStash::Modules::KibanaSettings::Setting)
|
131
|
-
expect(test_object.name).to eq("defaultIndex")
|
132
|
-
expect(test_object.value).to eq("foo-*")
|
133
|
-
|
134
|
-
expect(resource2.import_path).to eq("api/kibana/dashboards/import")
|
135
|
-
expect(resource2.content).to be_a(Array)
|
136
|
-
expect(resource2.content.size).to eq(5)
|
137
|
-
expect(resource2.content.map{|o| o.class}.uniq).to eq([LogStash::Modules::KibanaResource])
|
138
|
-
|
139
|
-
test_object = resource2.content[0]
|
140
|
-
expect(test_object.content_id).to eq("foo-*")
|
141
|
-
expect(test_object.content_type).to eq("index-pattern")
|
142
|
-
expect(test_object.content_as_object).to eq(index_pattern_hash)
|
143
|
-
|
144
|
-
test_object = resource2.content[1]
|
145
|
-
expect(test_object.content_id).to eq("Foo-Dashboard")
|
146
|
-
expect(test_object.content_type).to eq("dashboard")
|
147
|
-
expect(test_object.content_as_object).to eq(dashboard_hash)
|
148
|
-
|
149
|
-
test_object = resource2.content[2]
|
150
|
-
expect(test_object.content_id).to eq("foo-c") #<- the panels can contain items from other folders
|
151
|
-
expect(test_object.content_type).to eq("visualization")
|
152
|
-
expect(test_object.content_as_object).to eq(viz_hash)
|
153
|
-
expect(test_object.content_as_object["savedSearchId"]).to eq("foo-e")
|
154
|
-
|
155
|
-
test_object = resource2.content[3]
|
156
|
-
expect(test_object.content_id).to eq("foo-d") #<- the panels can contain items from other folders
|
157
|
-
expect(test_object.content_type).to eq("search")
|
158
|
-
expect(test_object.content_as_object).to eq("d"=>"search")
|
159
|
-
|
160
|
-
test_object = resource2.content[4]
|
161
|
-
expect(test_object.content_id).to eq("foo-e") # <- the visualization can contain items from the search folder
|
162
|
-
expect(test_object.content_type).to eq("search")
|
163
|
-
expect(test_object.content_as_object).to eq("e"=>"search")
|
164
|
-
end
|
165
|
-
end
|
166
|
-
|
167
|
-
context "importing to elasticsearch stubbed client" do
|
168
|
-
let(:mname) { "tester" }
|
169
|
-
let(:base_dir) { File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "modules_test_files", "modules", "#{mname}", "configuration")) }
|
170
|
-
let(:response) { double(:response) }
|
171
|
-
let(:client) { double(:client) }
|
172
|
-
let(:kbnclient) { double(:kbnclient) }
|
173
|
-
let(:paths) { [] }
|
174
|
-
let(:expected_paths) { ["_template/tester", "api/kibana/settings", "api/kibana/dashboards/import"] }
|
175
|
-
let(:contents) { [] }
|
176
|
-
let(:expected_objects) do
|
177
|
-
[
|
178
|
-
"index-pattern tester-*",
|
179
|
-
"dashboard FW-Dashboard",
|
180
|
-
"visualization FW-Viz-1",
|
181
|
-
"visualization FW-Viz-2",
|
182
|
-
"search Search-Tester"
|
183
|
-
]
|
184
|
-
end
|
185
|
-
|
186
|
-
before do
|
187
|
-
allow(response).to receive(:status).and_return(404)
|
188
|
-
allow(client).to receive(:head).and_return(response)
|
189
|
-
allow(kbnclient).to receive(:version).and_return("9.8.7-6")
|
190
|
-
end
|
191
|
-
|
192
|
-
it "calls the import method" do
|
193
|
-
expect(client).to receive(:put).once do |path, content|
|
194
|
-
paths << path
|
195
|
-
LogStash::ElasticsearchClient::Response.new(201, "", {})
|
196
|
-
end
|
197
|
-
expect(kbnclient).to receive(:post).twice do |path, content|
|
198
|
-
paths << path
|
199
|
-
contents << content
|
200
|
-
LogStash::Modules::KibanaClient::Response.new(201, "", {})
|
201
|
-
end
|
202
|
-
test_module.with_settings(module_settings)
|
203
|
-
test_module.import(LogStash::Modules::ElasticsearchImporter.new(client), LogStash::Modules::KibanaImporter.new(kbnclient))
|
204
|
-
expect(paths).to eq(expected_paths)
|
205
|
-
expect(contents[0]).to eq({"changes"=>{"defaultIndex"=>"tester-*"}})
|
206
|
-
second_kbn_post = contents[1]
|
207
|
-
expect(second_kbn_post[:version]).to eq("9.8.7-6")
|
208
|
-
expect(second_kbn_post[:objects]).to be_a(Array)
|
209
|
-
expect(second_kbn_post[:objects].size).to eq(5)
|
210
|
-
objects_types_ids = second_kbn_post[:objects].map {|h| "#{h["type"]} #{h["id"]}"}
|
211
|
-
expect(objects_types_ids).to eq(expected_objects)
|
212
|
-
end
|
213
|
-
end
|
214
|
-
|
215
|
-
context "import 4 realz", :skip => "integration" do
|
216
|
-
let(:mname) { "cef" }
|
217
|
-
let(:base_dir) { File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "modules_test_files", "#{mname}")) }
|
218
|
-
let(:module_settings) do
|
219
|
-
{
|
220
|
-
"var.elasticsearch.hosts" => "localhost:9200",
|
221
|
-
"var.elasticsearch.user" => "foo",
|
222
|
-
"var.elasticsearch.password" => "password",
|
223
|
-
"var.input.tcp.port" => 5606,
|
224
|
-
}
|
225
|
-
end
|
226
|
-
it "puts stuff in ES" do
|
227
|
-
test_module.with_settings(module_settings)
|
228
|
-
client = LogStash::ElasticsearchClient.build(module_settings)
|
229
|
-
import_engine = LogStash::Modules::Importer.new(client)
|
230
|
-
test_module.import(import_engine)
|
231
|
-
expect(1).to eq(1)
|
232
|
-
end
|
233
|
-
end
|
234
|
-
end
|
@@ -1,109 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require "tmpdir"
|
3
|
-
require "spec_helper"
|
4
|
-
require "logstash/codecs/plain"
|
5
|
-
require_relative "../support/mocks_classes"
|
6
|
-
|
7
|
-
class SingleGeneratorInput < LogStash::Inputs::Base
|
8
|
-
config_name "singlegenerator"
|
9
|
-
milestone 2
|
10
|
-
|
11
|
-
def register
|
12
|
-
end
|
13
|
-
|
14
|
-
def run(queue)
|
15
|
-
queue << LogStash::Event.new
|
16
|
-
end
|
17
|
-
|
18
|
-
def close
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
class DLQCommittingFilter < LogStash::Filters::Base
|
23
|
-
config_name "dlq_commit"
|
24
|
-
milestone 2
|
25
|
-
|
26
|
-
def register()
|
27
|
-
end
|
28
|
-
|
29
|
-
def filter(event)
|
30
|
-
execution_context.dlq_writer.write(event, "my reason")
|
31
|
-
end
|
32
|
-
|
33
|
-
def threadsafe?() true; end
|
34
|
-
|
35
|
-
def close() end
|
36
|
-
end
|
37
|
-
|
38
|
-
describe LogStash::Pipeline do
|
39
|
-
let(:pipeline_settings_obj) { LogStash::SETTINGS }
|
40
|
-
let(:pipeline_settings) do
|
41
|
-
{
|
42
|
-
"pipeline.workers" => 2,
|
43
|
-
"pipeline.id" => pipeline_id,
|
44
|
-
"dead_letter_queue.enable" => enable_dlq,
|
45
|
-
"path.dead_letter_queue" => Dir.mktmpdir
|
46
|
-
}
|
47
|
-
end
|
48
|
-
let(:metric) { LogStash::Instrument::Metric.new(LogStash::Instrument::Collector.new) }
|
49
|
-
let(:test_config) {
|
50
|
-
<<-eos
|
51
|
-
input { singlegenerator { id => input_id } }
|
52
|
-
|
53
|
-
filter { dlq_commit { id => filter_id } }
|
54
|
-
|
55
|
-
output { dummyoutput { id => output_id } }
|
56
|
-
eos
|
57
|
-
}
|
58
|
-
|
59
|
-
subject { LogStash::Pipeline.new(test_config, pipeline_settings_obj, metric) }
|
60
|
-
|
61
|
-
before(:each) do
|
62
|
-
pipeline_settings.each {|k, v| pipeline_settings_obj.set(k, v) }
|
63
|
-
allow(LogStash::Plugin).to receive(:lookup).with("input", "singlegenerator").and_return(SingleGeneratorInput)
|
64
|
-
allow(LogStash::Plugin).to receive(:lookup).with("codec", "plain").and_return(LogStash::Codecs::Plain)
|
65
|
-
allow(LogStash::Plugin).to receive(:lookup).with("filter", "dlq_commit").and_return(DLQCommittingFilter)
|
66
|
-
allow(LogStash::Plugin).to receive(:lookup).with("output", "dummyoutput").and_return(::LogStash::Outputs::DummyOutput)
|
67
|
-
end
|
68
|
-
|
69
|
-
after(:each) do
|
70
|
-
FileUtils.rm_rf(pipeline_settings["path.dead_letter_queue"])
|
71
|
-
end
|
72
|
-
|
73
|
-
context "dlq is enabled" do
|
74
|
-
let(:enable_dlq) { true }
|
75
|
-
let(:pipeline_id) { "test-dlq" }
|
76
|
-
|
77
|
-
it "retrieves proper pipeline-level DLQ writer" do
|
78
|
-
expect(LogStash::Util::PluginDeadLetterQueueWriter).to receive(:new).with(anything, "input_id", "singlegenerator").and_call_original
|
79
|
-
expect(LogStash::Util::PluginDeadLetterQueueWriter).to receive(:new).with(anything, "filter_id", "dlq_commit").and_call_original
|
80
|
-
expect(LogStash::Util::PluginDeadLetterQueueWriter).to receive(:new).with(anything, "output_id", "dummyoutput").and_call_original
|
81
|
-
expect_any_instance_of(org.logstash.common.io.DeadLetterQueueWriter).to receive(:close).and_call_original
|
82
|
-
subject.run
|
83
|
-
dlq_path = java.nio.file.Paths.get(pipeline_settings_obj.get("path.dead_letter_queue"), pipeline_id)
|
84
|
-
dlq_reader = org.logstash.common.io.DeadLetterQueueReader.new(dlq_path)
|
85
|
-
entry = dlq_reader.pollEntry(40)
|
86
|
-
expect(entry).to_not be_nil
|
87
|
-
expect(entry.reason).to eq("my reason")
|
88
|
-
subject.shutdown
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
context "dlq is disabled" do
|
93
|
-
let(:enable_dlq) { false }
|
94
|
-
let(:pipeline_id) { "test-without-dlq" }
|
95
|
-
|
96
|
-
it "does not write to the DLQ" do
|
97
|
-
expect(LogStash::Util::PluginDeadLetterQueueWriter).to receive(:new).with(anything, "input_id", "singlegenerator").and_call_original
|
98
|
-
expect(LogStash::Util::PluginDeadLetterQueueWriter).to receive(:new).with(anything, "filter_id", "dlq_commit").and_call_original
|
99
|
-
expect(LogStash::Util::PluginDeadLetterQueueWriter).to receive(:new).with(anything, "output_id", "dummyoutput").and_call_original
|
100
|
-
expect(LogStash::Util::DummyDeadLetterQueueWriter).to receive(:new).and_call_original
|
101
|
-
expect_any_instance_of(LogStash::Util::DummyDeadLetterQueueWriter).to receive(:close).and_call_original
|
102
|
-
subject.run
|
103
|
-
dlq_path = java.nio.file.Paths.get(pipeline_settings_obj.get("path.dead_letter_queue"), pipeline_id)
|
104
|
-
expect(java.nio.file.Files.exists(dlq_path)).to eq(false)
|
105
|
-
subject.shutdown
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
|
-
end
|