logstash-input-github 3.0.5 → 3.0.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ba608dbc24c637abe5b3de51a2931987955a75c53efa0e4829002f415ba75aaa
4
- data.tar.gz: 194d819280ea46808d1124f81fc0f3ed969ec6f709e43b7aaba83e9df8c34bb0
3
+ metadata.gz: 89741b6fc51325a40f005b06e565f3d031f324ed945287b903ec78c6bbe71bdb
4
+ data.tar.gz: 0bcc0471434fa5ba5b53b629d6c9522a7a3c86eae55d30e2be361db3e41efb1c
5
5
  SHA512:
6
- metadata.gz: 45a3030e7bcb4ce5ffd216e618d04f314990f31cf8b9b9c869b3493e81ff29921ed549442851e13c637adcfb4c48b7d36e84b7a748dbaec3e34c2b277c10d1df
7
- data.tar.gz: 179a5e50072f2442f4d1bb1e6d021ef0ca9735ed1d8464cba5dc53642e40f18a3ab485c9a8c22af15bdd8b1562abc82daf4c921bfce76d402b62b7a7b14fcae0
6
+ metadata.gz: 0a2997975c0f9c08728c1f464ff1c21177d4be29cd88d54d892220f46aa5a1575aec894668d99884a508eef72636896ed7b7048e36e91580a438f3252566ac41
7
+ data.tar.gz: '099e04e6b110a62da462e8472e7480943d75e6a45664e669194803afd421696b050f1edb67deec4af3c289426d84eeeb5ec4fa076e74fcce8b60d7fa2ab0c5a0'
@@ -1,3 +1,8 @@
1
+ ## 3.0.6
2
+ - Improve malformed-input handling by using updated FTW
3
+ - Improve webserver crash recovery
4
+ - Properly support plugin stopping & reloading
5
+
1
6
  ## 3.0.5
2
7
  - Update gemspec summary
3
8
 
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2012–2016 Elasticsearch <http://www.elastic.co>
1
+ Copyright (c) 2012-2018 Elasticsearch <http://www.elastic.co>
2
2
 
3
3
  Licensed under the Apache License, Version 2.0 (the "License");
4
4
  you may not use this file except in compliance with the License.
@@ -42,6 +42,13 @@ class LogStash::Inputs::GitHub < LogStash::Inputs::Base
42
42
  response.body = "Accepted!"
43
43
  end
44
44
  @server.run
45
+ rescue Exception => original_exception
46
+ # If our server crashes, it may not have cleaned up after itself;
47
+ # since `FTW::WebServer#stop` is idempotent, make one last attempt
48
+ # before propagating the original exception.
49
+ @server && @server.stop rescue logger.error("Error while stopping FTW::WebServer", exception: $!.message, backtrace: $!.backtrace)
50
+
51
+ raise original_exception
45
52
  end # def run
46
53
 
47
54
  def build_event_from_request(body, headers)
@@ -69,8 +76,8 @@ class LogStash::Inputs::GitHub < LogStash::Inputs::Base
69
76
  return is_valid
70
77
  end
71
78
 
72
- def close
73
- @server.stop
74
- end # def close
79
+ def stop
80
+ @server && @server.stop
81
+ end # def stop
75
82
 
76
83
  end # class LogStash::Inputs::Github
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
 
3
3
  s.name = 'logstash-input-github'
4
- s.version = '3.0.5'
4
+ s.version = '3.0.6'
5
5
  s.licenses = ['Apache License (2.0)']
6
6
  s.summary = "Reads events from a GitHub webhook"
7
7
  s.description = "This gem is a Logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gemname. This gem is not a stand-alone program"
@@ -24,7 +24,7 @@ Gem::Specification.new do |s|
24
24
 
25
25
  s.add_runtime_dependency 'addressable'
26
26
  s.add_runtime_dependency 'logstash-codec-plain'
27
- s.add_runtime_dependency 'ftw', '~> 0.0.42'
27
+ s.add_runtime_dependency 'ftw', '~> 0.0.48'
28
28
 
29
29
  s.add_development_dependency 'logstash-devutils'
30
30
  end
@@ -55,4 +55,51 @@ describe LogStash::Inputs::GitHub do
55
55
  end
56
56
 
57
57
  end
58
+
59
+ describe 'graceful shutdown' do
60
+ context 'when underlying webserver crashes' do
61
+
62
+ # Stubbing out our FTW::WebServer allows us to force it to raise an exception when we try to run it.
63
+ let(:mock_webserver_class) { double('FTW::WebServer::class').as_null_object }
64
+ let(:mock_webserver) { double('FTW::WebServer').as_null_object }
65
+ before(:each) do
66
+ stub_const('FTW::WebServer', mock_webserver_class)
67
+ allow(mock_webserver_class).to receive(:new).and_return(mock_webserver)
68
+ expect(mock_webserver).to receive(:run).and_raise('testing: intentional uncaught exception')
69
+ end
70
+
71
+ it 'makes an attempt to stop the webserver' do
72
+ expect(mock_webserver).to receive(:stop)
73
+
74
+ plugin.run([]) rescue nil
75
+ end
76
+
77
+ it 'propagates the original exception' do
78
+ expect do
79
+ plugin.run([])
80
+ end.to raise_exception('testing: intentional uncaught exception')
81
+ end
82
+
83
+ context 'and an attempt to stop the webserver also crashes' do
84
+ let(:mock_logger) { double('Logger').as_null_object }
85
+ before(:each) do
86
+ allow(plugin).to receive(:logger).and_return(mock_logger)
87
+ allow(mock_webserver).to receive(:stop).and_raise('yo dawg')
88
+ end
89
+
90
+ it 'logs helpfully' do
91
+ expect(mock_logger).to receive(:error).with("Error while stopping FTW::WebServer",
92
+ exception: 'yo dawg', backtrace: instance_of(Array))
93
+
94
+ plugin.run([]) rescue nil
95
+ end
96
+
97
+ it 'propagates the original exception' do
98
+ expect do
99
+ plugin.run([])
100
+ end.to raise_exception('testing: intentional uncaught exception')
101
+ end
102
+ end
103
+ end
104
+ end
58
105
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-input-github
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.5
4
+ version: 3.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Elastic
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-11-07 00:00:00.000000000 Z
11
+ date: 2018-02-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
@@ -63,7 +63,7 @@ dependencies:
63
63
  requirements:
64
64
  - - "~>"
65
65
  - !ruby/object:Gem::Version
66
- version: 0.0.42
66
+ version: 0.0.48
67
67
  name: ftw
68
68
  prerelease: false
69
69
  type: :runtime
@@ -71,7 +71,7 @@ dependencies:
71
71
  requirements:
72
72
  - - "~>"
73
73
  - !ruby/object:Gem::Version
74
- version: 0.0.42
74
+ version: 0.0.48
75
75
  - !ruby/object:Gem::Dependency
76
76
  requirement: !ruby/object:Gem::Requirement
77
77
  requirements:
@@ -128,7 +128,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
128
128
  version: '0'
129
129
  requirements: []
130
130
  rubyforge_project:
131
- rubygems_version: 2.6.11
131
+ rubygems_version: 2.6.13
132
132
  signing_key:
133
133
  specification_version: 4
134
134
  summary: Reads events from a GitHub webhook