sidekiq-logstash 0.3.0 → 1.2.1

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
- SHA1:
3
- metadata.gz: 25dbb440e6e8695797cc7857512139580ea799dc
4
- data.tar.gz: adc96a196faa34ee2b45822bca2cb6328fe1061c
2
+ SHA256:
3
+ metadata.gz: 2a99b4b463ed0d2801d2a32447a29767572a979675d6fca72781fbf0c1971fd9
4
+ data.tar.gz: dfbfffd67d75c8e0aff617ff8da1a219b264e72e84431632131ec346d4d0dcbb
5
5
  SHA512:
6
- metadata.gz: f10f38029bd0168fe3306fba03d3d7b6cce126a78333e7ce8e791194332988979a37d07d4bf5ea00c65e606f233e153cfc91af2702b26d2810adbd679e57dd4e
7
- data.tar.gz: 52fcd3c3e046e03b7e1c464d1eff487a916f06ebfd51fb435f9539650a2d690241ff8548136385bbac93f1e5f345ff0a260d4ba1072fc04d7515011538bb700c
6
+ metadata.gz: 38a2a810c8af2eb4afda4f2a340ee39680c4c768d6a9714d897950d23630c189063bf84001f60c97a57ca94c5f0ab03a2464fd9ea8d50803321ac3cfdae86d8d
7
+ data.tar.gz: 7c4338444e79978f20322d8491e8f4b1b04ff95c643f89fd8d51b92b8379e5b39265190f0b0b0c201ccc6081e89317eec8cedbc9f9fdbe72f505a23e8d705433
@@ -0,0 +1,42 @@
1
+ name: CI
2
+
3
+ on:
4
+ pull_request:
5
+
6
+ push:
7
+ branches: [master]
8
+
9
+ env:
10
+ GIT_COMMIT_SHA: ${{ github.sha }}
11
+ GIT_BRANCH: ${{ github.ref }}
12
+
13
+ jobs:
14
+ linting:
15
+ runs-on: ubuntu-latest
16
+
17
+ steps:
18
+ - uses: actions/checkout@v2
19
+ - uses: ruby/setup-ruby@v1
20
+ with:
21
+ ruby-version: 2.7
22
+ - name: Install dependencies
23
+ run: bundle install
24
+ - name: Run rubocop
25
+ run: bundle exec rubocop --format progress
26
+ build:
27
+ needs: [linting]
28
+ runs-on: ubuntu-latest
29
+ strategy:
30
+ matrix:
31
+ ruby: [2.5, 2.6, 2.7]
32
+
33
+ steps:
34
+ - uses: actions/checkout@v2
35
+ - uses: ruby/setup-ruby@v1
36
+ with:
37
+ ruby-version: ${{ matrix.ruby }}
38
+ bundler-cache: true
39
+ - name: Install dependencies
40
+ run: bundle install
41
+ - name: Run tests
42
+ run: bundle exec rake
@@ -0,0 +1,29 @@
1
+ name: Publish
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+
7
+ jobs:
8
+ build:
9
+ name: Publish to Rubygems
10
+ runs-on: ubuntu-latest
11
+
12
+ steps:
13
+ - uses: actions/checkout@v2
14
+
15
+ - name: Set up Ruby 2.7
16
+ uses: ruby/setup-ruby@v1
17
+ with:
18
+ ruby-version: 2.7
19
+
20
+ - name: Publish to RubyGems
21
+ run: |
22
+ mkdir -p $HOME/.gem
23
+ touch $HOME/.gem/credentials
24
+ chmod 0600 $HOME/.gem/credentials
25
+ printf -- "---\n:rubygems_api_key: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
26
+ gem build sidekiq-logstash.gemspec
27
+ gem push sidekiq-logstash-*.gem
28
+ env:
29
+ GEM_HOST_API_KEY: ${{ secrets.RUBYGEMS_AUTH_TOKEN }}
data/.rubocop.yml ADDED
@@ -0,0 +1,22 @@
1
+ inherit_from: .rubocop_todo.yml
2
+
3
+ require:
4
+ - rubocop-performance
5
+
6
+ AllCops:
7
+ DisplayCopNames: true
8
+ DisplayStyleGuide: true
9
+ TargetRubyVersion: 2.3
10
+
11
+ Metrics/BlockLength:
12
+ Exclude:
13
+ - spec/**/*.rb
14
+
15
+ Metrics/LineLength:
16
+ Max: 120
17
+ Exclude:
18
+ - spec/**/*.rb
19
+
20
+ Style/Documentation:
21
+ Exclude:
22
+ - 'spec/**/*'
data/.rubocop_todo.yml ADDED
@@ -0,0 +1,41 @@
1
+ # This configuration was generated by
2
+ # `rubocop --auto-gen-config`
3
+ # on 2019-04-20 13:23:53 +0200 using RuboCop version 0.67.2.
4
+ # The point is for the user to remove these configuration records
5
+ # one by one as the offenses are removed from the code base.
6
+ # Note that changes in the inspected code, or installation of new
7
+ # versions of RuboCop, may require this file to be generated again.
8
+
9
+ # Offense count: 1
10
+ Lint/DuplicateMethods:
11
+ Exclude:
12
+ - 'lib/sidekiq/logstash/configuration.rb'
13
+
14
+ # Offense count: 4
15
+ Metrics/AbcSize:
16
+ Max: 31
17
+
18
+ # Offense count: 1
19
+ Metrics/CyclomaticComplexity:
20
+ Max: 13
21
+
22
+ # Offense count: 6
23
+ # Configuration parameters: CountComments, ExcludedMethods.
24
+ Metrics/MethodLength:
25
+ Max: 28
26
+
27
+ # Offense count: 1
28
+ Metrics/PerceivedComplexity:
29
+ Max: 14
30
+
31
+ # Offense count: 7
32
+ Style/Documentation:
33
+ Exclude:
34
+ - 'spec/**/*'
35
+ - 'lib/sidekiq/logging/argument_filter.rb'
36
+ - 'lib/sidekiq/logging/logstash_formatter.rb'
37
+ - 'lib/sidekiq/logging/shared.rb'
38
+ - 'lib/sidekiq/logstash.rb'
39
+ - 'lib/sidekiq/logstash/configuration.rb'
40
+ - 'lib/sidekiq/logstash_job_logger.rb'
41
+ - 'lib/sidekiq/middleware/server/logstash_logging.rb'
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.3.0
1
+ 2.6.6
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  # Specify your gem's dependencies in sidekiq-logstash.gemspec
data/README.md CHANGED
@@ -68,6 +68,11 @@ Sidekiq::Logstash.configure do |config|
68
68
  # it works just like rails params filtering (http://guides.rubyonrails.org/action_controller_overview.html#parameters-filtering)
