fluent-plugin-sentry-ex 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
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