Class: Kronos::Storage::InMemory
- Inherits:
-
Object
- Object
- Kronos::Storage::InMemory
- Defined in:
- lib/kronos/storage/in_memory.rb
Instance Attribute Summary collapse
-
#reports ⇒ Object
readonly
Returns the value of attribute reports.
-
#scheduled_tasks ⇒ Object
readonly
Returns the value of attribute scheduled_tasks.
Instance Method Summary collapse
- #check_lock(task_id, lock_id) ⇒ Object
-
#initialize ⇒ InMemory
constructor
A new instance of InMemory.
- #lock_task(task_id) ⇒ Object
- #locked_task?(task_id) ⇒ Boolean
- #pending?(task) ⇒ Boolean
- #register_report(report) ⇒ Object
- #release_lock(task_id) ⇒ Object
- #remove(task_id) ⇒ Object
- #remove_reports_for(id) ⇒ Object
- #resolved_tasks ⇒ Object
- #schedule(scheduled_task) ⇒ Object
Constructor Details
#initialize ⇒ InMemory
Returns a new instance of InMemory.
9 10 11 12 13 |
# File 'lib/kronos/storage/in_memory.rb', line 9 def initialize @scheduled_tasks = [] @reports = [] @locks = {} end |
Instance Attribute Details
#reports ⇒ Object (readonly)
Returns the value of attribute reports.
6 7 8 |
# File 'lib/kronos/storage/in_memory.rb', line 6 def reports @reports end |
#scheduled_tasks ⇒ Object (readonly)
Returns the value of attribute scheduled_tasks.
7 8 9 |
# File 'lib/kronos/storage/in_memory.rb', line 7 def scheduled_tasks @scheduled_tasks end |
Instance Method Details
#check_lock(task_id, lock_id) ⇒ Object
63 64 65 |
# File 'lib/kronos/storage/in_memory.rb', line 63 def check_lock(task_id, lock_id) @locks[task_id] == lock_id end |
#lock_task(task_id) ⇒ Object
57 58 59 60 61 |
# File 'lib/kronos/storage/in_memory.rb', line 57 def lock_task(task_id) SecureRandom.uuid.tap do |lock_id| @locks[task_id] = lock_id end end |
#locked_task?(task_id) ⇒ Boolean
53 54 55 |
# File 'lib/kronos/storage/in_memory.rb', line 53 def locked_task?(task_id) @locks.key?(task_id) end |
#pending?(task) ⇒ Boolean
25 26 27 28 29 30 31 32 33 |
# File 'lib/kronos/storage/in_memory.rb', line 25 def pending?(task) time = Time.now @scheduled_tasks .lazy .select { |scheduled_task| scheduled_task.next_run > time } .map(&:task_id) .include?(task.id) end |
#register_report(report) ⇒ Object
20 21 22 23 |
# File 'lib/kronos/storage/in_memory.rb', line 20 def register_report(report) remove_reports_for(report.task_id) @reports << report end |
#release_lock(task_id) ⇒ Object
67 68 69 |
# File 'lib/kronos/storage/in_memory.rb', line 67 def release_lock(task_id) @locks.delete(task_id) end |
#remove(task_id) ⇒ Object
45 46 47 |
# File 'lib/kronos/storage/in_memory.rb', line 45 def remove(task_id) @scheduled_tasks.reject! { |scheduled_task| scheduled_task.task_id == task_id } end |
#remove_reports_for(id) ⇒ Object
49 50 51 |
# File 'lib/kronos/storage/in_memory.rb', line 49 def remove_reports_for(id) @reports.reject! { |report| report.task_id == id } end |
#resolved_tasks ⇒ Object
35 36 37 38 39 40 41 42 43 |
# File 'lib/kronos/storage/in_memory.rb', line 35 def resolved_tasks time = Time.now @scheduled_tasks .lazy .select { |scheduled_task| scheduled_task.next_run <= time } .map(&:task_id) .to_a end |
#schedule(scheduled_task) ⇒ Object
15 16 17 18 |
# File 'lib/kronos/storage/in_memory.rb', line 15 def schedule(scheduled_task) remove(scheduled_task.task_id) @scheduled_tasks.push(scheduled_task) end |