Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

remedy logic, gemfile, gemspec, CI #1

Merged
merged 14 commits into from
Oct 29, 2024
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'
Copy link
Member

@Azdaroth Azdaroth Oct 10, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sidekiq should ideally be a an actual dependency in the gemspec, Gemfile is fo development dependencies

gem 'sentry-ruby'
88 changes: 88 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
PATH
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Gemfile.lock for gems should be in .gitignore, odd that it was not there from the beginning

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Robgra13 looks like you haven't deleted it

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

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.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AI or own copywriting? ;P

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wanted this to be pro so AI 🤖

## 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"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

do we need it here?


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"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

put github repo URL here

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'"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

to be removed


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"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

put github repo URL here

spec.metadata["changelog_uri"] = "https://example.com"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

put github repo URL here, leading to Changelog, should be created by default


# 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'
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it should be at most required sidekiq-poison-pill-remedy, require_relative is rarely ever needed for basic things in gems


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
Loading