gush 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7835f38c3775eb5e27af05891b1338fb5e8db18b
4
- data.tar.gz: d0e9dd4c0ccca28baa7ddc9517d0a40f17c34182
3
+ metadata.gz: 392530c8fb8c72de66d30d0e2dff156f7bd5981e
4
+ data.tar.gz: 96a4eb1b335d4b1927d6b10b09659197b5518bc4
5
5
  SHA512:
6
- metadata.gz: d529e5db55f76be518d6d33f528935eae41b3b4b7deb5a710792a8829186e5f21c9c6e9f43dcdcaebac7f61eaa3eb5cebafd8f84e3b0486069ff1b285ebf3f94
7
- data.tar.gz: 5b7e7a88e0db80efd590df7f8e6d8b0e407512f29bed6ee5b11728de622e28b5e46fb9c83b3fa80f325fa2511d763a305633825e2ce3c98783ccc76cbbb17412
6
+ metadata.gz: dd3deccd8c220426b730d417883cddc18a0fbf1ffac6aaa9e2406fd98b969e48a349fb2eb687769f03ae60a62aa3792f4f951b84a92bdd0c804bedc4f265a44d
7
+ data.tar.gz: 0bf46f8276ad9c1cc59104c329aa7f41e621aa0bb9ddb21ce1d0b5e0efcb76f4dcd7d0ec5c1c05363cd6868483c88b18175774881ef8004091950d929ad76eba
data/gush.gemspec CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "gush"
7
- spec.version = "0.2.2"
7
+ spec.version = "0.2.3"
8
8
  spec.authors = ["Piotrek Okoński"]
9
9
  spec.email = ["piotrek@okonski.org"]
10
10
  spec.summary = "Fast and distributed workflow runner using only Sidekiq and Redis"
data/lib/gush/cli.rb CHANGED
@@ -35,7 +35,8 @@ module Gush
35
35
  desc "start [workflow_id]", "Starts Workflow with given ID"
36
36
  def start(*args)
37
37
  id = args.shift
38
- client.start_workflow(id, args)
38
+ workflow = client.find_workflow(id)
39
+ client.start_workflow(workflow, args)
39
40
  end
40
41
 
41
42
  desc "create_and_start [WorkflowClass]", "Create and instantly start the new workflow"
@@ -21,7 +21,7 @@ module Gush
21
21
  elsif workflow.stopped?
22
22
  "stopped".red
23
23
  else
24
- running_status
24
+ "ready to start".blue
25
25
  end
26
26
  end
27
27
 
@@ -53,6 +53,7 @@ module Gush
53
53
  "Enqueued jobs" => enqueued_jobs_count.yellow,
54
54
  "Running jobs" => running_jobs_count.blue,
55
55
  "Remaining jobs" => remaining_jobs_count,
56
+ "Started at" => started_at,
56
57
  "Status" => status
57
58
  }
58
59
  end
@@ -63,6 +64,10 @@ module Gush
63
64
  status += "\n#{finished}/#{total_jobs_count} [#{(finished*100)/total_jobs_count}%]"
64
65
  end
65
66
 
67
+ def started_at
68
+ workflow.started_at.inspect
69
+ end
70
+
66
71
  def failed_status
67
72
  status = "failed".light_red
68
73
  status += "\n#{failed_job} failed"
@@ -131,7 +136,7 @@ module Gush
131
136
  end
132
137
 
133
138
  def remaining_jobs_count
134
- workflow.jobs.count{|j| [j.finished, j.failed, j.enqueued].none? }.to_s
139
+ workflow.jobs.count{|j| [j.finished?, j.failed?, j.enqueued?].none? }.to_s
135
140
  end
136
141
  end
137
142
  end
data/lib/gush/client.rb CHANGED
@@ -87,10 +87,11 @@ module Gush
87
87
  end
88
88
 
89
89
  def load_job(workflow_id, job_id)
90
+ workflow = find_workflow(workflow_id)
90
91
  data = redis.get("gush.jobs.#{workflow_id}.#{job_id}")
91
92
  return nil if data.nil?
92
93
  data = Gush::JSON.decode(data, symbolize_keys: true)
93
- Gush::Job.from_hash(nil, data)
94
+ Gush::Job.from_hash(workflow, data)
94
95
  end
95
96
 
96
97
  def destroy_workflow(workflow)
data/lib/gush/job.rb CHANGED
@@ -84,7 +84,13 @@ module Gush
84
84
  end
85
85
 
86
86
  def ready_to_start?
87
- !running? && !enqueued? && !finished? && !failed?
87
+ !running? && !enqueued? && !finished? && !failed? && parents_succeeded?
88
+ end
89
+
90
+ def parents_succeeded?
91
+ incoming.all? do |name|
92
+ @workflow.find_job(name).succeeded?
93
+ end
88
94
  end
89
95
 
90
96
  def has_no_dependencies?
data/lib/gush/workflow.rb CHANGED
@@ -71,11 +71,11 @@ module Gush
71
71
  end
72
72
 
73
73
  def started?
74
- @stopped == false
74
+ !!started_at
75
75
  end
76
76
 
77
77
  def running?
78
- !finished?
78
+ started? && !finished?
79
79
  end
80
80
 
81
81
  def failed?
@@ -5,7 +5,6 @@ describe "Workflows" do
5
5
  it "marks workflow as completed" do
6
6
  flow = TestWorkflow.create
7
7
  flow.start!
8
- expect(flow.reload).to be_running
9
8
 
10
9
  Gush::Worker.drain
11
10
 
@@ -28,7 +27,7 @@ describe "Workflows" do
28
27
  expect(Gush::Worker).to have_jobs(flow.id, ["FetchSecondJob", "PersistFirstJob"])
29
28
 
30
29
  Gush::Worker.perform_one
31
- expect(Gush::Worker).to have_jobs(flow.id, ["PersistFirstJob", "NormalizeJob"])
30
+ expect(Gush::Worker).to have_jobs(flow.id, ["PersistFirstJob"])
32
31
 
33
32
  Gush::Worker.perform_one
34
33
  expect(Gush::Worker).to have_jobs(flow.id, ["NormalizeJob"])
@@ -203,7 +203,7 @@ describe Gush::Workflow do
203
203
  describe "#running?" do
204
204
  context "when no enqueued or running jobs" do
205
205
  it "returns false" do
206
- expect(subject.running?).to be_truthy
206
+ expect(subject.running?).to be_falsy
207
207
  end
208
208
  end
209
209
 
data/spec/spec_helper.rb CHANGED
@@ -21,9 +21,10 @@ class TestWorkflow < Gush::Workflow
21
21
  run NormalizeJob
22
22
 
23
23
  run FetchFirstJob, after: Prepare
24
+ run FetchSecondJob, after: Prepare, before: NormalizeJob
25
+
24
26
  run PersistFirstJob, after: FetchFirstJob, before: NormalizeJob
25
27
 
26
- run FetchSecondJob, after: Prepare, before: NormalizeJob
27
28
  end
28
29
  end
29
30
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gush
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Piotrek Okoński
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-09-15 00:00:00.000000000 Z
11
+ date: 2015-09-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sidekiq