fluent-plugin-sentry-ex 0.0.5

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 2bb0c8ec02c50b37310e6ba5734cfdf7005430cf0ef6dfc30dd3f741c3355444
4
+ data.tar.gz: 59b2e6abf80381032d605c4f5611738e32fe3b40426409f7eab24fc19102701d
5
+ SHA512:
6
+ metadata.gz: 4addf3dff74dfb512c0bfd72297b202de9bd332fbd40a4a1e3561482fc92787ecfc186b2558e0fe2fdc509966132ecf2f5ae679be9b19a70113be9ebb94f8699
7
+ data.tar.gz: e396407515247e0bdefc5b1a8c6987b5a74cc6bef62939d823e35acd03cf670eebee610e0936a4101e7f903fc23a0b3e49a773cdacbe8a4a8193128d7b78dd1b
data/.gitignore ADDED
@@ -0,0 +1,5 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+ vendor/*
data/.travis.yml ADDED
@@ -0,0 +1,29 @@
1
+ language: ruby
2
+
3
+ rvm:
4
+ - 2.2
5
+ - 2.1
6
+
7
+ before_script:
8
+ - export RAILS_ENV=default
9
+
10
+ gemfile:
11
+ - Gemfile
12
+ - gemfiles/fluentd_v0.10.gemfile
13
+ - gemfiles/fluentd_v0.12.gemfile
14
+
15
+ # to avoid travis-ci issue since 2015-12-25
16
+ before_install:
17
+ - gem update bundler
18
+
19
+ matrix:
20
+ include:
21
+ - rvm: 1.9.3
22
+ gemfile: gemfiles/fluentd_v0.10.gemfile
23
+ - rvm: 1.9.3
24
+ gemfile: gemfiles/fluentd_v0.12.gemfile
25
+ - rvm: 2.0.0
26
+ gemfile: gemfiles/fluentd_v0.10.gemfile
27
+ - rvm: 2.0.0
28
+ gemfile: gemfiles/fluentd_v0.12.gemfile
29
+
data/Appraisals ADDED
@@ -0,0 +1,8 @@
1
+ appraise "fluentd v0.10" do
2
+ gem "fluentd", "~> 0.10.46"
3
+ end
4
+
5
+ appraise "fluentd v0.12" do
6
+ gem "fluentd", "~> 0.12.0"
7
+ end
8
+
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in fluent-plugin-sentry.gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,14 @@
1
+ Copyright (c) 2014- Kentaro Yoshida
2
+
3
+ Licensed under the Apache License, Version 2.0 (the "License");
4
+ you may not use this file except in compliance with the License.
5
+ You may obtain a copy of the License at
6
+
7
+ http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+ Unless required by applicable law or agreed to in writing, software
10
+ distributed under the License is distributed on an "AS IS" BASIS,
11
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ See the License for the specific language governing permissions and
13
+ limitations under the License.
14
+
data/README.md ADDED
@@ -0,0 +1,102 @@
1
+ # fluent-plugin-sentry [![Build Status](https://travis-ci.org/y-ken/fluent-plugin-sentry.png?branch=master)](https://travis-ci.org/y-ken/fluent-plugin-sentry)
2
+
3
+ ## Overview
4
+
5
+ fluent-plugin-sentry is a fluentd output plugin that sends aggregated errors/exception events to Sentry. Sentry is a event logging and aggregation platform.<br>
6
+
7
+ Sentry alone does not buffer incoming requests, so if your Sentry instance is under load, Sentry can respond with a 503 Service Unavailable.<br>
8
+
9
+ fluent-plugin-sentry extends fluent buffered output and enables a fluend user to buffer and flush messages to Sentry with reliable delivery.
10
+
11
+ * [Sentry Official web](https://getsentry.com/welcome/)
12
+ * [Sentry Documents](http://sentry.readthedocs.org/en/latest/) [Screenshots](https://github.com/getsentry/sentry#screenshots)
13
+
14
+ > ![http://blog.getsentry.com/images/hero.png](https://cloud.githubusercontent.com/assets/1734549/5498750/2b471a6c-8767-11e4-8634-961c99e635ed.png)
15
+ (quoted from http://blog.getsentry.com/)
16
+
17
+
18
+ ## Installation
19
+
20
+ install with `gem` or td-agent provided command as:
21
+
22
+ ```bash
23
+ # for fluentd
24
+ $ gem install fluent-plugin-sentry
25
+
26
+ # for td-agent
27
+ $ sudo /usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-sentry
28
+
29
+ # for td-agent2
30
+ $ sudo td-agent-gem install fluent-plugin-sentry
31
+ ```
32
+
33
+ ## Preparation
34
+
35
+ create sentry dashboard first. It could start with cost free!!
36
+
37
+ * Create an account at https://getsentry.com/pricing/
38
+
39
+ OR
40
+
41
+ * Launch Sentry at the self manager server with https://github.com/getsentry/sentry
42
+
43
+ ## Usage
44
+
45
+ ```xml
46
+ <source>
47
+ @type forward
48
+ </source>
49
+
50
+ <match notify.**>
51
+ @type sentry
52
+
53
+ # Set endpoint API URL
54
+ endpoint_url https://API_KEY:API_PASSWORD@app.getsentry.com/PROJECT_ID
55
+
56
+ # Set default events value of 'server_name'
57
+ # To set short hostname, set like below.
58
+ hostname_command hostname -s
59
+
60
+ # rewrite shown tag name for Sentry dashboard
61
+ remove_tag_prefix notify.
62
+ </match>
63
+ ```
64
+
65
+ ## Parameters
66
+
67
+ * endpoint_url (Required)<br>
68
+ Set endpoint API URL which shows at Sentry dashboard. (it is not sentry account information)
69
+
70
+ * default_level<br>
71
+ [default] error
72
+
73
+ * defalut_logger<br>
74
+ [default] flunetd
75
+
76
+ * hostname_command<br>
77
+ [default] hostname
78
+ Set default frontend value of 'server_name'
79
+
80
+ * flush_interval<br>
81
+ [default] 0sec
82
+
83
+ It also support rewriting Tag with SetTagKeyMixin.
84
+
85
+ * remove_tag_prefix
86
+ * remove_tag_suffix
87
+ * add_tag_prefix
88
+ * add_tag_suffix
89
+
90
+ ## Blog Articles
91
+
92
+ ## TODO
93
+
94
+ Pull requests are very welcome!!
95
+
96
+ ## Copyright
97
+
98
+ Copyright © 2014- Kentaro Yoshida ([@yoshi_ken](https://twitter.com/yoshi_ken))
99
+
100
+ ## License
101
+
102
+ Apache License, Version 2.0
data/Rakefile ADDED
@@ -0,0 +1,9 @@
1
+ require "bundler/gem_tasks"
2
+ require "rake/testtask"
3
+ Rake::TestTask.new(:test) do |test|
4
+ test.libs << 'lib' << 'test'
5
+ test.pattern = 'test/**/test_*.rb'
6
+ test.verbose = true
7
+ end
8
+
9
+ task :default => :test
@@ -0,0 +1,32 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "fluent-plugin-sentry-ex"
7
+ spec.version = "0.0.5"
8
+ spec.authors = ["Kentaro Yoshida"]
9
+ spec.email = ["y.ken.studio@gmail.com"]
10
+ spec.summary = %q{Fluentd output plugin that sends aggregated errors/exception events to Sentry. Sentry is a event logging and aggregation platform.}
11
+ spec.homepage = "https://github.com/chuanwenchen/fluent-plugin-sentry-ex"
12
+ spec.license = "Apache-2.0"
13
+
14
+ spec.files = `git ls-files`.split($/)
15
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
16
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
17
+ spec.require_paths = ["lib"]
18
+
19
+ spec.add_development_dependency "bundler"
20
+ spec.add_development_dependency "rake"
21
+ spec.add_development_dependency "webmock"
22
+ spec.add_development_dependency "test-unit", ">= 3.1.0"
23
+ spec.add_development_dependency "appraisal"
24
+
25
+ # Since Fluentd v0.14 requires ruby 2.1 or later.
26
+ if defined?(RUBY_VERSION) && RUBY_VERSION < "2.1"
27
+ spec.add_runtime_dependency "fluentd", "< 0.14"
28
+ else
29
+ spec.add_runtime_dependency "fluentd"
30
+ end
31
+ spec.add_runtime_dependency "sentry-raven", "~> 0.15.0"
32
+ end
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "http://rubygems.org"
4
+
5
+ gem "fluentd", "~> 0.10.46"
6
+
7
+ gemspec :path => "../"
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "http://rubygems.org"
4
+
5
+ gem "fluentd", "~> 0.12.0"
6
+
7
+ gemspec :path => "../"
@@ -0,0 +1,81 @@
1
+ class Fluent::SentryOutput < Fluent::BufferedOutput
2
+ Fluent::Plugin.register_output('sentry', self)
3
+
4
+ include Fluent::HandleTagNameMixin
5
+
6
+ LOG_LEVEL = %w(fatal error warning info debug)
7
+ EVENT_KEYS = %w(message timestamp time_spent level logger culprit server_name release tags)
8
+ DEFAULT_HOSTNAME_COMMAND = 'hostname'
9
+
10
+ config_param :default_level, :string, :default => 'error'
11
+ config_param :default_logger, :string, :default => 'fluentd'
12
+ config_param :endpoint_url, :string
13
+ config_param :flush_interval, :time, :default => 0
14
+ config_param :hostname_command, :string, :default => 'hostname'
15
+
16
+ def initialize
17
+ require 'time'
18
+ require 'raven'
19
+
20
+ super
21
+ end
22
+
23
+ def configure(conf)
24
+ super
25
+
26
+ if @endpoint_url.nil?
27
+ raise Fluent::ConfigError, "sentry: missing parameter for 'endpoint_url'"
28
+ end
29
+
30
+ unless LOG_LEVEL.include?(@default_level)
31
+ raise Fluent::ConfigError, "sentry: unsupported default reporting log level for 'default_level'"
32
+ end
33
+
34
+ hostname_command = @hostname_command || DEFAULT_HOSTNAME_COMMAND
35
+ @hostname = `#{hostname_command}`.chomp
36
+
37
+ @configuration = Raven::Configuration.new
38
+ @configuration.server = @endpoint_url
39
+ @configuration.server_name = @hostname
40
+ @client = Raven::Client.new(@configuration)
41
+ end
42
+
43
+ def start
44
+ super
45
+ end
46
+
47
+ def format(tag, time, record)
48
+ [tag, time, record].to_msgpack
49
+ end
50
+
51
+ def shutdown
52
+ super
53
+ end
54
+
55
+ def write(chunk)
56
+ chunk.msgpack_each do |tag, time, record|
57
+ begin
58
+ notify_sentry(tag, time, record)
59
+ rescue => e
60
+ $log.error("Sentry Error:", :error_class => e.class, :error => e.message)
61
+ end
62
+ end
63
+ end
64
+
65
+ def notify_sentry(tag, time, record)
66
+ event = Raven::Event.new(
67
+ :configuration => @configuration,
68
+ :context => Raven::Context.new,
69
+ :message => record['message']
70
+ )
71
+ event.timestamp = record['timestamp'] || Time.at(time).utc.strftime('%Y-%m-%dT%H:%M:%S')
72
+ event.time_spent = record['time_spent'] || nil
73
+ event.level = record['level'] || @default_level
74
+ event.logger = record['logger'] || @default_logger
75
+ event.server_name = record['server_name'] || @hostname
76
+ event.release = record['release'] if record['release']
77
+ event.tags = event.tags.merge({ :tag => tag }.merge(record['tags'] || {}))
78
+ event.extra = record.reject{ |key| EVENT_KEYS.include?(key) }
79
+ @client.send_event(event)
80
+ end
81
+ end
data/test/helper.rb ADDED
@@ -0,0 +1,28 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
10
+ require 'test/unit'
11
+
12
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
13
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
14
+ require 'fluent/test'
15
+ unless ENV.has_key?('VERBOSE')
16
+ nulllogger = Object.new
17
+ nulllogger.instance_eval {|obj|
18
+ def method_missing(method, *args)
19
+ # pass
20
+ end
21
+ }
22
+ $log = nulllogger
23
+ end
24
+
25
+ require 'fluent/plugin/out_sentry'
26
+
27
+ class Test::Unit::TestCase
28
+ end
@@ -0,0 +1,129 @@
1
+ require 'helper'
2
+ require 'webmock/test_unit'
3
+ require 'yajl'
4
+
5
+ WebMock.disable_net_connect!
6
+
7
+ class SentryOutputTest < Test::Unit::TestCase
8
+ def setup
9
+ Fluent::Test.setup
10
+ end
11
+
12
+ CONFIG = %[
13
+ type sentry
14
+ endpoint_url https://user:password@app.getsentry.com/12345
15
+ hostname_command hostname -s
16
+ remove_tag_prefix input.
17
+ ]
18
+
19
+ def create_driver(conf=CONFIG,tag='test',use_v1=false)
20
+ require 'fluent/version'
21
+ if Gem::Version.new(Fluent::VERSION) < Gem::Version.new('0.12')
22
+ Fluent::Test::OutputTestDriver.new(Fluent::SentryOutput, tag).configure(conf, use_v1)
23
+ else
24
+ Fluent::Test::BufferedOutputTestDriver.new(Fluent::SentryOutput, tag).configure(conf, use_v1)
25
+ end
26
+ end
27
+
28
+ def stub_post(url="https://app.getsentry.com/api/12345/store/")
29
+ parser = Yajl::Parser.new
30
+ stub_request(:post, url).with do |req|
31
+ @content_type = req.headers["Content-Type"]
32
+ message = Zlib::Inflate.inflate(Base64.decode64(req.body))
33
+ @body = parser.parse(message)
34
+ end
35
+ end
36
+
37
+ def stub_response(url="https://app.getsentry.com/api/12345/store/")
38
+ stub_request(:post, url).with do |req|
39
+ @content_type = req.headers["Content-Type"]
40
+ message = Zlib::Inflate.inflate(Base64.decode64(req.body))
41
+ @body = {"eventID"=>"fe0263d6f55d014cade15a8681ae58ed", "tags"=>[["tag", "app1_error"], ["cool", "bar"], ["level", "warning"], ["logger", "zaphod"], ["server_name", "bc40a4be7b2d"], ["sentry:release", "wingnut"]], "nextEventID"=>nil, "dateCreated"=>"2015-10-30T08:25:48Z", "timeSpent"=>13, "user"=>nil, "entries"=>[], "previousEventID"=>nil, "message"=>"error has occoured.", "packages"=>{"fluentd"=>"0.12.16", "sentry-raven"=>"0.15.2", "cool.io"=>"1.4.1", "faraday"=>"0.9.2", "safe_yaml"=>"1.0.4", "msgpack"=>"0.5.12", "bundler"=>"1.10.6", "json"=>"1.8.3", "crack"=>"0.4.2", "tzinfo"=>"1.2.2", "thread_safe"=>"0.3.5", "tzinfo-data"=>"1.2015.7", "rake"=>"10.4.2", "yajl-ruby"=>"1.2.1", "hashdiff"=>"0.2.2", "sigdump"=>"0.2.3", "multipart-post"=>"2.0.0", "string-scrub"=>"0.0.5", "addressable"=>"2.3.8", "webmock"=>"1.22.2", "http_parser.rb"=>"0.6.0", "fluent-plugin-sentry"=>"0.0.1"}, "id"=>"127", "platform"=>"ruby", "context"=>{"something"=>{"foo"=>{"array"=>[1, 2, 3]}, "hash"=>{"nest"=>"data"}}}, "groupID"=>127}
42
+ end
43
+ end
44
+
45
+ def test_configure
46
+ assert_raise(Fluent::ConfigError) {
47
+ d = create_driver('')
48
+ }
49
+ d = create_driver(CONFIG)
50
+ assert_equal 'https://user:password@app.getsentry.com/12345', d.instance.config['endpoint_url']
51
+ end
52
+
53
+ def test_emit
54
+ stub_post
55
+ d1 = create_driver(CONFIG, 'input.app1_error')
56
+ emit_level = 'warning'
57
+ emit_message = 'error has occoured.'
58
+ emit_extra = {'foo' => {'array' => [1,2,3]}, 'hash' => {'nest' => 'data'}}
59
+ d1.run do
60
+ d1.emit({
61
+ 'level' => emit_level,
62
+ 'message' => emit_message,
63
+ 'something' => emit_extra
64
+ })
65
+ end
66
+ p @body
67
+ emits = d1.emits
68
+ timestamp = Time.now.utc.strftime('%Y-%m-%dT%H:%M:%S')
69
+ assert_equal 0, emits.length
70
+ assert_equal 'application/octet-stream', @content_type
71
+ assert_equal emit_message, @body['message']
72
+ assert_equal timestamp, @body['timestamp']
73
+ assert_equal emit_level, @body['level']
74
+ assert_equal 'fluentd', @body['logger']
75
+ assert_equal 'ruby', @body['platform']
76
+ assert_equal 'app1_error', @body['tags']['tag']
77
+ hostname = `#{d1.instance.config['hostname_command']}`.chomp
78
+ assert_equal hostname, @body['server_name']
79
+ extra_message = {'something' => emit_extra}
80
+ assert_equal extra_message, @body['extra']
81
+ end
82
+
83
+ def test_emit_mock
84
+ stub_response
85
+ emit_level = 'warning'
86
+ emit_message = 'error has occoured.'
87
+ emit_timestamp = '2015-10-30T08:25:48Z'.force_encoding("UTF-8")
88
+ emit_time_spent = '13'
89
+ emit_logger = 'zaphod'
90
+ emit_server_name = 'bc40a4be7b2d'
91
+ emit_culprit = 'whodonit'
92
+ emit_release = 'wingnut'
93
+ emit_extra = {'foo' => {'array' => [1,2,3]}, 'hash' => {'nest' => 'data'}}
94
+ d1 = create_driver(CONFIG, 'input.app1_error')
95
+ d1.run do
96
+ d1.emit({
97
+ 'level' => emit_level,
98
+ 'message' => emit_message,
99
+ 'something' => emit_extra,
100
+ 'tags' => {'cool' => 'bar'},
101
+ 'timestamp' => emit_timestamp,
102
+ 'logger' => emit_logger,
103
+ 'server_name' => emit_server_name,
104
+ 'release' => emit_release,
105
+ 'time_spent' => emit_time_spent,
106
+ 'culprit' => emit_culprit
107
+ })
108
+ end
109
+ p @body
110
+ emits = d1.emits
111
+ extra_message = {'something' => emit_extra}
112
+ assert_equal 0, emits.length
113
+ assert_equal 'application/octet-stream', @content_type
114
+ assert_equal extra_message, @body['context']
115
+ assert_equal emit_timestamp, @body['dateCreated']
116
+ assert_equal emit_message, @body['message']
117
+ assert_equal emit_level, Hash[ @body['tags'] ]['level']
118
+ assert_equal emit_logger, Hash[ @body['tags'] ]['logger']
119
+ assert_equal emit_server_name, Hash[ @body['tags'] ]['server_name']
120
+ assert_equal emit_release, Hash[ @body['tags'] ]['sentry:release']
121
+ assert_equal 'bar', Hash[ @body['tags'] ]['cool']
122
+ assert_equal 'app1_error', Hash[ @body['tags'] ]['tag']
123
+ assert_equal 'ruby', @body['platform']
124
+ assert_equal nil, @body['user']
125
+ # these values seem to only be visible in the ui. need to find the api to grab them
126
+ #assert_equal emit_culprit, @body['culprit']
127
+ #assert_equal emit_time_spent, @body['timeSpent']
128
+ end
129
+ end
metadata ADDED
@@ -0,0 +1,157 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fluent-plugin-sentry-ex
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.5
5
+ platform: ruby
6
+ authors:
7
+ - Kentaro Yoshida
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-09-08 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: webmock
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: test-unit
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: 3.1.0
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: 3.1.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: appraisal
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: fluentd
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: sentry-raven
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 0.15.0
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 0.15.0
111
+ description:
112
+ email:
113
+ - y.ken.studio@gmail.com
114
+ executables: []
115
+ extensions: []
116
+ extra_rdoc_files: []
117
+ files:
118
+ - ".gitignore"
119
+ - ".travis.yml"
120
+ - Appraisals
121
+ - Gemfile
122
+ - LICENSE
123
+ - README.md
124
+ - Rakefile
125
+ - fluent-plugin-sentry-ex.gemspec
126
+ - gemfiles/fluentd_v0.10.gemfile
127
+ - gemfiles/fluentd_v0.12.gemfile
128
+ - lib/fluent/plugin/out_sentry.rb
129
+ - test/helper.rb
130
+ - test/plugin/test_out_sentry.rb
131
+ homepage: https://github.com/chuanwenchen/fluent-plugin-sentry-ex
132
+ licenses:
133
+ - Apache-2.0
134
+ metadata: {}
135
+ post_install_message:
136
+ rdoc_options: []
137
+ require_paths:
138
+ - lib
139
+ required_ruby_version: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - ">="
142
+ - !ruby/object:Gem::Version
143
+ version: '0'
144
+ required_rubygems_version: !ruby/object:Gem::Requirement
145
+ requirements:
146
+ - - ">="
147
+ - !ruby/object:Gem::Version
148
+ version: '0'
149
+ requirements: []
150
+ rubygems_version: 3.0.8
151
+ signing_key:
152
+ specification_version: 4
153
+ summary: Fluentd output plugin that sends aggregated errors/exception events to Sentry.
154
+ Sentry is a event logging and aggregation platform.
155
+ test_files:
156
+ - test/helper.rb
157
+ - test/plugin/test_out_sentry.rb