logstash_rails 0.3.0 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 6df04b2809febaa3f72b82c7813fc447f960b13c
4
+ data.tar.gz: c7b2d9a0a7bffdcfab05a77def77674c48e054ce
5
+ SHA512:
6
+ metadata.gz: 8faacf71f370e115b4f194f987509543d132de778173089a1db0f74eddca33c8ecc15b19534215f914b8f7f41a21a199cba0a8368307ad7b2b6c1765ced6bc12
7
+ data.tar.gz: 2ff83b67e3eaee14157297f68ffe4df8221b99114db0af22e64d3fd8adf2eea59eaa0723401179f140f68e7d470238f238b268c8491095c99e3fb5454f65dff2
@@ -1,7 +1,6 @@
1
1
  require 'active_support'
2
2
  require 'active_support/core_ext/string'
3
3
 
4
-
5
4
  Dir[File.join(File.dirname(__FILE__), 'logstash_rails', '*.rb')].each do |file|
6
5
  require file
7
6
  end
@@ -1,3 +1,3 @@
1
1
  module LogstashRails
2
- VERSION = "0.3.0"
2
+ VERSION = "0.3.2"
3
3
  end
@@ -12,8 +12,7 @@ Gem::Specification.new do |gem|
12
12
  gem.homepage = "https://github.com/cmertz/logstash_rails"
13
13
  gem.license = "GPL"
14
14
 
15
- gem.files = `git ls-files`.split($/)
16
- gem.test_files = gem.files.grep(%r{^spec/})
15
+ gem.files = Dir['lib/**/*'] + %w(LICENSE.txt logstash_rails.gemspec)
17
16
  gem.require_paths = ["lib"]
18
17
 
19
18
  gem.add_dependency('logstash-event', '~> 1.2.02')
metadata CHANGED
@@ -1,46 +1,41 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
5
- prerelease:
4
+ version: 0.3.2
6
5
  platform: ruby
7
6
  authors:
8
7
  - cmertz
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-11-20 00:00:00.000000000 Z
11
+ date: 2014-07-17 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: logstash-event
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ~>
17
+ - - "~>"
20
18
  - !ruby/object:Gem::Version
21
19
  version: 1.2.02
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ~>
24
+ - - "~>"
28
25
  - !ruby/object:Gem::Version
29
26
  version: 1.2.02
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: activesupport
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - ">="
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - ">="
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  description: Send events from Rails to Logstash without logger foo.
@@ -50,13 +45,7 @@ executables: []
50
45
  extensions: []
51
46
  extra_rdoc_files: []
52
47
  files:
53
- - .gitignore
54
- - .rspec
55
- - .travis.yml
56
- - Gemfile
57
48
  - LICENSE.txt
58
- - README.md
59
- - Rakefile
60
49
  - lib/logstash_rails.rb
61
50
  - lib/logstash_rails/formatter.rb
62
51
  - lib/logstash_rails/formatter/basic.rb
@@ -71,54 +60,29 @@ files:
71
60
  - lib/logstash_rails/transport_base.rb
72
61
  - lib/logstash_rails/version.rb
73
62
  - logstash_rails.gemspec
74
- - spec/lib/logstash_rails/formatter/basic_spec.rb
75
- - spec/lib/logstash_rails/formatter/flatten_params_spec.rb
76
- - spec/lib/logstash_rails/formatter/source_spec.rb
77
- - spec/lib/logstash_rails/transport/logfile_spec.rb
78
- - spec/lib/logstash_rails/transport/logstash_tcp_spec.rb
79
- - spec/lib/logstash_rails/transport/logstash_udp_spec.rb
80
- - spec/lib/logstash_rails/transport/redis_spec.rb
81
- - spec/lib/logstash_rails/transport_base_spec.rb
82
- - spec/spec_helper.rb
83
63
  homepage: https://github.com/cmertz/logstash_rails
84
64
  licenses:
85
65
  - GPL
66
+ metadata: {}
86
67
  post_install_message:
87
68
  rdoc_options: []
88
69
  require_paths:
89
70
  - lib
90
71
  required_ruby_version: !ruby/object:Gem::Requirement
