Skip to content

Commit

Permalink
remedy logic, gemfile, gemspec, CI
Browse files Browse the repository at this point in the history
  • Loading branch information
Robgra13 committed Oct 9, 2024
1 parent 5279830 commit 3f61386
Show file tree
Hide file tree
Showing 12 changed files with 203 additions and 51 deletions.
37 changes: 37 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
name: CI
on: [pull_request, push]
jobs:
rubocop:
strategy:
fail-fast: true
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: ruby/setup-ruby@v1
with:
ruby-version: 3.1
bundler-cache: true
- run: bundle exec rubocop
rspec:
strategy:
fail-fast: false
matrix:
ruby: ['3.1', '3.2', '3.3']
runs-on: ubuntu-latest
services:
redis:
image: redis
ports:
- 6379:6379
options: >-
--health-cmd "redis-cli ping"
--health-interval 10s
--health-timeout 5s
--health-retries 5
steps:
- uses: actions/checkout@v2
- uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ matrix.ruby }}
bundler-cache: true
- run: bundle exec rake
7 changes: 6 additions & 1 deletion Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,10 @@ source "https://rubygems.org"
gemspec

gem "rake", "~> 13.0"

gem "rspec", "~> 3.0"
gem 'rubocop', '~> 1.40', require: false
gem "rubocop-performance"
gem "rubocop-rake"
gem "rubocop-rspec"
gem 'sidekiq'
gem 'sentry-ruby'
87 changes: 87 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
PATH
remote: .
specs:
sidekiq-poison-pill-remedy (0.1.0)

GEM
remote: https://rubygems.org/
specs:
ast (2.4.2)
bigdecimal (3.1.8)
concurrent-ruby (1.3.4)
connection_pool (2.4.1)
diff-lcs (1.5.1)
json (2.7.2)
language_server-protocol (3.17.0.3)
logger (1.6.1)
parallel (1.26.3)
parser (3.3.5.0)
ast (~> 2.4.1)
racc
racc (1.8.1)
rack (3.1.7)
rainbow (3.1.1)
rake (13.2.1)
redis-client (0.22.2)
connection_pool
regexp_parser (2.9.2)
rspec (3.13.0)
rspec-core (~> 3.13.0)
rspec-expectations (~> 3.13.0)
rspec-mocks (~> 3.13.0)
rspec-core (3.13.1)
rspec-support (~> 3.13.0)
rspec-expectations (3.13.3)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.13.0)
rspec-mocks (3.13.2)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.13.0)
rspec-support (3.13.1)
rubocop (1.66.1)
json (~> 2.3)
language_server-protocol (>= 3.17.0)
parallel (~> 1.10)
parser (>= 3.3.0.2)
rainbow (>= 2.2.2, < 4.0)
regexp_parser (>= 2.4, < 3.0)
rubocop-ast (>= 1.32.2, < 2.0)
ruby-progressbar (~> 1.7)
unicode-display_width (>= 2.4.0, < 3.0)
rubocop-ast (1.32.3)
parser (>= 3.3.1.0)
rubocop-performance (1.22.1)
rubocop (>= 1.48.1, < 2.0)
rubocop-ast (>= 1.31.1, < 2.0)
rubocop-rake (0.6.0)
rubocop (~> 1.0)
rubocop-rspec (3.1.0)
rubocop (~> 1.61)
ruby-progressbar (1.13.0)
sentry-ruby (5.21.0)
bigdecimal
concurrent-ruby (~> 1.0, >= 1.0.2)
sidekiq (7.3.2)
concurrent-ruby (< 2)
connection_pool (>= 2.3.0)
logger
rack (>= 2.2.4)
redis-client (>= 0.22.2)
unicode-display_width (2.6.0)

PLATFORMS
arm64-darwin-22

DEPENDENCIES
rake (~> 13.0)
rspec (~> 3.0)
rubocop (~> 1.40)
rubocop-performance
rubocop-rake
rubocop-rspec
sentry-ruby
sidekiq
sidekiq-poison-pill-remedy!

BUNDLED WITH
2.4.18
6 changes: 2 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
# Sidekiq::Poison::Pill::Remedy
# SidekiqPoisonPillRemedy

