Class: Dwf::Client

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(config = Dwf.configuration) ⇒ Client

Returns a new instance of Client.



5
6
7
# File 'lib/dwf/client.rb', line 5

def initialize(config = Dwf.configuration)
  @config = config
end

Instance Attribute Details

#configObject (readonly)

Returns the value of attribute config.



3
4
5
# File 'lib/dwf/client.rb', line 3

def config
  @config
end

Instance Method Details

#build_job_id(workflow_id, job_klass) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/dwf/client.rb', line 45

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



61
62
63
64
65
66
67
68
69
70
71
# File 'lib/dwf/client.rb', line 61

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



27
28
29
30
31
32
33
34
35
# File 'lib/dwf/client.rb', line 27

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



81
82
83
# File 'lib/dwf/client.rb', line 81

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

#find_job(workflow_id, job_name) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/dwf/client.rb', line 9

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)


73
74
75
# File 'lib/dwf/client.rb', line 73

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

#persist_job(job) ⇒ Object



23
24
25
# File 'lib/dwf/client.rb', line 23

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

#persist_workflow(workflow) ⇒ Object



41
42
43
# File 'lib/dwf/client.rb', line 41

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

#release_lock(workflow_id, job_name) ⇒ Object



37
38
39
# File 'lib/dwf/client.rb', line 37

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

#set(key, value) ⇒ Object



77
78
79
# File 'lib/dwf/client.rb', line 77

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