logstash-core 5.0.0.alpha2.snapshot2-java → 5.0.0.alpha3-java
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of logstash-core might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/lib/logstash-core/version.rb +1 -1
- data/lib/logstash/agent.rb +48 -31
- data/lib/logstash/api/{lib/helpers/app_helpers.rb → app_helpers.rb} +0 -0
- data/lib/logstash/api/command_factory.rb +34 -0
- data/lib/logstash/api/commands/base.rb +25 -0
- data/lib/logstash/api/commands/stats.rb +105 -0
- data/lib/logstash/api/commands/system/basicinfo_command.rb +23 -0
- data/lib/logstash/api/commands/system/plugins_command.rb +35 -0
- data/lib/logstash/api/modules/base.rb +43 -0
- data/lib/logstash/api/modules/node.rb +24 -0
- data/lib/logstash/api/modules/node_stats.rb +59 -0
- data/lib/logstash/api/modules/plugins.rb +15 -0
- data/lib/logstash/api/modules/root.rb +15 -0
- data/lib/logstash/api/modules/stats.rb +63 -0
- data/lib/logstash/api/rack_app.rb +33 -0
- data/lib/logstash/api/service.rb +73 -0
- data/lib/logstash/config/config_ast.rb +23 -18
- data/lib/logstash/config/loader.rb +4 -4
- data/lib/logstash/config/mixin.rb +10 -21
- data/lib/logstash/environment.rb +29 -0
- data/lib/logstash/filters/base.rb +2 -2
- data/lib/logstash/inputs/base.rb +2 -2
- data/lib/logstash/instrument/collector.rb +1 -1
- data/lib/logstash/instrument/metric_store.rb +11 -1
- data/lib/logstash/instrument/periodic_poller/base.rb +2 -0
- data/lib/logstash/instrument/periodic_poller/jvm.rb +47 -2
- data/lib/logstash/logging/json.rb +21 -0
- data/lib/logstash/output_delegator.rb +2 -2
- data/lib/logstash/patches/clamp.rb +69 -0
- data/lib/logstash/pipeline.rb +36 -69
- data/lib/logstash/plugin.rb +1 -1
- data/lib/logstash/runner.rb +171 -146
- data/lib/logstash/settings.rb +267 -0
- data/lib/logstash/util/decorators.rb +6 -6
- data/lib/logstash/util/java_version.rb +1 -10
- data/lib/logstash/util/thread_dump.rb +55 -0
- data/lib/logstash/util/worker_threads_default_printer.rb +2 -2
- data/lib/logstash/version.rb +1 -1
- data/lib/logstash/webserver.rb +15 -49
- data/locales/en.yml +22 -25
- data/logstash-core.gemspec +3 -3
- data/spec/api/lib/api/node_spec.rb +2 -2
- data/spec/api/lib/api/node_stats_spec.rb +32 -57
- data/spec/api/lib/api/plugins_spec.rb +3 -3
- data/spec/api/lib/api/root_spec.rb +2 -2
- data/spec/api/lib/api/support/resource_dsl_methods.rb +47 -0
- data/spec/api/lib/commands/stats.rb +47 -0
- data/spec/api/spec_helper.rb +21 -21
- data/spec/conditionals_spec.rb +113 -113
- data/spec/logstash/agent_spec.rb +85 -68
- data/spec/logstash/config/config_ast_spec.rb +4 -2
- data/spec/logstash/config/mixin_spec.rb +33 -7
- data/spec/logstash/filters/base_spec.rb +16 -16
- data/spec/logstash/inputs/base_spec.rb +8 -8
- data/spec/logstash/instrument/periodic_poller/jvm_spec.rb +45 -0
- data/spec/logstash/output_delegator_spec.rb +2 -0
- data/spec/logstash/pipeline_reporter_spec.rb +5 -1
- data/spec/logstash/pipeline_spec.rb +75 -30
- data/spec/logstash/plugin_spec.rb +2 -2
- data/spec/logstash/runner_spec.rb +112 -25
- data/spec/logstash/setting_spec.rb +130 -0
- data/spec/logstash/settings_spec.rb +62 -0
- metadata +37 -43
- data/lib/logstash/api/init.ru +0 -31
- data/lib/logstash/api/lib/app.rb +0 -40
- data/lib/logstash/api/lib/app/command.rb +0 -29
- data/lib/logstash/api/lib/app/command_factory.rb +0 -29
- data/lib/logstash/api/lib/app/commands/stats/events_command.rb +0 -13
- data/lib/logstash/api/lib/app/commands/stats/hotthreads_command.rb +0 -120
- data/lib/logstash/api/lib/app/commands/stats/memory_command.rb +0 -25
- data/lib/logstash/api/lib/app/commands/system/basicinfo_command.rb +0 -15
- data/lib/logstash/api/lib/app/commands/system/plugins_command.rb +0 -28
- data/lib/logstash/api/lib/app/modules/node.rb +0 -25
- data/lib/logstash/api/lib/app/modules/node_stats.rb +0 -51
- data/lib/logstash/api/lib/app/modules/plugins.rb +0 -15
- data/lib/logstash/api/lib/app/modules/stats.rb +0 -21
- data/lib/logstash/api/lib/app/root.rb +0 -13
- data/lib/logstash/api/lib/app/service.rb +0 -61
- data/lib/logstash/api/lib/app/stats.rb +0 -56
- data/lib/logstash/util/defaults_printer.rb +0 -31
- data/spec/api/lib/api/stats_spec.rb +0 -19
- data/spec/api/lib/commands/events_spec.rb +0 -17
- data/spec/api/lib/commands/jvm_spec.rb +0 -45
- data/spec/logstash/util/defaults_printer_spec.rb +0 -50
- data/spec/logstash/util/worker_threads_default_printer_spec.rb +0 -45
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 34e8ebcf1aeba4f255cd68db9e23c2c4513c9a61
|
4
|
+
data.tar.gz: c523eff7c037d296a719a4dc3330b8b4e0eb0160
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ab44fd374d1044c5904174280f2e8a3dea7801e3874167c4ea28ca896ed08273a33a981ad0442bd525669391348d913a1ac491018187c0786bc6f380b1a507d3
|
7
|
+
data.tar.gz: f8e2b3d8d4a1a0906c7a9113c30ee3629d75334e409a337337907432c12f6422e24f63c7fabfc1ea1fee037bbef5ef3397ed4c0006fc858633985f62db3e296d
|
data/lib/logstash/agent.rb
CHANGED
@@ -20,7 +20,8 @@ LogStash::Environment.load_locale!
|
|
20
20
|
class LogStash::Agent
|
21
21
|
STARTED_AT = Time.now.freeze
|
22
22
|
|
23
|
-
attr_reader :metric, :node_name, :pipelines, :
|
23
|
+
attr_reader :metric, :node_name, :pipelines, :settings
|
24
|
+
attr_accessor :logger
|
24
25
|
|
25
26
|
# initialize method for LogStash::Agent
|
26
27
|
# @param params [Hash] potential parameters are:
|
@@ -28,21 +29,23 @@ class LogStash::Agent
|
|
28
29
|
# :auto_reload [Boolean] - enable reloading of pipelines
|
29
30
|
# :reload_interval [Integer] - reload pipelines every X seconds
|
30
31
|
# :logger [Cabin::Channel] - logger instance
|
31
|
-
def initialize(
|
32
|
-
@
|
33
|
-
@
|
32
|
+
def initialize(settings = LogStash::SETTINGS)
|
33
|
+
@settings = settings
|
34
|
+
@logger = Cabin::Channel.get(LogStash)
|
35
|
+
@auto_reload = setting("config.reload.automatic")
|
34
36
|
|
35
37
|
@pipelines = {}
|
36
|
-
@node_name =
|
37
|
-
@
|
38
|
-
@
|
38
|
+
@node_name = setting("node.name")
|
39
|
+
@http_host = setting("http.host")
|
40
|
+
@http_port = setting("http.port")
|
39
41
|
|
40
|
-
@config_loader = LogStash::Config::Loader.new(@logger
|
41
|
-
@reload_interval =
|
42
|
+
@config_loader = LogStash::Config::Loader.new(@logger)
|
43
|
+
@reload_interval = setting("config.reload.interval")
|
42
44
|
@upgrade_mutex = Mutex.new
|
43
45
|
|
44
|
-
@collect_metric =
|
45
|
-
|
46
|
+
@collect_metric = setting("metric.collect")
|
47
|
+
@metric = create_metric_collector
|
48
|
+
@periodic_pollers = LogStash::Instrument::PeriodicPollers.new(create_metric_collector)
|
46
49
|
end
|
47
50
|
|
48
51
|
def execute
|
@@ -74,8 +77,11 @@ class LogStash::Agent
|
|
74
77
|
# @param pipeline_id [String] pipeline string identifier
|
75
78
|
# @param settings [Hash] settings that will be passed when creating the pipeline.
|
76
79
|
# keys should be symbols such as :pipeline_workers and :pipeline_batch_delay
|
77
|
-
def register_pipeline(pipeline_id, settings)
|
78
|
-
|
80
|
+
def register_pipeline(pipeline_id, settings = @settings)
|
81
|
+
pipeline_settings = settings.clone
|
82
|
+
pipeline_settings.set("pipeline.id", pipeline_id)
|
83
|
+
|
84
|
+
pipeline = create_pipeline(pipeline_settings)
|
79
85
|
return unless pipeline.is_a?(LogStash::Pipeline)
|
80
86
|
if @auto_reload && pipeline.non_reloadable_plugins.any?
|
81
87
|
@logger.error(I18n.t("logstash.agent.non_reloadable_config_register"),
|
@@ -123,7 +129,7 @@ class LogStash::Agent
|
|
123
129
|
|
124
130
|
private
|
125
131
|
def start_webserver
|
126
|
-
options = {:http_host => @
|
132
|
+
options = {:http_host => @http_host, :http_port => @http_port }
|
127
133
|
@webserver = LogStash::WebServer.new(@logger, options)
|
128
134
|
Thread.new(@webserver) do |webserver|
|
129
135
|
LogStash::Util.set_thread_name("Api Webserver")
|
@@ -149,28 +155,29 @@ class LogStash::Agent
|
|
149
155
|
end
|
150
156
|
end
|
151
157
|
|
152
|
-
def
|
158
|
+
def create_metric_collector
|
153
159
|
if collect_metrics?
|
154
160
|
@logger.debug("Agent: Configuring metric collection")
|
155
161
|
LogStash::Instrument::Collector.instance.agent = self
|
156
|
-
|
162
|
+
LogStash::Instrument::Metric.new
|
157
163
|
else
|
158
|
-
|
164
|
+
LogStash::Instrument::NullMetric.new
|
159
165
|
end
|
160
|
-
|
161
|
-
@periodic_pollers = LogStash::Instrument::PeriodicPollers.new(metric)
|
162
166
|
end
|
163
167
|
|
164
168
|
def collect_metrics?
|
165
169
|
@collect_metric
|
166
170
|
end
|
167
171
|
|
168
|
-
def create_pipeline(settings)
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
172
|
+
def create_pipeline(settings, config=nil)
|
173
|
+
|
174
|
+
if config.nil?
|
175
|
+
begin
|
176
|
+
config = fetch_config(settings)
|
177
|
+
rescue => e
|
178
|
+
@logger.error("failed to fetch pipeline configuration", :message => e.message)
|
179
|
+
return
|
180
|
+
end
|
174
181
|
end
|
175
182
|
|
176
183
|
begin
|
@@ -182,23 +189,29 @@ class LogStash::Agent
|
|
182
189
|
end
|
183
190
|
|
184
191
|
def fetch_config(settings)
|
185
|
-
@config_loader.format_config(settings
|
192
|
+
@config_loader.format_config(settings.get("path.config"), settings.get("config.string"))
|
186
193
|
end
|
187
194
|
|
188
195
|
# since this method modifies the @pipelines hash it is
|
189
196
|
# wrapped in @upgrade_mutex in the parent call `reload_state!`
|
190
197
|
def reload_pipeline!(id)
|
191
198
|
old_pipeline = @pipelines[id]
|
192
|
-
|
199
|
+
new_config = fetch_config(old_pipeline.settings)
|
200
|
+
if old_pipeline.config_str == new_config
|
201
|
+
@logger.debug("no configuration change for pipeline",
|
202
|
+
:pipeline => id, :config => new_config)
|
203
|
+
return
|
204
|
+
end
|
205
|
+
|
206
|
+
new_pipeline = create_pipeline(old_pipeline.settings, new_config)
|
207
|
+
|
193
208
|
return if new_pipeline.nil?
|
194
209
|
|
195
|
-
if
|
196
|
-
@logger.debug("no configuration change for pipeline",
|
197
|
-
:pipeline => id, :config => old_pipeline.config_str)
|
198
|
-
elsif new_pipeline.non_reloadable_plugins.any?
|
210
|
+
if new_pipeline.non_reloadable_plugins.any?
|
199
211
|
@logger.error(I18n.t("logstash.agent.non_reloadable_config_reload"),
|
200
212
|
:pipeline_id => id,
|
201
213
|
:plugins => new_pipeline.non_reloadable_plugins.map(&:class))
|
214
|
+
return
|
202
215
|
else
|
203
216
|
@logger.warn("fetched new config for pipeline. upgrading..",
|
204
217
|
:pipeline => id, :config => new_pipeline.config_str)
|
@@ -262,4 +275,8 @@ class LogStash::Agent
|
|
262
275
|
def reset_collector
|
263
276
|
LogStash::Instrument::Collector.instance.clear
|
264
277
|
end
|
278
|
+
|
279
|
+
def setting(key)
|
280
|
+
@settings.get(key)
|
281
|
+
end
|
265
282
|
end # class LogStash::Agent
|
File without changes
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require "logstash/api/service"
|
3
|
+
require "logstash/api/commands/system/basicinfo_command"
|
4
|
+
require "logstash/api/commands/system/plugins_command"
|
5
|
+
require "logstash/api/commands/stats"
|
6
|
+
|
7
|
+
|
8
|
+
module LogStash
|
9
|
+
module Api
|
10
|
+
class CommandFactory
|
11
|
+
attr_reader :factory, :service
|
12
|
+
|
13
|
+
def initialize(service)
|
14
|
+
@service = service
|
15
|
+
@factory = {
|
16
|
+
:system_basic_info => ::LogStash::Api::Commands::System::BasicInfo,
|
17
|
+
:plugins_command => ::LogStash::Api::Commands::System::Plugins,
|
18
|
+
:stats => ::LogStash::Api::Commands::Stats
|
19
|
+
}
|
20
|
+
end
|
21
|
+
|
22
|
+
def build(*klass_path)
|
23
|
+
# Get a nested path with args like (:parent, :child)
|
24
|
+
klass = klass_path.reduce(factory) {|acc,v| acc[v]}
|
25
|
+
|
26
|
+
if klass
|
27
|
+
klass.new(service)
|
28
|
+
else
|
29
|
+
raise ArgumentError, "Class path '#{klass_path}' does not map to command!"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module LogStash
|
2
|
+
module Api
|
3
|
+
module Commands
|
4
|
+
class Base
|
5
|
+
attr_reader :service
|
6
|
+
|
7
|
+
def initialize(service = LogStash::Api::Service.instance)
|
8
|
+
@service = service
|
9
|
+
end
|
10
|
+
|
11
|
+
def hostname
|
12
|
+
service.agent.node_name
|
13
|
+
end
|
14
|
+
|
15
|
+
def uptime
|
16
|
+
service.agent.uptime
|
17
|
+
end
|
18
|
+
|
19
|
+
def started_at
|
20
|
+
(LogStash::Agent::STARTED_AT.to_f * 1000.0).to_i
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,105 @@
|
|
1
|
+
require "logstash/api/commands/base"
|
2
|
+
require 'logstash/util/thread_dump'
|
3
|
+
|
4
|
+
module LogStash
|
5
|
+
module Api
|
6
|
+
module Commands
|
7
|
+
class Stats < Commands::Base
|
8
|
+
|
9
|
+
def jvm
|
10
|
+
{:threads => service.get_shallow(:jvm, :threads)}
|
11
|
+
end
|
12
|
+
|
13
|
+
def process
|
14
|
+
service.get_shallow(:jvm, :process)
|
15
|
+
end
|
16
|
+
|
17
|
+
def events
|
18
|
+
service.get_shallow(:stats, :events)
|
19
|
+
end
|
20
|
+
|
21
|
+
def memory
|
22
|
+
memory = LogStash::Json.load(service.get(:jvm_memory_stats))
|
23
|
+
{
|
24
|
+
:heap_used_in_bytes => memory["heap"]["used_in_bytes"],
|
25
|
+
:heap_used_percent => memory["heap"]["used_percent"],
|
26
|
+
:heap_committed_in_bytes => memory["heap"]["committed_in_bytes"],
|
27
|
+
:heap_max_in_bytes => memory["heap"]["max_in_bytes"],
|
28
|
+
:heap_used_in_bytes => memory["heap"]["used_in_bytes"],
|
29
|
+
:non_heap_used_in_bytes => memory["non_heap"]["used_in_bytes"],
|
30
|
+
:non_heap_committed_in_bytes => memory["non_heap"]["committed_in_bytes"],
|
31
|
+
:pools => memory["pools"].inject({}) do |acc, (type, hash)|
|
32
|
+
hash.delete("committed_in_bytes")
|
33
|
+
acc[type] = hash
|
34
|
+
acc
|
35
|
+
end
|
36
|
+
}
|
37
|
+
end
|
38
|
+
|
39
|
+
def hot_threads(options={})
|
40
|
+
HotThreadsReport.new(self, options)
|
41
|
+
end
|
42
|
+
|
43
|
+
class HotThreadsReport
|
44
|
+
HOT_THREADS_STACK_TRACES_SIZE_DEFAULT = 10.freeze
|
45
|
+
|
46
|
+
def initialize(cmd, options)
|
47
|
+
@cmd = cmd
|
48
|
+
filter = { :stacktrace_size => options.fetch(:stacktrace_size, HOT_THREADS_STACK_TRACES_SIZE_DEFAULT) }
|
49
|
+
jr_dump = JRMonitor.threads.generate(filter)
|
50
|
+
@thread_dump = ::LogStash::Util::ThreadDump.new(options.merge(:dump => jr_dump))
|
51
|
+
end
|
52
|
+
|
53
|
+
def to_s
|
54
|
+
hash = to_hash
|
55
|
+
report = "#{I18n.t("logstash.web_api.hot_threads.title", :hostname => hash[:hostname], :time => hash[:time], :top_count => @thread_dump.top_count )} \n"
|
56
|
+
report << '=' * 80
|
57
|
+
report << "\n"
|
58
|
+
hash[:threads].each do |thread|
|
59
|
+
thread_report = ""
|
60
|
+
thread_report = "#{I18n.t("logstash.web_api.
|
61
|
+
hot_threads.thread_title", :percent_of_cpu_time => thread[:percent_of_cpu_time], :thread_state => thread[:state], :thread_name => thread[:name])} \n"
|
62
|
+
thread_report = "#{thread[:percent_of_cpu_time]} % of of cpu usage by #{thread[:state]} thread named '#{thread[:name]}'\n"
|
63
|
+
thread_report << "#{thread[:path]}\n" if thread[:path]
|
64
|
+
thread[:traces].each do |trace|
|
65
|
+
thread_report << "\t#{trace}\n"
|
66
|
+
end
|
67
|
+
report << thread_report
|
68
|
+
report << '-' * 80
|
69
|
+
report << "\n"
|
70
|
+
end
|
71
|
+
report
|
72
|
+
end
|
73
|
+
|
74
|
+
def to_hash
|
75
|
+
hash = { :hostname => @cmd.hostname, :time => Time.now.iso8601, :busiest_threads => @thread_dump.top_count, :threads => [] }
|
76
|
+
@thread_dump.each do |thread_name, _hash|
|
77
|
+
thread_name, thread_path = _hash["thread.name"].split(": ")
|
78
|
+
thread = { :name => thread_name,
|
79
|
+
:percent_of_cpu_time => cpu_time_as_percent(_hash),
|
80
|
+
:state => _hash["thread.state"]
|
81
|
+
}
|
82
|
+
thread[:path] = thread_path if thread_path
|
83
|
+
traces = []
|
84
|
+
_hash["thread.stacktrace"].each do |trace|
|
85
|
+
traces << trace
|
86
|
+
end
|
87
|
+
thread[:traces] = traces unless traces.empty?
|
88
|
+
hash[:threads] << thread
|
89
|
+
end
|
90
|
+
hash
|
91
|
+
end
|
92
|
+
|
93
|
+
def cpu_time_as_percent(hash)
|
94
|
+
(((cpu_time(hash) / @cmd.uptime * 1.0)*10000).to_i)/100.0
|
95
|
+
end
|
96
|
+
|
97
|
+
def cpu_time(hash)
|
98
|
+
hash["cpu.time"] / 1000000.0
|
99
|
+
end
|
100
|
+
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'logstash/api/commands/base'
|
3
|
+
require "logstash/util/duration_formatter"
|
4
|
+
|
5
|
+
module LogStash
|
6
|
+
module Api
|
7
|
+
module Commands
|
8
|
+
module System
|
9
|
+
class BasicInfo < Commands::Base
|
10
|
+
|
11
|
+
def run
|
12
|
+
{
|
13
|
+
"hostname" => hostname,
|
14
|
+
"version" => {
|
15
|
+
"number" => LOGSTASH_VERSION
|
16
|
+
}
|
17
|
+
}
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require "logstash/api/commands/base"
|
3
|
+
|
4
|
+
module LogStash
|
5
|
+
module Api
|
6
|
+
module Commands
|
7
|
+
module System
|
8
|
+
class Plugins < Commands::Base
|
9
|
+
def run
|
10
|
+
{ :total => plugins.count, :plugins => plugins }
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def plugins
|
16
|
+
@plugins ||= find_plugins_gem_specs.map do |spec|
|
17
|
+
{ :name => spec.name, :version => spec.version.to_s }
|
18
|
+
end.sort_by do |spec|
|
19
|
+
spec[:name]
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def find_plugins_gem_specs
|
24
|
+
@specs ||= ::Gem::Specification.find_all.select{|spec| logstash_plugin_gem_spec?(spec)}
|
25
|
+
end
|
26
|
+
|
27
|
+
def logstash_plugin_gem_spec?(spec)
|
28
|
+
spec.metadata && spec.metadata["logstash_plugin"] == "true"
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require "logstash/api/app_helpers"
|
2
|
+
require "logstash/api/command_factory"
|
3
|
+
|
4
|
+
module LogStash
|
5
|
+
module Api
|
6
|
+
module Modules
|
7
|
+
class Base < ::Sinatra::Base
|
8
|
+
helpers AppHelpers
|
9
|
+
|
10
|
+
set :environment, :production
|
11
|
+
|
12
|
+
attr_reader :factory
|
13
|
+
|
14
|
+
if settings.environment != :production
|
15
|
+
set :raise_errors, true
|
16
|
+
set :show_exceptions, :after_handler
|
17
|
+
end
|
18
|
+
|
19
|
+
include LogStash::Util::Loggable
|
20
|
+
|
21
|
+
helpers AppHelpers
|
22
|
+
|
23
|
+
def initialize(app=nil)
|
24
|
+
super(app)
|
25
|
+
@factory = ::LogStash::Api::CommandFactory.new(LogStash::Api::Service.instance)
|
26
|
+
end
|
27
|
+
|
28
|
+
not_found do
|
29
|
+
status 404
|
30
|
+
as = params.has_key?("human") ? :string : :json
|
31
|
+
text = as == :string ? "" : {}
|
32
|
+
respond_with(text, :as => as)
|
33
|
+
end
|
34
|
+
|
35
|
+
error do
|
36
|
+
e = env['sinatra.error']
|
37
|
+
logger.error(e.message, :url => request.url, :ip => request.ip, :params => request.params, :class => e.class.name, :backtrace => e.backtrace)
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|