Unable to initialise redis url's for sidekiq

18 views Asked by At

I have created a class where I send Redis url as parameter and operate on it using Sidekiq inbuiltg methods, when I run code manually using rake command it works properly but when I try to do same using whenever scheduler it is throwing below error:-

Redis::CannotConnectError: Error connecting to Redis on 127.0.0.1:6379 (Errno::ECONNREFUSED)
/iot/app/services/sidekiq_metric.rb:48:in `map'
/iot/app/services/sidekiq_metric.rb:48:in `long_product_jobs'
/iot/lib/tasks/monitor_custom_jobs.rake:32:in `block (3 levels) in <main>'
/iot/lib/tasks/monitor_custom_jobs.rake:29:in `each'
/iot/lib/tasks/monitor_custom_jobs.rake:29:in `block (2 levels) in <main>'
/usr/local/rvm/rubies/ruby-3.1.2/bin/bundle:25:in `load'
/usr/local/rvm/rubies/ruby-3.1.2/bin/bundle:25:in `<main>'

Caused by:
Errno::ECONNREFUSED: Connection refused - connect(2) for 127.0.0.1:6379
/iot/app/services/sidekiq_metric.rb:48:in `map'
/iot/app/services/sidekiq_metric.rb:48:in `long_product_jobs'
/iot/lib/tasks/monitor_custom_jobs.rake:32:in `block (3 levels) in <main>'
/iot/lib/tasks/monitor_custom_jobs.rake:29:in `each'
/iot/lib/tasks/monitor_custom_jobs.rake:29:in `block (2 levels) in <main>'
/usr/local/rvm/rubies/ruby-3.1.2/bin/bundle:25:in `load'
/usr/local/rvm/rubies/ruby-3.1.2/bin/bundle:25:in `<main>'

Caused by:
IO::EINPROGRESSWaitWritable: Operation now in progress - connect(2) would block
/iot/app/services/sidekiq_metric.rb:48:in `map'
/iot/app/services/sidekiq_metric.rb:48:in `long_product_jobs'
/iot/lib/tasks/monitor_custom_jobs.rake:32:in `block (3 levels) in <main>'
/iot/lib/tasks/monitor_custom_jobs.rake:29:in `each'
/iot/lib/tasks/monitor_custom_jobs.rake:29:in `block (2 levels) in <main>'
/usr/local/rvm/rubies/ruby-3.1.2/bin/bundle:25:in `load'
/usr/local/rvm/rubies/ruby-3.1.2/bin/bundle:25:in `<main>'
Tasks: TOP => monitor_custom_jobs:long_running_jobs
(See full trace by running task with --trace)

code snippet:-

sidekiq_metric.rb:-

require 'sidekiq/api'
require 'date'
class SidekiqMetric
    # Connect to your Sidekiq instance
    def initialize(url, app_name)
      @url = url
      @app = name
      configure_sidekiq
    end

    def configure_sidekiq
      Sidekiq.configure_client do |config|
        config.redis = { url: @url }
      end
    end

    def failed_count
      latest_count = Sidekiq::Stats.new.failed
    end
end

rake task file:-

namespace :monitor_custom_jobs do
  desc 'failed sidekiq jobs'
  task failed_count: :environment do
    report = []
    URLS.each do |url|
      redis_url =  ENV.fetch("REDIS_#{url}")
      sidekiq_service = SidekiqMetric.new(redis_url, "app_name_#{rand(0..3)}")
      puts sidekiq_service.failed_count
    end
  end
 end
end

schedule.rb:-

every 1.minutes do
  rake 'monitor_custom_jobs:failed_count' 
end
0

There are 0 answers