Class: Kronos::Storage::InMemory

Inherits:
Object
  • Object
show all
Defined in:
lib/kronos/storage/in_memory.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeInMemory

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

#reportsObject (readonly)

Returns the value of attribute reports.



6
7
8
# File 'lib/kronos/storage/in_memory.rb', line 6

def reports
  @reports
end

#scheduled_tasksObject (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

Returns:

  • (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

Returns:

  • (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_tasksObject



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