logstash-input-twitter 1.0.1 → 2.0.0

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
  SHA1:
3
- metadata.gz: f62f289e1b9bd6b6d3dee6d455261a03a9765531
4
- data.tar.gz: 05f4f990d006d65b2077dbcb9a21c435f11981c0
3
+ metadata.gz: a0b170b14458a9666e7e7e955436bfef0fb8d552
4
+ data.tar.gz: e6f78010789cdc8a0cd57102e81315abbbca7920
5
5
  SHA512:
6
- metadata.gz: c3e32235d0e06e317e0029b3936a2175943f00c59ebe844f901c013e25d6752cc6cb93e533d287d73807152a1a3c037954db994fe69efe2d08055d4206531ae9
7
- data.tar.gz: 6ef349ece2a5a38d81e960512682cff205ea587611848f35de7d7517fb2b1903ba3edff807986e05becdcf40a9982f752ab02f8e78fcec8f4f53b5aed4ffebbd
6
+ metadata.gz: cda6d687bbe47db50f5b8648027f9d23dd5a62d4cc552e86fe66fe50e604976d4621cbc83196ddc009bdfa81f065fa76bb4ff1bcb1f33425b13fca54ed453dda
7
+ data.tar.gz: 25e7b7288b5adb62350dbebdd620298590deb8909ca68346b6e6c27878766da090b4c512f81c3c2d75be228164d580ba0d3e2e0fb3d039fd10a531509f23dd18
data/README.md CHANGED
@@ -1,15 +1,15 @@
1
1
  # Logstash Plugin
2
2
 