69
69
  config.filter_args << 'foo'
70
70
 
71
+ # by default, the "job started" logs are omitted from the logs
72
+ # to have one-line logs for each log (following Lograge), but you can
73
+ # enable job start logs by setting the following flag:
74
+ config.job_start_log = true
75
+
71
76
  # custom_option is a Proc that will be called before logging the payload, allowing you to add fields to it
72
77
  config.custom_options = lambda do |payload|
73
78
  payload['my_custom_field'] = 'my_custom_value'
data/Rakefile CHANGED
@@ -1,6 +1,8 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/gem_tasks'
4
+ require 'rspec/core/rake_task'
3
5
 
4
6
  RSpec::Core::RakeTask.new(:spec)
5
7
 
6
- task :default => :spec
8
+ task default: :spec
data/bin/console CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  require 'bundler/setup'
4
5
  require 'sidekiq/logstash'
data/bin/test_console CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  require 'bundler/setup'
4
5
  require 'sidekiq/logstash'
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ gem 'sidekiq', '~> 3.0'
6
+
7
+ gemspec path: '../'
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  gem 'sidekiq', '~> 4.0'
4
6
 
5
- gemspec path: '../'
7
+ gemspec path: '../'
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  gem 'sidekiq', '~> 5.0'
4
6
 