91
- none: false
92
72
  requirements:
93
- - - ! '>='
73
+ - - ">="
94
74
  - !ruby/object:Gem::Version
95
75
  version: '0'
96
- segments:
97
- - 0
98
- hash: 3722539195248864863
99
76
  required_rubygems_version: !ruby/object:Gem::Requirement
100
- none: false
101
77
  requirements:
102
- - - ! '>='
78
+ - - ">="
103
79
  - !ruby/object:Gem::Version
104
80
  version: '0'
105
- segments:
106
- - 0
107
- hash: 3722539195248864863
108
81
  requirements: []
109
82
  rubyforge_project:
110
- rubygems_version: 1.8.24
83
+ rubygems_version: 2.2.2
111
84
  signing_key:
112
- specification_version: 3
85
+ specification_version: 4
113
86
  summary: Send events from Rails to Logstash without logger foo.
114
- test_files:
115
- - spec/lib/logstash_rails/formatter/basic_spec.rb
116
- - spec/lib/logstash_rails/formatter/flatten_params_spec.rb
117
- - spec/lib/logstash_rails/formatter/source_spec.rb
118
- - spec/lib/logstash_rails/transport/logfile_spec.rb
119
- - spec/lib/logstash_rails/transport/logstash_tcp_spec.rb
120
- - spec/lib/logstash_rails/transport/logstash_udp_spec.rb
121
- - spec/lib/logstash_rails/transport/redis_spec.rb
122
- - spec/lib/logstash_rails/transport_base_spec.rb
123
- - spec/spec_helper.rb
87
+ test_files: []
124
88
  has_rdoc:
