sidekiq-logstash 0.3.0 → 1.2.1

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 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