5
- gemspec path: '../'
7
+ gemspec path: '../'
@@ -1,15 +1,20 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # This implementation is taken directly from https://github.com/rails/rails/blob/52ce6ece8c8f74064bb64e0a0b1ddd83092718e1/actionpack/lib/action_dispatch/http/parameter_filter.rb
2
4
  # Adding actionpack to the gem dependencies would have been too heavy, so here is just what we need.
3
-
4
5
  module Sidekiq
5
6
  module Logging
7
+ # Class that allows to filter-out sensible arguments.
6
8
  class ArgumentFilter
7
- FILTERED = '[FILTERED]'.freeze
9
+ # String used to replace sensible arguments.
10
+ FILTERED = '[FILTERED]'
8
11
 
9
12
  def initialize(filters = [])
10
13
  @filters = filters
11
14
  end
12
15
 
16
+ # Filters argument by using the filters provided upon initialization.
17
+ # @param args [Array] the list of arguments.
13
18
  def filter(args)
14
19
  compiled_filter.call(args)
15
20
  end
@@ -22,8 +27,11 @@ module Sidekiq
22
27
 
23
28
  class CompiledFilter # :nodoc:
24
29
  def self.compile(filters)
25
- return lambda { |args| args.dup } if filters.empty?
26
- strings, regexps, blocks = [], [], []
30
+ return ->(args) { args.dup } if filters.empty?
31
+
32
+ strings = []
33
+ regexps = []
34
+ blocks = []
27
35
  filters.each do |item|
28
36
  case item
29
37
  when Proc
@@ -34,10 +42,10 @@ module Sidekiq
34
42
  strings << Regexp.escape(item.to_s)
35
43
  end
36
44
  end
37
- deep_regexps, regexps = regexps.partition { |r| r.to_s.include?("\\.".freeze) }
38
- deep_strings, strings = strings.partition { |s| s.include?("\\.".freeze) }
39
- regexps << Regexp.new(strings.join('|'.freeze), true) unless strings.empty?
40
- deep_regexps << Regexp.new(deep_strings.join('|'.freeze), true) unless deep_strings.empty?
45
+ deep_regexps, regexps = regexps.partition { |r| r.to_s.include?('\\.') }
46
+ deep_strings, strings = strings.partition { |s| s.include?('\\.') }
47
+ regexps << Regexp.new(strings.join('|'), true) unless strings.empty?
48
+ deep_regexps << Regexp.new(deep_strings.join('|'), true) unless deep_strings.empty?
41
49
  new regexps, deep_regexps, blocks
42
50
  end
43
51
 
@@ -62,8 +70,16 @@ module Sidekiq
62
70
  elsif value.is_a?(Array)
63
71
  value = value.map { |v| v.is_a?(Hash) ? call(v, parents) : v }
64
72
  elsif blocks.any?
65
- key = key.dup rescue key
66
- value = value.dup rescue value
73
+ key = begin
74
+ key.dup
75
+ rescue StandardError
76
+ key
77
+ end
78
+ value = begin
79
+ value.dup
80
+ rescue StandardError
81
+ value
82
+ end
67
83
  blocks.each { |b| b.call(key, value) }
68
84
  end
69
85
  parents.pop if deep_regexps
@@ -74,4 +90,4 @@ module Sidekiq
74
90
  end
75
91
  end
76
92
  end
77
- end
93
+ end
@@ -1,25 +1,33 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'logstash-event'
2
4
 
3
5
  module Sidekiq
4
6
  module Logging
7
+ # Class that takes a log payload and format it to be Logstash-compatible.
5
8
  class LogstashFormatter
