fluent-plugin-sentry-rubrik 0.0.6

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
+ SHA1:
3
+ metadata.gz: 3507f5f5fab7e7d0bf4f63a068a477e5104ccb4c
4
+ data.tar.gz: 8e1421ef2d9a2aec57bbbda7e352d303edc1d660
5
+ SHA512:
6
+ metadata.gz: 61ce7bb5232e41a126d88994200950152cecc063739612188847ddace037280a2d0fc42af1440b2fade579bd950167948966bdb9ae9dec94f4feba9556432a8c
7
+ data.tar.gz: 185c04a69f1f765168a529d3aa017f6280a5af9117c76cba59eff1a2224e6ff8bc27f740a29f7e43fc6359e7ce49e9e64e75289c63fe49f7d38de91e6fb46501
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,126 @@
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 to the sentry DSN, as found in the Sentry dashboard.
69
+
70
+ * default_level<br>
71
+ [default] info
72
+
73
+ If a `level` is not present in the log, `default_level` is assumed.
74
+
75
+ * default_logger<br>
76
+ [default] fluentd
77
+
78
+ If a `logger` is not present in the log, `default_logger` is assumed.
79
+
80
+ * hostname_command<br>
81
+ [default] hostname
82
+ The name of the server reporting the error.
83
+
84
+ * flush_interval<br>
85
+ [default] 0sec
86
+
87
+ * report_levels
88
+ [default] fatal error warning
89
+
90
+ Only report to Sentry logs with `report_levels`.
91
+
92
+ Note that the default ignores `info` and `debug` logs. And `default_level`
93
+ defaults to `info`. This might ignore more logs than you anticipated.
94
+
95
+ * tags_key
96
+ [default] ""
97
+
98
+ Report those items with the given key as tags to Sentry. This makes it possible
99
+ to correlate events via tags. Access to structured tag is supported, for
100
+ example, given the following log:
101
+
102
+ ```
103
+ "{ msg: foo k8s: { app: myapp, container: mycontainer } }
104
+ ```
105
+ The tag key `k8s.app` will add the tag `k8s.app: myapp` to the Sentry event.
106
+
107
+ It also support rewriting Tag with SetTagKeyMixin.
108
+
109
+ * remove_tag_prefix
110
+ * remove_tag_suffix
111
+ * add_tag_prefix
112
+ * add_tag_suffix
113
+
114
+ ## Blog Articles
115
+
116
+ ## TODO
117
+
118
+ Pull requests are very welcome!!
119
+
120
+ ## Copyright
121
+
122
+ Copyright © 2014- Kentaro Yoshida ([@yoshi_ken](https://twitter.com/yoshi_ken))
123
+
124
+ ## License
125
+
126
+ 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-rubrik"
7
+ spec.version = "0.0.6"
8
+ spec.authors = ["Kentaro Yoshida", "François-Xavier Bourlet"]
9
+ spec.email = ["y.ken.studio@gmail.com", "fx.bourlet@rubrik.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/bombela/fluent-plugin-sentry"
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", "~> 1.16"
20
+ spec.add_development_dependency "rake", "~> 12.3"
21
+ spec.add_development_dependency "webmock", "~> 3.3"
22
+ spec.add_development_dependency "test-unit", "~> 3.2"
23
+ spec.add_development_dependency "appraisal", "~> 2.2"
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", "~> 1.1"
30
+ end
31
+ spec.add_runtime_dependency "sentry-raven", "~> 2.7"
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,114 @@
1
+ require 'fluent/output'
2
+ require 'time'
3
+ require 'raven'
4
+
5
+
6
+ module Fluent
7
+ class Fluent::SentryOutput < BufferedOutput
8
+ Fluent::Plugin.register_output('sentry', self)
9
+
10
+ include Fluent::HandleTagNameMixin
11
+
12
+ LOG_LEVEL = %w(fatal error warning info debug).to_set()
13
+ EVENT_KEYS = %w(message msg timestamp level logger).to_set()
14
+ DEFAULT_HOSTNAME_COMMAND = 'hostname'
15
+
16
+ config_param :default_level, :string, :default => 'info'
17
+ config_param :default_logger, :string, :default => 'fluentd'
18
+ config_param :report_levels, :array, value_type: :string, :default => %w(fatal error warning)
19
+ config_param :tags_key, :array, value_type: :string, :default => %w()
20
+ config_param :endpoint_url, :string
21
+ config_param :flush_interval, :time, :default => 0
22
+ config_param :hostname_command, :string, :default => 'hostname'
23
+
24
+ def configure(conf)
25
+ super
26
+
27
+ if @endpoint_url.nil?
28
+ raise Fluent::ConfigError, "sentry: missing parameter for 'endpoint_url'"
29
+ end
30
+
31
+ unless LOG_LEVEL.include?(@default_level)
32
+ raise Fluent::ConfigError, "sentry: unsupported default reporting log level for 'default_level'"
33
+ end
34
+
35
+ @report_levels = @report_levels.to_set()
36
+ @report_levels.each do |report_level|
37
+ unless LOG_LEVEL.include?(report_level)
38
+ raise Fluent::ConfigError, "sentry: unsupported level in report_levels for 'report_level'"
39
+ end
40
+ end
41
+
42
+ @tags_key = @tags_key.to_set()
43
+
44
+ hostname_command = @hostname_command || DEFAULT_HOSTNAME_COMMAND
45
+ @hostname = `#{hostname_command}`.chomp
46
+
47
+ @configuration = Raven::Configuration.new
48
+ @configuration.server = @endpoint_url
49
+ @configuration.server_name = @hostname
50
+ @configuration.send_modules = false
51
+ @configuration.release = nil
52
+ @client = Raven::Client.new(@configuration)
53
+ @context = Raven::Context.new
54
+ end
55
+
56
+ def start
57
+ super
58
+ end
59
+
60
+ def format(tag, time, record)
61
+ [tag, time, record].to_msgpack
62
+ end
63
+
64
+ def shutdown
65
+ super
66
+ end
67
+
68
+ def write(chunk)
69
+ chunk.msgpack_each do |tag, time, record|
70
+ begin
71
+ notify_sentry(tag, time, record)
72
+ rescue => e
73
+ $log.error("Sentry Error:", :error_class => e.class, :error => e.message)
74
+ end
75
+ end
76
+ end
77
+
78
+ def notify_sentry(tag, time, record)
79
+ level = record['level'] || @default_level
80
+ if not @report_levels.include?(level)
81
+ return
82
+ end
83
+
84
+ event = Raven::Event.new(
85
+ :configuration => @configuration,
86
+ :context => @context,
87
+ :timestamp => record['timestamp'] || Time.at(time).utc.strftime('%Y-%m-%dT%H:%M:%S'),
88
+ :level => level,
89
+ :logger => record['logger'] || @default_logger,
90
+ :message => record['message'] || record['msg'] || "",
91
+ )
92
+ event.tags = event.tags
93
+ .merge({ :fluentd_tag => tag })
94
+ .merge(extract_tags(record))
95
+ event.extra = record.reject{ |key| EVENT_KEYS.include?(key) }
96
+ @client.send_event(event)
97
+ end
98
+
99
+ def extract_tags(record, path=nil)
100
+ r = {}
101
+ record.each { |k, v|
102
+ kpath = path.nil? ? k : path + "." + k
103
+ if v.is_a?(Hash)
104
+ r.merge!(extract_tags(v, kpath))
105
+ else
106
+ if @tags_key.include?(kpath)
107
+ r[kpath] = v
108
+ end
109
+ end
110
+ }
111
+ return r
112
+ end
113
+ end
114
+ 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,160 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fluent-plugin-sentry-rubrik
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.6
5
+ platform: ruby
6
+ authors:
7
+ - Kentaro Yoshida
8
+ - François-Xavier Bourlet
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2018-02-24 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: '1.16'
21
+ type: :development
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: '1.16'
28
+ - !ruby/object:Gem::Dependency
29
+ name: rake
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: '12.3'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '12.3'
42
+ - !ruby/object:Gem::Dependency
43
+ name: webmock
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: '3.3'
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: '3.3'
56
+ - !ruby/object:Gem::Dependency
57
+ name: test-unit
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: '3.2'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '3.2'
70
+ - !ruby/object:Gem::Dependency
71
+ name: appraisal
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - "~>"
75
+ - !ruby/object:Gem::Version
76
+ version: '2.2'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - "~>"
82
+ - !ruby/object:Gem::Version
83
+ version: '2.2'
84
+ - !ruby/object:Gem::Dependency
85
+ name: fluentd
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - "~>"
89
+ - !ruby/object:Gem::Version
90
+ version: '1.1'
91
+ type: :runtime
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - "~>"
96
+ - !ruby/object:Gem::Version
97
+ version: '1.1'
98
+ - !ruby/object:Gem::Dependency
99
+ name: sentry-raven
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - "~>"
103
+ - !ruby/object:Gem::Version
104
+ version: '2.7'
105
+ type: :runtime
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - "~>"
110
+ - !ruby/object:Gem::Version
111
+ version: '2.7'
112
+ description:
113
+ email:
114
+ - y.ken.studio@gmail.com
115
+ - fx.bourlet@rubrik.com
116
+ executables: []
117
+ extensions: []
118
+ extra_rdoc_files: []
119
+ files:
120
+ - ".gitignore"
121
+ - ".travis.yml"
122
+ - Appraisals
123
+ - Gemfile
124
+ - LICENSE
125
+ - README.md
126
+ - Rakefile
127
+ - fluent-plugin-sentry.gemspec
128
+ - gemfiles/fluentd_v0.10.gemfile
129
+ - gemfiles/fluentd_v0.12.gemfile
130
+ - lib/fluent/plugin/out_sentry.rb
131
+ - test/helper.rb
132
+ - test/plugin/test_out_sentry.rb
133
+ homepage: https://github.com/bombela/fluent-plugin-sentry
134
+ licenses:
135
+ - Apache-2.0
136
+ metadata: {}
137
+ post_install_message:
138
+ rdoc_options: []
139
+ require_paths:
140
+ - lib
141
+ required_ruby_version: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ required_rubygems_version: !ruby/object:Gem::Requirement
147
+ requirements:
148
+ - - ">="
149
+ - !ruby/object:Gem::Version
150
+ version: '0'
151
+ requirements: []
152
+ rubyforge_project:
153
+ rubygems_version: 2.5.2.1
154
+ signing_key:
155
+ specification_version: 4
156
+ summary: Fluentd output plugin that sends aggregated errors/exception events to Sentry.
157
+ Sentry is a event logging and aggregation platform.
158
+ test_files:
159
+ - test/helper.rb
160
+ - test/plugin/test_out_sentry.rb