diff --git a/logstash-core/lib/logstash/api/modules/node.rb b/logstash-core/lib/logstash/api/modules/node.rb index 6693a5ccc..985a8a6a4 100644 --- a/logstash-core/lib/logstash/api/modules/node.rb +++ b/logstash-core/lib/logstash/api/modules/node.rb @@ -11,13 +11,19 @@ module LogStash end get "/hot_threads" do - ignore_idle_threads = params["ignore_idle_threads"] || true + begin + ignore_idle_threads = params["ignore_idle_threads"] || true - options = { :ignore_idle_threads => as_boolean(ignore_idle_threads) } - options[:threads] = params["threads"].to_i if params.has_key?("threads") + options = {:ignore_idle_threads => as_boolean(ignore_idle_threads)} + options[:threads] = params["threads"].to_i if params.has_key?("threads") - as = human? ? :string : :json - respond_with(node.hot_threads(options), {:as => as}) + as = human? ? :string : :json + respond_with(node.hot_threads(options), {:as => as}) + rescue ArgumentError => e + response = respond_with({"error" => e.message}) + status(400) + response + end end get "/pipelines/:id" do diff --git a/logstash-core/lib/logstash/api/modules/stats.rb b/logstash-core/lib/logstash/api/modules/stats.rb index a35c9f062..5b3a773e4 100644 --- a/logstash-core/lib/logstash/api/modules/stats.rb +++ b/logstash-core/lib/logstash/api/modules/stats.rb @@ -9,14 +9,20 @@ module LogStash # return hot threads information get "/jvm/hot_threads" do - top_threads_count = params["threads"] || 3 - ignore_idle_threads = params["ignore_idle_threads"] || true - options = { - :threads => top_threads_count.to_i, - :ignore_idle_threads => as_boolean(ignore_idle_threads) - } + begin + top_threads_count = params["threads"] || 3 + ignore_idle_threads = params["ignore_idle_threads"] || true + options = { + :threads => top_threads_count.to_i, + :ignore_idle_threads => as_boolean(ignore_idle_threads) + } - respond_with(stats_command.hot_threads(options)) + respond_with(stats_command.hot_threads(options)) + rescue ArgumentError => e + response = respond_with({"error" => e.message}) + status(400) + response + end end # return hot threads information diff --git a/logstash-core/spec/logstash/api/modules/node_spec.rb b/logstash-core/spec/logstash/api/modules/node_spec.rb index 0321e1056..7fc7f1271 100644 --- a/logstash-core/spec/logstash/api/modules/node_spec.rb +++ b/logstash-core/spec/logstash/api/modules/node_spec.rb @@ -46,6 +46,17 @@ describe LogStash::Api::Modules::Node do end end + context "broken params in URL" do + + before(:all) do + get "/hot_threads?human=?threads=5" + end + + it "should return http status 400" do + expect(last_response.status).to eq(400) + end + end + context "when asking for human output" do [ "/hot_threads?human",