6
- def call(severity, time, progname, data)
9
+ def call(severity, _time, _progname, data)
10
+ json_data = { severity: severity }
11
+
7
12
  if data.is_a? Hash
8
- json_data = data
13
+ json_data.merge!(data)
9
14
  else
10
- json_data = {
11
- severity: severity,
12
- message: data
13
- }
15
+ json_data[:message] = data
14
16
  end
15
17
 
16
18
  # Merge custom_options to provide customization
17
- custom_options.call(json_data) if custom_options rescue nil
19
+ begin
20
+ custom_options&.call(json_data)
21
+ rescue StandardError
22
+ nil
23
+ end
18
24
  event = LogStash::Event.new(json_data)
19
25
 
20
26
  "#{event.to_json}\n"
21
27
  end
22
28
 
29
+ private
30
+
23
31
  def custom_options
24
32
  Sidekiq::Logstash.configuration.custom_options
25
33
  end
@@ -1,62 +1,140 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Sidekiq
2
4
  module Logging
5
+ # Shared module with all the logics used by job loggers.
3
6
  module Shared
4
- def log_job(payload, started_at, exc = nil)
7
+ ENCRYPTED = '[ENCRYPTED]'
8
+
9
+ def log_job(job)
10
+ started_at = Time.now.utc
11
+ log_start = log_job_start(job)
12
+ Sidekiq.logger.info log_start if log_start
13
+ yield if block_given?
14
+ Sidekiq.logger.info log_job_exec(job, started_at)
15
+ rescue StandardError => e
16
+ begin
17
+ Sidekiq.logger.warn log_job_exception(job, started_at, e)
18
+ rescue StandardError => ex
19
+ log_standard_error(job, e, ex)
20
+ end
21
+ raise
22
+ end
23
+
24
+ def log_job_start(job)
25
+ return unless Sidekiq::Logstash.configuration.job_start_log
26
+ # Skips start logs for retrying jobs
27
+ return if job['failed_at']
28
+
29
+ payload = setup_payload(job)
30
+ payload['job_status'] = 'started'
31
+ payload['message'] += ': started'
32
+ process_payload(payload)
33
+ end
34
+
35
+ def log_job_exec(job, started_at)
36
+ payload = setup_payload(job)
37
+ payload['duration'] = elapsed(started_at)
38
+
39
+ payload['message'] += ": done: #{payload['duration']} sec"
40
+ payload['job_status'] = 'done'
41
+ payload['completed_at'] = Time.now.utc
42
+
43
+ process_payload(payload)
44
+ end
45
+
46
+ def log_job_exception(job, started_at, exc)
47
+ payload = setup_payload(job)
48
+ payload['duration'] = elapsed(started_at)
49
+
50
+ payload['message'] += ": fail: #{payload['duration']} sec"
51
+ payload['job_status'] = 'fail'
52
+ payload['error_message'] = exc.message
53
+ payload['error'] = exc.class
54
+ payload['error_backtrace'] = %('#{exc.backtrace.join("\n")}')
55
+
56
+ process_payload(payload)
57
+ end
58
+
59
+ private
60
+
61
+ def setup_payload(job)
5
62
  # Create a copy of the payload using JSON
6
63
  # This should always be possible since Sidekiq store it in Redis
7
- payload = JSON.parse(JSON.unparse(payload))
64
+ payload = JSON.parse(JSON.unparse(job))
8
65
 
9
66
  # Convert timestamps into Time instances
10
- %w( created_at enqueued_at retried_at failed_at completed_at ).each do |key|
67
+ %w[created_at enqueued_at retried_at failed_at completed_at].each do |key|
11
68
  payload[key] = parse_time(payload[key]) if payload[key]
12
69
  end
13
70
 