TODO: Delete this and the text below, and describe your gem

Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/sidekiq/poison/pill/remedy`. To experiment with that code, run `bin/console` for an interactive prompt.
The Sidekiq Poison Pill Remedy gem enhances Sidekiq's job processing by automatically handling and rescheduling failed jobs (poison pills) with integrated logging and error tracking through Sentry, ultimately improving reliability and performance optimization.

## Installation

Expand Down
7 changes: 7 additions & 0 deletions lib/remedy/version.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# frozen_string_literal: true

module SidekiqPoisonPillRemedy
module Version
end
VERSION = '0.1.0'
end
14 changes: 0 additions & 14 deletions lib/sidekiq/poison/pill/remedy.rb

This file was deleted.

11 changes: 0 additions & 11 deletions lib/sidekiq/poison/pill/remedy/version.rb

This file was deleted.

41 changes: 41 additions & 0 deletions lib/sidekiq_poison_pill_remedy.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# frozen_string_literal: true

require_relative "../lib/remedy/version"

module SidekiqPoisonPillRemedy
def self.remedy
Proc.new do |_jobstr, pill|
next unless pill

job = Sidekiq::DeadSet.new.find_job(pill.jid)

if job.queue == "poison_pill"
capture_sentry_message(
"#{job.klass} failed in the `#{job.queue}`, this means that it has to be urgently optimized on memory usage",
level: :critical,
job_item: job.item
)
else
capture_sentry_message(
"#{job.klass} was marked as `poison pill`, please create the job memory optimizations ticket timely",
level: :warning,
job_item: job.item
)
job.klass.constantize.set(queue: :poison_pill).perform_async(*job.args)
job.delete
end
end
end

def self.capture_sentry_message(message, level:, job_item:)
if defined?(Sentry)
Sentry.capture_message(
message,
level: level,
extra: { job_item: job_item }
)
end

Sidekiq.logger.fatal(message)
end
end
16 changes: 8 additions & 8 deletions sidekiq-poison-pill-remedy.gemspec
Original file line number Diff line number Diff line change
@@ -1,24 +1,24 @@
# frozen_string_literal: true

require_relative "lib/sidekiq/poison/pill/remedy/version"
require_relative "lib/remedy/version"

Gem::Specification.new do |spec|
spec.name = "sidekiq-poison-pill-remedy"
spec.version = Sidekiq::Poison::Pill::Remedy::VERSION
spec.version = SidekiqPoisonPillRemedy::VERSION
spec.authors = ["Karol Galanciak"]
spec.email = ["[email protected]"]

spec.summary = "TODO: Write a short summary, because RubyGems requires one."
spec.description = "TODO: Write a longer description or delete this line."
spec.homepage = "TODO: Put your gem's website or public repo URL here."
spec.summary = "Enhances Sidekiq's job processing by automatically handling and rescheduling failed jobs (poison pills)"
spec.description = "Enhances Sidekiq's job processing by automatically handling and rescheduling failed jobs (poison pills)"
spec.homepage = "https://example.com"
spec.license = "MIT"
spec.required_ruby_version = ">= 3.0.0"

spec.metadata["allowed_push_host"] = "TODO: Set to your gem server 'https://example.com'"
# spec.metadata["allowed_push_host"] = "TODO: Set to your gem server 'https://example.com'"

spec.metadata["homepage_uri"] = spec.homepage
spec.metadata["source_code_uri"] = "TODO: Put your gem's public repo URL here."
spec.metadata["changelog_uri"] = "TODO: Put your gem's CHANGELOG.md URL here."
spec.metadata["source_code_uri"] = "https://example.com"
spec.metadata["changelog_uri"] = "https://example.com"

# Specify which files should be added to the gem when it is released.
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
Expand Down
11 changes: 0 additions & 11 deletions spec/sidekiq/poison/pill/remedy_spec.rb

This file was deleted.

13 changes: 13 additions & 0 deletions spec/sidekiq_poison_pill_remedy_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# frozen_string_literal: true

require_relative '../lib/sidekiq_poison_pill_remedy'

RSpec.describe SidekiqPoisonPillRemedy do
it 'has a version number' do
expect(SidekiqPoisonPillRemedy::VERSION).not_to be nil
end

it 'does something useful' do
expect(false).to eq(true)
end
end
4 changes: 2 additions & 2 deletions spec/spec_helper.rb
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
# frozen_string_literal: true

require "sidekiq/poison/pill/remedy"
require_relative '../lib/sidekiq_poison_pill_remedy'

RSpec.configure do |config|
# Enable flags like --only-failures and --next-failure
config.example_status_persistence_file_path = ".rspec_status"
config.example_status_persistence_file_path = '.rspec_status'

# Disable RSpec exposing methods globally on `Module` and `main`
config.disable_monkey_patching!
Expand Down

0 comments on commit 3f61386

Please sign in to comment.