-
Notifications
You must be signed in to change notification settings - Fork 0
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
Changes from 2 commits
3f61386
d0bc6ed
014f1b0
ed404b5
8b20c9e
2d4e506
f1a192e
20e5c7f
35264bc
617268a
d57952d
2d31831
8096821
e348920
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
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 |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,88 @@ | ||
PATH | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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 There was a problem hiding this comment. Choose a reason for hiding this commentThe 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 |
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. | ||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. AI or own copywriting? ;P There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I wanted this to be pro so AI 🤖 |
||
## Installation | ||
|
||
|
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 |
This file was deleted.
This file was deleted.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
# frozen_string_literal: true | ||
|
||
require_relative "../lib/remedy/version" | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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 |
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" | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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'" | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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" | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. put github repo URL here |
||
spec.metadata["changelog_uri"] = "https://example.com" | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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. | ||
|
This file was deleted.
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 |
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' | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. it should be at most required |
||
|
||
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! | ||
|
There was a problem hiding this comment.
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