14
- # Add process id params
15
- payload['pid'] = ::Process.pid
16
- payload['duration'] = elapsed(started_at)
71
+ # Sets the initial message
72
+ payload['message'] = "#{payload['class']} JID-#{payload['jid']}"
17
73
 
18
- message = "#{payload['class']} JID-#{payload['jid']}"
74
+ # Add process id params
75
+ payload['pid'] = ::Process.pid
19
76
 
20
- if exc
21
- payload['message'] = "#{message}: fail: #{payload['duration']} sec"
22
- payload['job_status'] = 'fail'
23
- payload['error_message'] = exc.message
24
- payload['error'] = exc.class
25
- payload['error_backtrace'] = %('#{exc.backtrace.join("\n")}')
26
- else
27
- payload['message'] = "#{message}: done: #{payload['duration']} sec"
28
- payload['job_status'] = 'done'
29
- payload['completed_at'] = Time.now.utc
30
- end
77
+ payload
78
+ end
31
79
 
80
+ def process_payload(payload)
32
81
  # Filter sensitive parameters
33
82
  unless filter_args.empty?
34
- args_filter = Sidekiq::Logging::ArgumentFilter.new(filter_args)
35
- payload['args'] = args_filter.filter({ args: payload['args'] })[:args]
83
+ args_filter = Sidekiq::Logging::ArgumentFilter.new(filter_args)
84
+ payload['args'] = args_filter.filter(args: payload['args'])[:args]
36
85
  end
37
86
 
87
+ # If encrypt is true, the last arg is encrypted so hide it
88
+ payload['args'][-1] = ENCRYPTED if payload['encrypt']
89
+
38
90
  # Needs to map all args to strings for ElasticSearch compatibility
39
- payload['args'].map!(&:to_s)
91
+ deep_stringify!(payload['args'])
92
+
93
+ # Needs to map all unique_args to strings for ElasticSearch
94
+ # compatibility in case sidekiq-unique-jobs is used
95
+ deep_stringify!(payload['unique_args'])
96
+
97
+ if payload['retry'].is_a?(Integer)
98
+ payload['max_retries'] = payload['retry']
99
+ payload['retry'] = true
100
+ end
40
101
 
41
102
  payload
42
103
  end
43
104
 
105
+ def log_standard_error(job, job_exc, log_exc)
106
+ Sidekiq.logger.error 'Error logging the job execution!'
107
+ Sidekiq.logger.error "Job: #{job}"
108
+ Sidekiq.logger.error "Job Exception: #{job_exc}"
109
+ Sidekiq.logger.error "Log Exception: #{log_exc}"
110
+ end
111
+
44
112
  def elapsed(start)
45
113
  (Time.now.utc - start).round(3)
46
114
  end
47
115
 
48
116
  def parse_time(timestamp)
49
117
  return timestamp if timestamp.is_a? Time
50
- timestamp.is_a?(Float) ?
51
- Time.at(timestamp).utc :
52
- Time.parse(timestamp)
53
- rescue
118
+
119
+ timestamp.is_a?(Float) ? Time.at(timestamp).utc : Time.parse(timestamp)
120
+ rescue StandardError
54
121
  timestamp
55
122
  end
56
123
 
57
124
  def filter_args
58
125
  Sidekiq::Logstash.configuration.filter_args
59
126
  end
127
+
128
+ def deep_stringify!(args)
129
+ case args
130
+ when Hash
131
+ Hash[args.map { |key, value| [deep_stringify!(key), deep_stringify!(value)] }]
132
+ when Array
133
+ args.map! { |val| deep_stringify!(val) }
134
+ else
135
+ args.to_s
136
+ end
137
+ end
60
138
  end
61
139
  end
62
140
  end
@@ -1,11 +1,16 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'sidekiq/logstash/configuration'
2
4
  require 'sidekiq/logstash/version'
3
- require 'sidekiq/middleware/server/logstah_logging'
5
+ require 'sidekiq/middleware/server/logstash_logging'
4
6
  require 'sidekiq/logging/logstash_formatter'
