Class: Dwf::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/dwf/client.rb

Instance Method Summary collapse

Instance Method Details

#build_job_id(workflow_id, job_klass) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/dwf/client.rb', line 39

def build_job_id(workflow_id, job_klass)
  jid = nil

  loop do
    jid = SecureRandom.uuid
    available = !redis.hexists(
      "dwf.jobs.#{workflow_id}.#{job_klass}",
      jid
    )

    break if available
  end

  jid
end

#build_workflow_idObject



55
56
57
58
59
60
61
62
63
64
65
# File 'lib/dwf/client.rb', line 55

def build_workflow_id
  wid = nil
  loop do
    wid = SecureRandom.uuid
    available = !redis.exists?("dwf.workflow.#{wid}")

    break if available
  end

  wid
end

#check_or_lock(workflow_id, job_name) ⇒ Object



21
22
23
24
25
26
27
28
29
# File 'lib/dwf/client.rb', line 21

def check_or_lock(workflow_id, job_name)
  key = "wf_enqueue_outgoing_jobs_#{workflow_id}-#{job_name}"

  if key_exists?(key)
    sleep 2
  else
    set(key, 'running')
  end
end

#delete(key) ⇒ Object



75
76
77
# File 'lib/dwf/client.rb', line 75

def delete(key)
  redis.del(key)
end

#find_job(workflow_id, job_name) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
# File 'lib/dwf/client.rb', line 3

def find_job(workflow_id, job_name)
  job_name_match = /(?<klass>\w*[^-])-(?<identifier>.*)/.match(job_name)
  data = if job_name_match
           find_job_by_klass_and_id(workflow_id, job_name)
         else
           find_job_by_klass(workflow_id, job_name)
         end

  return nil if data.nil?

  data = JSON.parse(data)
  Dwf::Item.from_hash(Dwf::Utils.symbolize_keys(data))
end

#key_exists?(key) ⇒ Boolean

Returns:

  • (Boolean)


67
68
69
# File 'lib/dwf/client.rb', line 67

def key_exists?(key)
  redis.exists?(key)
end

#persist_job(job) ⇒ Object



17
18
19
# File 'lib/dwf/client.rb', line 17

def persist_job(job)
  redis.hset("dwf.jobs.#{job.workflow_id}.#{job.klass}", job.id, job.as_json)
end

#persist_workflow(workflow) ⇒ Object



35
36
37
# File 'lib/dwf/client.rb', line 35

def persist_workflow(workflow)
  redis.set("dwf.workflows.#{workflow.id}", workflow.as_json)
end

#release_lock(workflow_id, job_name) ⇒ Object



31
32
33
# File 'lib/dwf/client.rb', line 31

def release_lock(workflow_id, job_name)
  delete("dwf_enqueue_outgoing_jobs_#{workflow_id}-#{job_name}")
end

#set(key, value) ⇒ Object



71
72
73
# File 'lib/dwf/client.rb', line 71

def set(key, value)
  redis.set(key, value)
end