Module: Sidekiq::Status

Extended by:
Storage
Defined in:
lib/sidekiq-status/version.rb,
lib/sidekiq-status/testing/inline.rb,
lib/sidekiq-status/client_middleware.rb,
lib/sidekiq-status/server_middleware.rb,
lib/sidekiq-status/helpers.rb,
lib/sidekiq-status/web.rb,
lib/sidekiq-status.rb

Defined Under Namespace

Modules: Storage, Web, Worker Classes: ClientMiddleware, RedisAdapter, RedisClientAdapter, ServerMiddleware

Constant Summary collapse

VERSION =
'4.0.0'
DEFAULT_EXPIRY =
60 * 30
STATUS =
[ :queued, :working, :retrying, :complete, :stopped, :failed, :interrupted ].freeze

Constants included from Storage

Storage::BATCH_LIMIT, Storage::RESERVED_FIELDS

Class Method Summary collapse

Class Method Details

.at(job_id) ⇒ Object

Methods for retrieving job completion



58
59
60
# File 'lib/sidekiq-status.rb', line 58

def at(job_id)
  get(job_id, :at).to_i
end

.cancel(job_id, job_unix_time = nil) ⇒ Object Also known as: unschedule



37
38
39
# File 'lib/sidekiq-status.rb', line 37

def cancel(job_id, job_unix_time = nil)
  delete_and_unschedule(job_id, job_unix_time)
end

.configure_client_middleware(sidekiq_config, client_middleware_options = {}) ⇒ Object

Helper method to easily configure sidekiq-status client middleware whatever the Sidekiq version is.

Parameters:

  • sidekiq_config (Sidekiq::Config)

    the Sidekiq config

  • client_middleware_options (Hash) (defaults to: {})

    client middleware initialization options

Options Hash (client_middleware_options):

  • :expiration (Fixnum)

    ttl for complete jobs



64
65
66
67
68
# File 'lib/sidekiq-status/client_middleware.rb', line 64

def self.configure_client_middleware(sidekiq_config, client_middleware_options = {})
  sidekiq_config.client_middleware do |chain|
    chain.add Sidekiq::Status::ClientMiddleware, client_middleware_options
  end
end

.configure_server_middleware(sidekiq_config, server_middleware_options = {}) ⇒ Object

Helper method to easily configure sidekiq-status server middleware whatever the Sidekiq version is.

Parameters:

  • sidekiq_config (Sidekiq::Config)

    the Sidekiq config

  • server_middleware_options (Hash) (defaults to: {})

    server middleware initialization options

Options Hash (server_middleware_options):

  • :expiration (Fixnum)

    ttl for complete jobs



85
86
87
88
89
# File 'lib/sidekiq-status/server_middleware.rb', line 85

def self.configure_server_middleware(sidekiq_config, server_middleware_options = {})
  sidekiq_config.server_middleware do |chain|
    chain.add Sidekiq::Status::ServerMiddleware, server_middleware_options
  end
end

.delete(job_id) ⇒ Object



41
42
43
# File 'lib/sidekiq-status.rb', line 41

def delete(job_id)
  delete_status(job_id)
end

.ended_at(job_id) ⇒ Object



83
84
85
# File 'lib/sidekiq-status.rb', line 83

def ended_at(job_id)
  get(job_id, :ended_at)&.to_i
end

.enqueued_at(job_id) ⇒ Object



70
71
72
# File 'lib/sidekiq-status.rb', line 70

def enqueued_at(job_id)
  get(job_id, :enqueued_at)&.to_i
end

.eta(job_id) ⇒ Object



87
88
89
90
91
92
93
94
95
# File 'lib/sidekiq-status.rb', line 87

def eta(job_id)
  at = at(job_id)
  return nil if at.zero?

  start_time = started_at(job_id) || enqueued_at(job_id) || updated_at(job_id)
  elapsed = Time.now.to_i - start_time if start_time
  return nil unless elapsed
  elapsed.to_f / at * (total(job_id) - at)
end

.get(job_id, field) ⇒ String

Job status by id

Parameters:

  • id (String)

    job id returned by async_perform

Returns:

  • (String)

    job status, possible values are in STATUS



21
22
23
# File 'lib/sidekiq-status.rb', line 21

def get(job_id, field)
  read_field_for_id(job_id, field)
end

.get_all(job_id) ⇒ Hash

Get all status fields for a job

Returns:

  • (Hash)

    hash of all fields stored for the job



28
29
30
# File 'lib/sidekiq-status.rb', line 28

def get_all(job_id)
  read_hash_for_id(job_id)
end

.message(job_id) ⇒ Object



97
98
99
# File 'lib/sidekiq-status.rb', line 97

def message(job_id)
  get(job_id, :message)
end

.pct_complete(job_id) ⇒ Object



66
67
68
# File 'lib/sidekiq-status.rb', line 66

def pct_complete(job_id)
  get(job_id, :pct_complete).to_i
end

.redis_adapterObject



109
110
111
# File 'lib/sidekiq-status.rb', line 109

def redis_adapter
  Sidekiq.redis { |conn| yield wrap_redis_connection(conn) }
end

.started_at(job_id) ⇒ Object



74
75
76
# File 'lib/sidekiq-status.rb', line 74

def started_at(job_id)
  get(job_id, :started_at)&.to_i
end

.status(job_id) ⇒ Object



4
5
6
# File 'lib/sidekiq-status/testing/inline.rb', line 4

def status(jid)
  :complete
end

.stop!(job_id) ⇒ Object



45
46
47
# File 'lib/sidekiq-status.rb', line 45

def stop!(job_id)
  store_for_id(job_id, {stop: 'true'})
end

.total(job_id) ⇒ Object



62
63
64
# File 'lib/sidekiq-status.rb', line 62

def total(job_id)
  get(job_id, :total).to_i
end

.updated_at(job_id) ⇒ Object



78
79
80
81
# File 'lib/sidekiq-status.rb', line 78

def updated_at(job_id)
  # sidekiq-status v3.x and earlier used :update_time
  get(job_id, :updated_at)&.to_i || get(job_id, :update_time)&.to_i
end

.wrap_redis_connection(conn) ⇒ Object



101
102
103
104
105
106
107
# File 'lib/sidekiq-status.rb', line 101

def wrap_redis_connection(conn)
  if Sidekiq.major_version >= 7
    conn.is_a?(RedisClientAdapter) ? conn : RedisClientAdapter.new(conn)
  else
    conn.is_a?(RedisAdapter) ? conn : RedisAdapter.new(conn)
  end
end