5
7
  require 'sidekiq/logging/argument_filter'
6
8
  require 'sidekiq/logstash_job_logger'
7
9
 
8
10
  module Sidekiq
11
+ # Main level module for Sidekiq::Logstash.
12
+ # Provides integration between Sidekiq and Logstash by changing the way
13
+ # Sidekiq jobs are logged.
9
14
  module Logstash
10
15
  def self.configuration
11
16
  @configuration ||= Configuration.new
@@ -15,7 +20,7 @@ module Sidekiq
15
20
  yield(configuration)
16
21
  end
17
22
 
18
- def self.setup(opts = {})
23
+ def self.setup(_opts = {})
19
24
  # Calls Sidekiq.configure_server to inject logics
20
25
  Sidekiq.configure_server do |config|
21
26
  # Remove default Sidekiq error_handler that logs errors
@@ -1,17 +1,22 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Sidekiq
2
4
  module Logstash
5
+ # Class that allows to configure the gem behaviour.
3
6
  class Configuration
4
- attr_accessor :custom_options, :filter_args
7
+ attr_accessor :custom_options, :filter_args, :job_start_log
5
8
 
6
9
  def initialize
7
10
  @filter_args = []
11
+ @job_start_log = false
8
12
  end
9
13
 
10
14
  # Added to ensure custom_options is a Proc
11
15
  def custom_options=(proc)
12
16
  raise ArgumentError, 'Argument must be a Proc.' unless proc.is_a?(Proc)
17
+
13
18
  @custom_options = proc
14
19
  end
15
20
  end
16
21
  end
17
- end
22
+ end
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Sidekiq
2
4
  module Logstash
3
- VERSION = '0.3.0'
5
+ VERSION = '1.2.1'
4
6
  end
5
7
  end
@@ -1,23 +1,14 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'sidekiq/logging/shared'
2
4
 
3
5
  module Sidekiq
6
+ # Class used to replace Sidekiq 5 job logger.
4
7
  class LogstashJobLogger
5
8
  include Sidekiq::Logging::Shared
6
9
 
7
- def call(job, _queue)
8
- started_at = Time.now.utc
9
- yield
10
- Sidekiq.logger.info log_job(job, started_at)
11
- rescue => exc
12
- begin
13
- Sidekiq.logger.warn log_job(job, started_at, exc)
14
- rescue => ex
15
- Sidekiq.logger.error 'Error logging the job execution!'
16
- Sidekiq.logger.error "Job: #{job}"
17
- Sidekiq.logger.error "Job Exception: #{exc}"
18
- Sidekiq.logger.error "Log Exception: #{ex}"
19
- end
20
- raise
10
+ def call(job, _queue, &block)
11
+ log_job(job, &block)
21
12
  end
22
13
  end
