Skip to content

Commit 9c4f320

Browse files
committed
Adapter-Specific Enhancements
1 parent 53d33a7 commit 9c4f320

File tree

3 files changed

+84
-0
lines changed

3 files changed

+84
-0
lines changed
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
module RailsPulse
2+
module Adapters
3+
class DelayedJobPlugin < Delayed::Plugin
4+
callbacks do |lifecycle|
5+
lifecycle.around(:perform) do |worker, job_data, &block|
6+
next block.call(worker, job_data) unless RailsPulse.configuration.enabled
7+
next block.call(worker, job_data) unless RailsPulse.configuration.track_jobs
8+
9+
job_wrapper = JobWrapper.new(
10+
job_id: job_data.id.to_s,
11+
class_name: job_data.payload_object.class.name,
12+
queue_name: job_data.queue,
13+
arguments: job_data.payload_object.args,
14+
enqueued_at: job_data.created_at,
15+
executions: job_data.attempts
16+
)
17+
18+
RailsPulse::JobRunCollector.track(job_wrapper, adapter: "delayed_job") do
19+
block.call(worker, job_data)
20+
end
21+
end
22+
end
23+
end
24+
end
25+
end
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
module RailsPulse
2+
module Adapters
3+
class SidekiqMiddleware
4+
def call(worker, job_data, queue)
5+
return yield unless RailsPulse.configuration.enabled
6+
return yield unless RailsPulse.configuration.track_jobs
7+
8+
# Create ActiveJob-like wrapper for tracking
9+
job_wrapper = JobWrapper.new(
10+
job_id: job_data["jid"],
11+
class_name: worker.class.name,
12+
queue_name: queue,
13+
arguments: job_data["args"],
14+
enqueued_at: Time.at(job_data["enqueued_at"] || Time.current.to_f),
15+
executions: job_data["retry_count"] || 0
16+
)
17+
18+
RailsPulse::JobRunCollector.track(job_wrapper, adapter: "sidekiq") do
19+
yield
20+
end
21+
end
22+
end
23+
24+
class JobWrapper
25+
attr_reader :job_id, :queue_name, :arguments, :enqueued_at, :executions
26+
27+
def initialize(job_id:, class_name:, queue_name:, arguments:, enqueued_at:, executions:)
28+
@job_id = job_id
29+
@class_name = class_name
30+
@queue_name = queue_name
31+
@arguments = arguments
32+
@enqueued_at = enqueued_at
33+
@executions = executions
34+
end
35+
36+
def class
37+
OpenStruct.new(name: @class_name)
38+
end
39+
end
40+
end
41+
end

lib/rails_pulse/engine.rb

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,24 @@ class Engine < ::Rails::Engine
6262
end
6363
end
6464

65+
initializer "rails_pulse.configure_sidekiq", after: "rails_pulse.active_job" do
66+
if defined?(Sidekiq) && RailsPulse.configuration.job_adapters.dig(:sidekiq, :enabled)
67+
require "rails_pulse/adapters/sidekiq_middleware"
68+
Sidekiq.configure_server do |config|
69+
config.server_middleware do |chain|
70+
chain.add RailsPulse::Adapters::SidekiqMiddleware
71+
end
72+
end
73+
end
74+
end
75+
76+
initializer "rails_pulse.configure_delayed_job", after: "rails_pulse.active_job" do
77+
if defined?(Delayed::Job) && RailsPulse.configuration.job_adapters.dig(:delayed_job, :enabled)
78+
require "rails_pulse/adapters/delayed_job_plugin"
79+
Delayed::Worker.plugins << RailsPulse::Adapters::DelayedJobPlugin
80+
end
81+
end
82+
6583
initializer "rails_pulse.database_configuration", before: "active_record.initialize_timezone" do
6684
# Ensure database configuration is applied early in the initialization process
6785
# This allows models to properly connect to configured databases

0 commit comments

Comments
 (0)