Class: Gitlab::SidekiqMiddleware::ConcurrencyLimit::ConcurrencyLimitService
- Inherits:
-
Object
- Object
- Gitlab::SidekiqMiddleware::ConcurrencyLimit::ConcurrencyLimitService
- Defined in:
- lib/gitlab/sidekiq_middleware/concurrency_limit/concurrency_limit_service.rb
Constant Summary collapse
- REDIS_KEY_PREFIX =
'sidekiq:concurrency_limit'
Class Method Summary collapse
- .add_to_queue!(job, context) ⇒ Object
- .cleanup_stale_trackers(worker_name) ⇒ Object
- .concurrent_worker_count(worker_name) ⇒ Object
- .current_limit(worker_name) ⇒ Object
- .has_jobs_in_queue?(worker_name) ⇒ Boolean
- .metadata_key(worker_name) ⇒ Object
- .over_the_limit?(worker_name) ⇒ Boolean
- .queue_size(worker_name) ⇒ Object
- .resume_processing!(worker_name) ⇒ Object
- .set_current_limit!(worker_name, limit:) ⇒ Object
- .track_execution_end(worker_name) ⇒ Object
- .track_execution_start(worker_name) ⇒ Object
Instance Method Summary collapse
-
#initialize(worker_name) ⇒ ConcurrencyLimitService
constructor
A new instance of ConcurrencyLimitService.
Constructor Details
#initialize(worker_name) ⇒ ConcurrencyLimitService
Returns a new instance of ConcurrencyLimitService.
17 18 19 20 21 22 |
# File 'lib/gitlab/sidekiq_middleware/concurrency_limit/concurrency_limit_service.rb', line 17 def initialize(worker_name) @worker_name = worker_name @queue_manager = QueueManager.new(worker_name: worker_name, prefix: REDIS_KEY_PREFIX) @worker_execution_tracker = WorkerExecutionTracker.new(worker_name: worker_name, prefix: REDIS_KEY_PREFIX) @limit_manager = LimitManager.new(worker_name: worker_name, prefix: REDIS_KEY_PREFIX) end |
Class Method Details
.add_to_queue!(job, context) ⇒ Object
25 26 27 |
# File 'lib/gitlab/sidekiq_middleware/concurrency_limit/concurrency_limit_service.rb', line 25 def add_to_queue!(job, context) new(job['class']).add_to_queue!(job, context) end |
.cleanup_stale_trackers(worker_name) ⇒ Object
45 46 47 |
# File 'lib/gitlab/sidekiq_middleware/concurrency_limit/concurrency_limit_service.rb', line 45 def cleanup_stale_trackers(worker_name) new(worker_name).cleanup_stale_trackers end |
.concurrent_worker_count(worker_name) ⇒ Object
57 58 59 |
# File 'lib/gitlab/sidekiq_middleware/concurrency_limit/concurrency_limit_service.rb', line 57 def concurrent_worker_count(worker_name) new(worker_name).concurrent_worker_count end |
.current_limit(worker_name) ⇒ Object
61 62 63 |
# File 'lib/gitlab/sidekiq_middleware/concurrency_limit/concurrency_limit_service.rb', line 61 def current_limit(worker_name) new(worker_name).current_limit end |
.has_jobs_in_queue?(worker_name) ⇒ Boolean
29 30 31 |
# File 'lib/gitlab/sidekiq_middleware/concurrency_limit/concurrency_limit_service.rb', line 29 def has_jobs_in_queue?(worker_name) new(worker_name).has_jobs_in_queue? end |
.metadata_key(worker_name) ⇒ Object
41 42 43 |
# File 'lib/gitlab/sidekiq_middleware/concurrency_limit/concurrency_limit_service.rb', line 41 def (worker_name) new(worker_name). end |
.over_the_limit?(worker_name) ⇒ Boolean
69 70 71 72 73 74 75 76 |
# File 'lib/gitlab/sidekiq_middleware/concurrency_limit/concurrency_limit_service.rb', line 69 def over_the_limit?(worker_name) service = new(worker_name) limit = service.current_limit return false if limit == 0 service.concurrent_worker_count >= limit end |
.queue_size(worker_name) ⇒ Object
37 38 39 |
# File 'lib/gitlab/sidekiq_middleware/concurrency_limit/concurrency_limit_service.rb', line 37 def queue_size(worker_name) new(worker_name).queue_size end |
.resume_processing!(worker_name) ⇒ Object
33 34 35 |
# File 'lib/gitlab/sidekiq_middleware/concurrency_limit/concurrency_limit_service.rb', line 33 def resume_processing!(worker_name) new(worker_name).resume_processing! end |
.set_current_limit!(worker_name, limit:) ⇒ Object
65 66 67 |
# File 'lib/gitlab/sidekiq_middleware/concurrency_limit/concurrency_limit_service.rb', line 65 def set_current_limit!(worker_name, limit:) new(worker_name).set_current_limit!(limit) end |
.track_execution_end(worker_name) ⇒ Object
53 54 55 |
# File 'lib/gitlab/sidekiq_middleware/concurrency_limit/concurrency_limit_service.rb', line 53 def track_execution_end(worker_name) new(worker_name).track_execution_end end |
.track_execution_start(worker_name) ⇒ Object
49 50 51 |
# File 'lib/gitlab/sidekiq_middleware/concurrency_limit/concurrency_limit_service.rb', line 49 def track_execution_start(worker_name) new(worker_name).track_execution_start end |