23
- end
14
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'sidekiq/logging/shared'
4
+
5
+ module Sidekiq
6
+ module Middleware
7
+ module Server
8
+ # Class used to replace Sidekiq 4 job logger.
9
+ class LogstashLogging
10
+ include Sidekiq::Logging::Shared
11
+
12
+ def call(_, job, _, &block)
13
+ log_job(job, &block)
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -1,31 +1,35 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('lib', __dir__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require 'sidekiq/logstash/version'
5
6
 
6
7
  Gem::Specification.new do |spec|
7
- spec.name = 'sidekiq-logstash'
8
- spec.version = Sidekiq::Logstash::VERSION
9
- spec.authors = ['Mattia Giuffrida']
10
- spec.email = ['giuffrida.mattia@gmail.com']
8
+ spec.name = 'sidekiq-logstash'
9
+ spec.version = Sidekiq::Logstash::VERSION
10
+ spec.authors = ['Mattia Giuffrida']
11
+ spec.email = ['giuffrida.mattia@gmail.com']
11
12
 
12
- spec.summary = %q{Logstash plugin for Sidekiq}
13
- spec.description = <<-DESC
14
- Sidekiq::Logstash turns your Sidekiq log into an organised, aggregated, JSON-syntax log ready to be sent to a logstash server.
15
- DESC
16
- spec.homepage = 'https://github.com/iMacTia/sidekiq-logstash'
17
- spec.license = 'MIT'
13
+ spec.summary = 'Logstash plugin for Sidekiq'
14
+ spec.description = <<~DESC
15
+ Sidekiq::Logstash turns your Sidekiq log into an organised, aggregated, JSON-syntax log ready to be sent to a logstash server.
16
+ DESC
17
+ spec.homepage = 'https://github.com/iMacTia/sidekiq-logstash'
18
+ spec.license = 'MIT'
18
19
 
19
- spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
20
- spec.bindir = 'exe'
21
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
21
+ spec.bindir = 'exe'
22
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
23
  spec.require_paths = ['lib']
23
24
 
24
25
  spec.add_dependency 'logstash-event', '~> 1.2'
25
- spec.add_runtime_dependency 'sidekiq', '>= 4.0' , '<6'
26
+ spec.add_runtime_dependency 'sidekiq', '>= 3.0', '<6'
27
+ spec.required_ruby_version = '>= 2.3.0'
26
28
 
27
- spec.add_development_dependency 'bundler', '~> 1.11'
29
+ spec.add_development_dependency 'factory_girl', '~> 4.0'
28
30
  spec.add_development_dependency 'rake', '~> 10.0'
29
31
  spec.add_development_dependency 'rspec', '~> 3.0'
30
- spec.add_development_dependency 'factory_girl', '~> 4.0'
32
+ spec.add_development_dependency 'rspec-json_expectations', '~> 2.1.0'
33
+ spec.add_development_dependency 'rubocop', '~> 0.67.2'
34
+ spec.add_development_dependency 'rubocop-performance'
31
35
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sidekiq-logstash
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 1.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mattia Giuffrida
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-07-12 00:00:00.000000000 Z
11
+ date: 2021-06-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: logstash-event
@@ -30,7 +30,7 @@ dependencies:
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '4.0'
33
+ version: '3.0'
34
34
  - - "<"
35
35
  - !ruby/object:Gem::Version
36
36
  version: '6'
@@ -40,24 +40,24 @@ dependencies:
40
40
  requirements:
41
41
  - - ">="
42
42
  - !ruby/object:Gem::Version
43
- version: '4.0'
43
+ version: '3.0'
44
44
  - - "<"
45
45
  - !ruby/object:Gem::Version
46
46
  version: '6'
47
47
  - !ruby/object:Gem::Dependency
48
- name: bundler
48
+ name: factory_girl
49
49
  requirement: !ruby/object:Gem::Requirement
50
50
  requirements:
51
51
  - - "~>"
52
52
  - !ruby/object:Gem::Version
53
- version: '1.11'
53
+ version: '4.0'
54
54
  type: :development
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  requirements:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
- version: '1.11'
60
+ version: '4.0'
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: rake
63
63
  requirement: !ruby/object:Gem::Requirement
@@ -87,40 +87,72 @@ dependencies:
87
87
  - !ruby/object:Gem::Version
88
88
  version: '3.0'
89
89
  - !ruby/object:Gem::Dependency
90
- name: factory_girl
90
+ name: rspec-json_expectations
91
91
  requirement: !ruby/object:Gem::Requirement
92
92
  requirements:
93
93
  - - "~>"
94
94
  - !ruby/object:Gem::Version
95
- version: '4.0'
95
+ version: 2.1.0
96
96
  type: :development
97
97
  prerelease: false
98
98
  version_requirements: !ruby/object:Gem::Requirement
99
99
  requirements:
100
100
  - - "~>"
101
101
  - !ruby/object:Gem::Version
102
- version: '4.0'
102
+ version: 2.1.0
103
+ - !ruby/object:Gem::Dependency
104
+ name: rubocop
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: 0.67.2
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: 0.67.2
117
+ - !ruby/object:Gem::Dependency
118
+ name: rubocop-performance
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ type: :development
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: '0'
103
131
  description: 'Sidekiq::Logstash turns your Sidekiq log into an organised, aggregated,
104
132
  JSON-syntax log ready to be sent to a logstash server.
105
133
 
106
- '
134
+ '
107
135
  email:
108
136
  - giuffrida.mattia@gmail.com
109
137
  executables: []
110
138
  extensions: []
111
139
  extra_rdoc_files: []
112
140
  files:
141
+ - ".github/workflows/ci.yaml"
142
+ - ".github/workflows/publish.yml"
113
143
  - ".gitignore"
114
144
  - ".rspec"
145
+ - ".rubocop.yml"
146
+ - ".rubocop_todo.yml"
115
147
  - ".ruby-gemset"
116
148
  - ".ruby-version"
117
- - ".travis.yml"
118
149
  - Gemfile
119
150
  - README.md
120
151
  - Rakefile
121
152
  - bin/console
122
153
  - bin/setup
123
154
  - bin/test_console
155
+ - gemfiles/sidekiq3.gemfile
124
156
  - gemfiles/sidekiq4.gemfile
125
157
  - gemfiles/sidekiq5.gemfile
126
158
  - lib/sidekiq/logging/argument_filter.rb
@@ -130,7 +162,7 @@ files:
130
162
  - lib/sidekiq/logstash/configuration.rb
131
163
  - lib/sidekiq/logstash/version.rb
132
164
  - lib/sidekiq/logstash_job_logger.rb
133
- - lib/sidekiq/middleware/server/logstah_logging.rb
165
+ - lib/sidekiq/middleware/server/logstash_logging.rb
134
166
  - sidekiq-logstash.gemspec
135
167
  homepage: https://github.com/iMacTia/sidekiq-logstash
136
168
  licenses:
@@ -144,15 +176,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
144
176
  requirements:
145
177
  - - ">="
146
178
  - !ruby/object:Gem::Version
147
- version: '0'
179
+ version: 2.3.0
148
180
  required_rubygems_version: !ruby/object:Gem::Requirement
149
181
  requirements:
150
182
  - - ">="
151
183
  - !ruby/object:Gem::Version
152
184
  version: '0'
153
185
  requirements: []
154
- rubyforge_project:
155
- rubygems_version: 2.6.12
186
+ rubygems_version: 3.1.6
156
187
  signing_key:
157
188
  specification_version: 4
158
189
  summary: Logstash plugin for Sidekiq
data/.travis.yml DELETED
@@ -1,10 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.2.2
4
- - 2.3.0
5
- - 2.4.0
6
- before_install: gem install bundler -v 1.11.2
7
-
8
- gemfile:
9
- - gemfiles/sidekiq4.gemfile
10
- - gemfiles/sidekiq5.gemfile
@@ -1,27 +0,0 @@
1
- require 'sidekiq/logging/shared'
2
-
3
- module Sidekiq
4
- module Middleware
5
- module Server
6
- class LogstashLogging
7
- include Sidekiq::Logging::Shared
8
-
9
- def call(_, job, _)
10
- started_at = Time.now.utc
11
- yield
12
- Sidekiq.logger.info log_job(job, started_at)
13
- rescue => exc
14
- begin
15
- Sidekiq.logger.warn log_job(job, started_at, exc)
16
- rescue => ex
17
- Sidekiq.logger.error 'Error logging the job execution!'
18
- Sidekiq.logger.error "Job: #{job}"
19
- Sidekiq.logger.error "Job Exception: #{exc}"
20
- Sidekiq.logger.error "Log Exception: #{ex}"
21
- end
22
- raise
23
- end
24
- end
25
- end
26
- end
27
- end