data/.gitignore DELETED
@@ -1,17 +0,0 @@
1
- *.gem
2
- *.rbc
3
- .bundle
4
- .config
5
- .yardoc
6
- Gemfile.lock
7
- InstalledFiles
8
- _yardoc
9
- coverage
10
- doc/
11
- lib/bundler/man
12
- pkg
13
- rdoc
14
- spec/reports
15
- test/tmp
16
- test/version_tmp
17
- tmp
data/.rspec DELETED
@@ -1,5 +0,0 @@
1
- --require spec_helper
2
- --order random
3
- --colour
4
- --format nested
5
- -b
@@ -1,5 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 1.9.3
4
- - 2.0
5
- script: rake test
data/Gemfile DELETED
@@ -1,11 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gemspec
4
-
5
- gem 'coveralls', require: false
6
- gem 'fakeredis'
7
- gem 'pry'
8
- gem 'rake'
9
- gem 'redcarpet'
10
- gem 'rspec'
11
- gem 'yard'
data/README.md DELETED
@@ -1,140 +0,0 @@
1
- # LogstashRails
2
- [![Gem Version](https://badge.fury.io/rb/logstash_rails.png)](http://badge.fury.io/rb/logstash_rails)
3
- [![Build Status](https://secure.travis-ci.org/cmertz/logstash_rails.png)](http://travis-ci.org/cmertz/logstash_rails)
4
- [![Coverage Status](https://coveralls.io/repos/cmertz/logstash_rails/badge.png)](https://coveralls.io/r/cmertz/logstash_rails)
5
- [![Code Climate](https://codeclimate.com/github/cmertz/logstash_rails.png)](https://codeclimate.com/github/cmertz/logstash_rails)
6
- [![Dependency Status](https://gemnasium.com/cmertz/logstash_rails.png)](https://gemnasium.com/cmertz/logstash_rails)
7
-
8
- Send events from Rails to Logstash without logger foo.
9
-
10
- LogstashRails uses `ActiveSupport::Notifications` to subscribe to events from *Rails* and push them to *Logstash*.
11
- It emmits json formatted `Logstash::Event`.
12
-
13
- There is no `Logger` configuration, logfile or filter in Logstash required.
14
-
15
- ## Contents
16
-
17
- * [Usage](#usage)
18
- * [API](#api)
19
- * [Configuration](#configuration)
20
- * [Examples](#examples)
21
- * [Contributing](#contributing)
22
-
23
- ## Features
24
-
25
- * fine grained control over which events will be subscribed to
26
- * some json event format normalization to prevent troubles with `Elasticsearch`
27
- * can be reconfigured at runtime
28
- * tcp and udp transports for testing
29
-
30
- ## Usage
31
-
32
- Add logstash-rails to your applications `Gemfile`
33
-
34
- ```ruby
35
- gem 'logstash_rails'
36
- ```
37
-
38
- and provide an initializer for configuration.
39
-
40
- You will have to add redis as a dependency to your application in order to use the redis transport.
41
-
42
- ### API
43
-
44
- `LogstashRails.configure(options_hash)` returns an configured instance of `LogstashRails::Transport`.
45
- See [Configuration](#configuration) for the options.
46
-
47
- `LogstashRails::Transport#destroy` releases all resources (e.g. closes sockets) and unsubscribes
48
- from all events for this instance.
49
-
50
-
51
- ### Configuration
52
-
53
- `LogstashRails.config`takes an options hash with the following options:
54
-
55
- __transport__
56
-
57
- redis, logstash-udp, logstash-tcp and logfile are available.
58
-
59
- logstash-tcp and logstash-udp should only be used for testing since they produce significant runtime overhead.
60
-
61
- __events__
62
-
63
- list of event name patterns to subscribe to. `Regex` and `String` is
64
- supported. Defaults to `[/.*/]`
65
-
66
- See [Active Support Instrumentation](http://edgeguides.rubyonrails.org/active_support_instrumentation.html)
67
- for the events that `Rails` emmits.
68
-
69
- __flatten_params__
70
-
71
- `true` or `false`, defaults to true
72
-
73
- flatten the params hash of `process_action.action_controller` events. This gets rid of collisions in dynamic mappings in ElasticSearch
74
-
75
- __logger__
76
-
77
- logger to use in case of exceptions while pushing events to the transport
78
-
79
- __transport specific options__
80
-
81
- should be self explaining
82
-
83
- redis:
84
- * __host__
85
- * __port__
86
- * __redis_key__
87
-
88
- logfile:
89
- * __logfile__
90
-
91
-
92
- logstash-tcp:
93
- * __host__
94
- * __port__
95
-
96
-
97
- logstash-udp:
98
- * __host__
99
- * __port__
100
-
101
-
102
- ### Examples
103
-
104
- The most basic configuration looks like:
105
-
106
- ```ruby
107
- LogstashRails.config(transport: :logfile)
108
- ```
109
-
110
- This will write _all_ events to `APP_ROOT/log/logstash_rails.log`
111
-
112
- A more complete example looks like:
113
-
114
- ```ruby
115
- if Rails.env.production?
116
- LogstashRails.config(
117
- transport: :redis,
118
- host: '1.2.3.4',
119
- port: 12345,
120
- redis_key: 'my_key',
121
- events: [/action_controller/]
122
- )
123
- end
124
- ```
125
-
126
- This will only subscribe to events from `ActionController`.
127
-
128
-
129
- ## Contributing
130
-
131
- 1. Fork it.
132
- 2. Create a branch (`git checkout -b my_feature`)
133
- 3. Commit your changes (`git commit -am "Added ..."`)
134
- 4. Push to the branch (`git push origin my_feature`)
135
- 5. Open a Pull Request
136
- 6. Enjoy a refreshing Orangina and wait
137
-
138
- ## License
139
-
140
- Licensed under the GNU General Public License version 3 (GPLv3). See [LICENSE.txt](/LICENSE.txt) for details.
data/Rakefile DELETED
@@ -1,18 +0,0 @@
1
- require 'bundler/gem_tasks'
2
- require 'yard'
3
- require 'rspec/core/rake_task'
4
-
5
- RSpec::Core::RakeTask.new(:test)
6
-
7
- YARD::Rake::YardocTask.new do |t|
8
- t.name = 'doc'
9
- end
10
-
11
- desc 'cleanup working copy'
12
- task :clean do
13
- FileUtils.rm_rf %w(coverage doc pkg)
14
- end
15
-
16
- task :default do
17
- system "rake -T"
18
- end
@@ -1,21 +0,0 @@
1
- describe LogstashRails::Formatter::Basic do
2
-
3
- subject do
4
- LogstashRails::Formatter.get.perform('event', Time.now, Time.now, 1, {request: 'toto'})
5
- end
6
-
7
- it 'deletes Rack::Request' do
8
- subject.should_not include('request')
9
- end
10
-
11
- %w(message host process_id source).each do |field|
12
- it "adds #{field}" do
13
- subject.should include(field)
14
- end
15
- end
16
-
17
- it 'has the event type as message' do
18
- JSON.parse(subject)["message"].should eq 'event'
19
- end
20
-
21
- end
@@ -1,26 +0,0 @@
1
- describe LogstashRails::Formatter::FlattenParams do
2
-
3
- subject do
4
- lambda do |payload|
5
- LogstashRails::Formatter.get.perform('event', Time.now, Time.now, 1, payload)
6
- end
7
- end
8
-
9
- it 'flattens params' do
10
- payload = {params:{a: {b: 1}, c: 2}}
11
-
12
- result = subject.call(payload)
13
-
14
- JSON.parse(result).should include({'params' => {'a__b' => 1, 'c' => 2}})
15
- end
16
-
17
- it 'does not flatten params' do
18
- formatter = LogstashRails::Formatter.get(flatten_params: false)
19
- payload = {params:{a: {b: 1}, c: 2}}
20
-
21
- result = formatter.perform('event', Time.now, Time.now, 1, payload)
22
-
23
- JSON.parse(result).should include({'params' => {'a' => {'b' => 1}, 'c' => 2}})
24
- end
25
-
26
- end
@@ -1,19 +0,0 @@
1
- describe LogstashRails::Formatter::Source do
2
-
3
- subject do
4
- lambda do |options, payload|
5
- LogstashRails::Formatter.get(options).perform('event', Time.now, Time.now, 1, payload)
6
- end
7
- end
8
-
9
- it 'knows its source' do
10
- result = subject.call({source: 'test'}, {})
11
- JSON.parse(result).should include({'source' => 'test'})
12
- end
13
-
14
- it 'can be disabled' do
15
- result = subject.call({source: false}, {})
16
- JSON.parse(result).keys.should_not include('source')
17
- end
18
-
19
- end
@@ -1,23 +0,0 @@
1
- describe LogstashRails::Transport::Logfile do
2
-
3
- let :logfile do
4
- Tempfile.new(File.basename(__FILE__))
5
- end
6
-
7
- subject do
8
- formatter = LogstashRails::Formatter.get
9
- LogstashRails::Transport::Logfile.new(formatter, logfile: logfile)
10
- end
11
-
12
- it { should respond_to :push }
13
-
14
- it 'writes events to a logfile' do
15
- event = 'foobar_event'
16
-
17
- subject.push(event)
18
-
19
- logfile.rewind
20
- logfile.read.should include(event)
21
- end
22
-
23
- end
@@ -1,59 +0,0 @@
1
- describe LogstashRails::Transport::LogstashTcp do
2
-
3
- before do
4
- @server = TCPServer.new(9000)
5
-
6
- @thread = Thread.new do
7
- client = @server.accept
8
- @received = client.gets
9
- client.close
10
- end
11
- end
12
-
13
- after do
14
- @thread.kill
15
- @server.close
16
- end
17
-
18
- let :logstash_tcp do
19
- formatter = LogstashRails::Formatter.get
20
- LogstashRails::Transport::LogstashTcp.new(formatter, port: 9000)
21
- end
22
-
23
- it do
24
- logstash_tcp.should respond_to :push
25
- end
26
-
27
- it 'uses Celluliod::IO if present' do
28
- celluloid = double(:celluloid, new: double(:socket, close: nil, write: nil))
29
- stub_const('Celluloid::IO::TCPSocket', celluloid)
30
-
31
- celluloid.should_receive(:new)
32
-
33
- logstash_tcp.push 'toto'
34
-
35
- logstash_tcp.destroy
36
- end
37
-
38
- it 'should close the tcp socket' do
39
- # initialize tcp socket
40
- logstash_tcp.push 'toto'
41
-
42
- socket = logstash_tcp.instance_variable_get(:@socket)
43
- expect{ logstash_tcp.destroy }.to change{ socket.closed? }.from(false).to(true)
44
- end
45
-
46
- it 'sends data over tcp' do
47
- logstash_tcp.push 'toto'
48
- logstash_tcp.destroy
49
- @thread.join
50
- @received.should eq 'toto'
51
- end
52
-
53
- it 'lazily connects the socket' do
54
- expect{ logstash_tcp.push 'toto' }.to change{
55
- logstash_tcp.instance_variable_get(:@socket).class
56
- }
57
- end
58
-
59
- end
@@ -1,28 +0,0 @@
1
- describe LogstashRails::Transport::LogstashUdp do
2
-
3
- subject do
4
- formatter = LogstashRails::Formatter.get
5
- LogstashRails::Transport::LogstashUdp.new(formatter, port: 9001)
6
- end
7
-
8
- it { should respond_to :push }
9
-
10
- it 'sends data over udp' do
11
- message = "toto"
12
- socket = UDPSocket.new
13
- socket.bind('127.0.0.1', 9001)
14
-
15
- received = nil
16
- thread = Thread.new do
17
- received = socket.recvfrom(message.length).first
18
- end
19
-
20
- subject.push message
21
-
22
- thread.join
23
- socket.close
24
-
25
- received.should eq message
26
- end
27
-
28
- end
@@ -1,51 +0,0 @@
1
- describe LogstashRails::Transport::Redis do
2
-
3
- before do
4
- Redis::Connection::Memory.reset_all_databases
5
- end
6
-
7
- subject do
8
- formatter = LogstashRails::Formatter.get
9
- LogstashRails::Transport::Redis.new(
10
- formatter,
11
- redis: Redis.new,
12
- redis_key: 'logstash',
13
- raise_errors: true
14
- )
15
- end
16
-
17
- it { should respond_to :push }
18
-
19
- it 'writes events to a redis list' do
20
- subject.push('foobar_event')
21
-
22
- Redis.new.lpop('logstash').should eq 'foobar_event'
23
- end
24
-
25
- it 'survives forking' do
26
- r,w = IO.pipe
27
-
28
- # use connection in parent process
29
- subject.push 'foo'
30
- Redis.new.lpop 'logstash'
31
-
32
- fork do
33
- # use connection in child process
34
- subject.push 'bar'
35
-
36
- w.write(Redis.new.lpop('logstash') == 'bar')
37
- w.flush
38
-
39
- # override exit hooks
40
- SimpleCov.at_exit{}
41
- Process.exit! true
42
- end
43
-
44
- w.close
45
-
46
- r.read.should eq 'true'
47
-
48
- Process.wait
49
- end
50
-
51
- end
@@ -1,33 +0,0 @@
1
- describe LogstashRails::TransportBase do
2
-
3
- subject do
4
- LogstashRails
5
- end
6
-
7
- it 'raises if no transport is specified' do
8
- expect { subject.config({}) }.to raise_error(KeyError)
9
- end
10
-
11
- it 'handles all events by default' do
12
- config = subject.config(transport: :redis)
13
-
14
- config.should_receive(:push)
15
-
16
- ActiveSupport::Notifications.instrument('foobar_event')
17
-
18
- config.destroy
19
- end
20
-
21
- it 'logs exceptions if a logger is given' do
22
- logger = double(:logger)
23
- config = subject.config(transport: :redis, logger: logger)
24
- config.stub(:push).and_raise(ArgumentError.new)
25
-
26
- logger.should_receive(:error)
27
-
28
- ActiveSupport::Notifications.instrument('foobar_event')
29
-
30
- config.destroy
31
- end
32
-
33
- end
@@ -1,16 +0,0 @@
1
- require 'coveralls'
2
- require 'simplecov'
3
-
4
- SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
5
- SimpleCov::Formatter::HTMLFormatter,
6
- Coveralls::SimpleCov::Formatter
7
- ]
8
-
9
- SimpleCov.start do
10
- add_filter('spec')
11
- end
12
-
13
- require 'bundler'
14
- Bundler.require
15
-
16
- require 'logstash_rails'