3
- This is a plugin for [Logstash](https://github.com/elasticsearch/logstash).
3
+ This is a plugin for [Logstash](https://github.com/elastic/logstash).
4
4
 
5
5
  It is fully free and fully open source. The license is Apache 2.0, meaning you are pretty much free to use it however you want in whatever way.
6
6
 
7
7
  ## Documentation
8
8
 
9
- Logstash provides infrastructure to automatically generate documentation for this plugin. We use the asciidoc format to write documentation so any comments in the source code will be first converted into asciidoc and then into html. All plugin documentation are placed under one [central location](http://www.elasticsearch.org/guide/en/logstash/current/).
9
+ Logstash provides infrastructure to automatically generate documentation for this plugin. We use the asciidoc format to write documentation so any comments in the source code will be first converted into asciidoc and then into html. All plugin documentation are placed under one [central location](http://www.elastic.co/guide/en/logstash/current/).
10
10
 
11
11
  - For formatting code or config example, you can use the asciidoc `[source,ruby]` directive
12
- - For more asciidoc formatting tips, see the excellent reference here https://github.com/elasticsearch/docs#asciidoc-guide
12
+ - For more asciidoc formatting tips, see the excellent reference here https://github.com/elastic/docs#asciidoc-guide
13
13
 
14
14
  ## Need Help?
15
15
 
@@ -83,4 +83,4 @@ Programming is not a required skill. Whatever you've seen about open source and
83
83
 
84
84
  It is more important to the community that you are able to contribute.
85
85
 
86
- For more information about contributing, see the [CONTRIBUTING](https://github.com/elasticsearch/logstash/blob/master/CONTRIBUTING.md) file.
86
+ For more information about contributing, see the [CONTRIBUTING](https://github.com/elastic/logstash/blob/master/CONTRIBUTING.md) file.
@@ -4,6 +4,7 @@ require "logstash/namespace"
4
4
  require "logstash/timestamp"
5
5
  require "logstash/util"
6
6
  require "logstash/json"
7
+ require "stud/interval"
7
8
 
8
9
  # Read events from the twitter streaming api.
9
10
  class LogStash::Inputs::Twitter < LogStash::Inputs::Base
@@ -86,41 +87,47 @@ class LogStash::Inputs::Twitter < LogStash::Inputs::Base
86
87
  @logger.info("Starting twitter tracking", :keywords => @keywords)
87
88
  begin
88
89
  @client.filter(:track => @keywords.join(",")) do |tweet|
90
+ return if stop?
89
91
  if tweet.is_a?(Twitter::Tweet)
90
- @logger.debug? && @logger.debug("Got tweet", :user => tweet.user.screen_name, :text => tweet.text)
91
- if @full_tweet
92
- event = LogStash::Event.new(LogStash::Util.stringify_symbols(tweet.to_hash))
93
- event.timestamp = LogStash::Timestamp.new(tweet.created_at)
94
- else
95
- event = LogStash::Event.new(
96
- LogStash::Event::TIMESTAMP => LogStash::Timestamp.new(tweet.created_at),
97
- "message" => tweet.full_text,
98
- "user" => tweet.user.screen_name,
99
- "client" => tweet.source,
100
- "retweeted" => tweet.retweeted?,
101
- "source" => "http://twitter.com/#{tweet.user.screen_name}/status/#{tweet.id}"
102
- )
103
- event["in-reply-to"] = tweet.in_reply_to_status_id if tweet.reply?
104
- unless tweet.urls.empty?
105
- event["urls"] = tweet.urls.map(&:expanded_url).map(&:to_s)
106
- end
107
- end
108
-
109
- # Work around bugs in JrJackson. The standard serializer won't work till we upgrade
110
- event["in-reply-to"] = nil if event["in-reply-to"].is_a?(Twitter::NullObject)
92
+ event = from_tweet(tweet)
111
93
  decorate(event)
112
94
  queue << event
113
95
  end
114
96
  end # client.filter
115
- rescue LogStash::ShutdownSignal
116
- return
117
97
  rescue Twitter::Error::TooManyRequests => e
118
98
  @logger.warn("Twitter too many requests error, sleeping for #{e.rate_limit.reset_in}s")
119
- sleep(e.rate_limit.reset_in)
99
+ Stud.stoppable_sleep(e.rate_limit.reset_in) { stop? }
120
100
  retry
121
101
  rescue => e
122
102
  @logger.warn("Twitter client error", :message => e.message, :exception => e, :backtrace => e.backtrace)
123
103
  retry
124
104
  end
125
105
  end # def run
106
+
107
+ private
108
+ def from_tweet(tweet)
109
+ @logger.debug? && @logger.debug("Got tweet", :user => tweet.user.screen_name, :text => tweet.text)
110
+ if @full_tweet
111
+ event = LogStash::Event.new(LogStash::Util.stringify_symbols(tweet.to_hash))
112
+ event.timestamp = LogStash::Timestamp.new(tweet.created_at)
113
+ else
114
+ event = LogStash::Event.new(
115
+ LogStash::Event::TIMESTAMP => LogStash::Timestamp.new(tweet.created_at),
116
+ "message" => tweet.full_text,
117
+ "user" => tweet.user.screen_name,
118
+ "client" => tweet.source,
119
+ "retweeted" => tweet.retweeted?,
120
+ "source" => "http://twitter.com/#{tweet.user.screen_name}/status/#{tweet.id}"
121
+ )
122
+ event["in-reply-to"] = tweet.in_reply_to_status_id if tweet.reply?
123
+ unless tweet.urls.empty?
124
+ event["urls"] = tweet.urls.map(&:expanded_url).map(&:to_s)
125
+ end
126
+ end
127
+
128
+ # Work around bugs in JrJackson. The standard serializer won't work till we upgrade
129
+ event["in-reply-to"] = nil if event["in-reply-to"].is_a?(Twitter::NullObject)
130
+
131
+ event
132
+ end
126
133
  end # class LogStash::Inputs::Twitter
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
 
3
3
  s.name = 'logstash-input-twitter'
4
- s.version = '1.0.1'
4
+ s.version = '2.0.0'
5
5
  s.licenses = ['Apache License (2.0)']
6
6
  s.summary = "Read events from the twitter streaming api."
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/plugin install gemname. This gem is not a stand-alone program"
@@ -11,7 +11,7 @@ Gem::Specification.new do |s|
11
11
  s.require_paths = ["lib"]
12
12
 
13
13
  # Files
14
- s.files = `git ls-files`.split($\)+::Dir.glob('vendor/*')
14
+ s.files = Dir['lib/**/*','spec/**/*','vendor/**/*','*.gemspec','*.md','CONTRIBUTORS','Gemfile','LICENSE','NOTICE.TXT']
15
15
 
16
16
  # Tests
17
17
  s.test_files = s.files.grep(%r{^(test|spec|features)/})
@@ -20,8 +20,10 @@ Gem::Specification.new do |s|
20
20
  s.metadata = { "logstash_plugin" => "true", "logstash_group" => "input" }
21
21
 
22
22
  # Gem dependencies
23
- s.add_runtime_dependency "logstash-core", '>= 1.4.0', '< 2.0.0'
23
+ s.add_runtime_dependency "logstash-core", "~> 2.0.0.snapshot"
24
24
  s.add_runtime_dependency 'twitter', ['5.12.0']
25
+ s.add_runtime_dependency 'stud', '>= 0.0.22', '< 0.1'
25
26
 
26
27
  s.add_development_dependency 'logstash-devutils'
28
+ s.add_development_dependency 'logstash-codec-plain'
27
29
  end
@@ -1,5 +1,29 @@
1
1
  require "logstash/devutils/rspec/spec_helper"
2
2
  require 'logstash/inputs/twitter'
3
+ require 'twitter'
4
+
5
+ class MockClient
6
+ def filter(options)
7
+ loop { yield }
8
+ end
9
+ end
3
10
 
4
11
  describe LogStash::Inputs::Twitter do
12
+ context "when told to shutdown" do
13
+ before :each do
14
+ allow(Twitter::Streaming::Client).to receive(:new).and_return(MockClient.new)
15
+ end
16
+
17
+ it_behaves_like "an interruptible input plugin" do
18
+ let(:config) do
19
+ {
20
+ 'consumer_key' => 'foo',
21
+ 'consumer_secret' => 'foo',
22
+ 'oauth_token' => 'foo',
23
+ 'oauth_token_secret' => 'foo',
24
+ 'keywords' => ['foo', 'bar']
25
+ }
26
+ end
27
+ end
28
+ end
5
29
  end
metadata CHANGED
@@ -1,77 +1,103 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-input-twitter
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Elastic
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-29 00:00:00.000000000 Z
11
+ date: 2015-09-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ~>
17
+ - !ruby/object:Gem::Version
18
+ version: 2.0.0.snapshot
14
19
  name: logstash-core
20
+ prerelease: false
21
+ type: :runtime
15
22
  version_requirements: !ruby/object:Gem::Requirement
16
23
  requirements:
17
- - - '>='
24
+ - - ~>
18
25
  - !ruby/object:Gem::Version
19
- version: 1.4.0
20
- - - <
21
- - !ruby/object:Gem::Version
22
- version: 2.0.0
26
+ version: 2.0.0.snapshot
27
+ - !ruby/object:Gem::Dependency
23
28
  requirement: !ruby/object:Gem::Requirement
24
29
  requirements:
25
- - - '>='
26
- - !ruby/object:Gem::Version
27
- version: 1.4.0
28
- - - <
30
+ - - '='
29
31
  - !ruby/object:Gem::Version
30
- version: 2.0.0
32
+ version: 5.12.0
33
+ name: twitter
31
34
  prerelease: false
32
35
  type: :runtime
33
- - !ruby/object:Gem::Dependency
34
- name: twitter
35
36
  version_requirements: !ruby/object:Gem::Requirement
36
37
  requirements:
37
38
  - - '='
38
39
  - !ruby/object:Gem::Version
39
40
  version: 5.12.0
41
+ - !ruby/object:Gem::Dependency
40
42
  requirement: !ruby/object:Gem::Requirement
41
43
  requirements:
42
- - - '='
44
+ - - '>='
43
45
  - !ruby/object:Gem::Version
44
- version: 5.12.0
46
+ version: 0.0.22
47
+ - - <
48
+ - !ruby/object:Gem::Version
49
+ version: '0.1'
50
+ name: stud
45
51
  prerelease: false
46
52
  type: :runtime
53
+ version_requirements: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - '>='
56
+ - !ruby/object:Gem::Version
57
+ version: 0.0.22
58
+ - - <
59
+ - !ruby/object:Gem::Version
60
+ version: '0.1'
47
61
  - !ruby/object:Gem::Dependency
62
+ requirement: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - '>='
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
48
67
  name: logstash-devutils
68
+ prerelease: false
69
+ type: :development
49
70
  version_requirements: !ruby/object:Gem::Requirement
50
71
  requirements:
51
72
  - - '>='
52
73
  - !ruby/object:Gem::Version
53
74
  version: '0'
75
+ - !ruby/object:Gem::Dependency
54
76
  requirement: !ruby/object:Gem::Requirement
55
77
  requirements:
56
78
  - - '>='
57
79
  - !ruby/object:Gem::Version
58
80
  version: '0'
81
+ name: logstash-codec-plain
59
82
  prerelease: false
60
83
  type: :development
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - '>='
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
61
89
  description: This gem is a logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/plugin install gemname. This gem is not a stand-alone program
62
90
  email: info@elastic.co
63
91
  executables: []
64
92
  extensions: []
65
93
  extra_rdoc_files: []
66
94
  files:
67
- - .gitignore
68
95
  - CHANGELOG.md
69
96
  - CONTRIBUTORS
70
97
  - Gemfile
71
98
  - LICENSE
72
99
  - NOTICE.TXT
73
100
  - README.md
74
- - Rakefile
75
101
  - lib/logstash/inputs/twitter.rb
76
102
  - logstash-input-twitter.gemspec
77
103
  - spec/inputs/twitter_spec.rb
@@ -97,7 +123,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
97
123
  version: '0'
98
124
  requirements: []
99
125
  rubyforge_project:
100
- rubygems_version: 2.1.9
126
+ rubygems_version: 2.4.8
101
127
  signing_key:
102
128
  specification_version: 4
103
129
  summary: Read events from the twitter streaming api.
data/.gitignore DELETED
@@ -1,4 +0,0 @@
1
- *.gem
2
- Gemfile.lock
3
- .bundle
4
- vendor
data/Rakefile DELETED
@@ -1,7 +0,0 @@
1
- @files=[]
2
-
3
- task :default do
4
- system("rake -T")
5
- end
6
-
7
- require "logstash/devutils/rake"