gush 0.3.3 → 0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d26693f019dfd49b57cb7828274bec009c96dfb4
4
- data.tar.gz: 1666a4d1edc877d4ac597428ed56f73a5f625fa9
3
+ metadata.gz: 6742c4a3bbcd13c0045c12c8733dae7e7b2fd2a2
4
+ data.tar.gz: 43293c3a05639fc46e3d39b87e750358a3ed4c60
5
5
  SHA512:
6
- metadata.gz: b1f55d88bbe1719395103c6eeeda6a9d140d9cd7b6d35296f1ab97b1d381a7f69bbbe83e21faa660a05fe6183d7d5443c006244cbbcc99ebbc58edf554d2adbf
7
- data.tar.gz: c2d6e5aa2a0613dae3e893ca368e527cac28fe1b9d6df66793de83bfe73dcad7940ee9d0cfd0663e8fd1fcc30eb313c0e465f98da1a350f5958d82beef9faa61
6
+ metadata.gz: 36263afadc504f4051a93613b27ab18f77b79b24c7e25927d11fc92322b5c42c4054fcd3d8dc2335843dc59224a1aab699a848459ce879b31920b5393d16c0f4
7
+ data.tar.gz: b4447f6c90b7ef427624eb6bdd3f2b1eb36a954b92f1c578dec3a446cbe7e7ea909d02957050e3779902db88e9cb4a12695bc5dc0f08432813d8925d37b7f92a
data/CHANGELOG.md CHANGED
@@ -1,3 +1,3 @@
1
- # 0.4
1
+ # 0.5
2
2
 
3
3
  - remove hard dependency on Yajl, so Gush can work with non-MRI Rubies ([#31](https://github.com/chaps-io/gush/pull/31) by [Nick Rakochy](https://github.com/chaps-io/gush/pull/31))
data/Gemfile CHANGED
@@ -4,3 +4,4 @@ gemspec
4
4
  platforms :mri, :ruby do
5
5
  gem 'yajl-ruby'
6
6
  end
7
+
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.3.3"
7
+ spec.version = "0.4"
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/client.rb CHANGED
@@ -1,15 +1,17 @@
1
1
  module Gush
2
2
  class Client
3
- attr_reader :configuration, :sidekiq
3
+ attr_reader :configuration
4
4
 
5
5
  def initialize(config = Gush.configuration)
6
6
  @configuration = config
7
7
  @sidekiq = build_sidekiq
8
+ @redis = build_redis
8
9
  end
9
10
 
10
11
  def configure
11
12
  yield configuration
12
13
  @sidekiq = build_sidekiq
14
+ @redis = build_redis
13
15
  end
14
16
 
15
17
  def create_workflow(name)
@@ -47,11 +49,7 @@ module Gush
47
49
  loop do
48
50
  id = SecureRandom.uuid
49
51
  job_identifier = "#{job_klass}-#{id}"
50
- available = connection_pool.with do |redis|
51
- !redis.exists("gush.jobs.#{workflow_id}.#{job_identifier}")
52
- end
53
-
54
- break if available
52
+ break if !redis.exists("gush.jobs.#{workflow_id}.#{job_identifier}")
55
53
  end
56
54
 
57
55
  job_identifier
@@ -61,54 +59,40 @@ module Gush
61
59
  id = nil
62
60
  loop do
63
61
  id = SecureRandom.uuid
64
- available = connection_pool.with do |redis|
65
- !redis.exists("gush.workflow.#{id}")
66
- end
67
-
68
- break if available
62
+ break if !redis.exists("gush.workflow.#{id}")
69
63
  end
70
64
 
71
65
  id
72
66
  end
73
67
 
74
68
  def all_workflows
75
- connection_pool.with do |redis|
76
- redis.keys("gush.workflows.*").map do |key|
77
- id = key.sub("gush.workflows.", "")
78
- find_workflow(id)
79
- end
69
+ redis.keys("gush.workflows.*").map do |key|
70
+ id = key.sub("gush.workflows.", "")
71
+ find_workflow(id)
80
72
  end
81
73
  end
82
74
 
83
75
  def find_workflow(id)
84
- connection_pool.with do |redis|
85
- data = redis.get("gush.workflows.#{id}")
86
-
87
- unless data.nil?
88
- hash = Gush::JSON.decode(data, symbolize_keys: true)
89
- keys = redis.keys("gush.jobs.#{id}.*")
90
- nodes = redis.mget(*keys).map { |json| Gush::JSON.decode(json, symbolize_keys: true) }
91
- workflow_from_hash(hash, nodes)
92
- else
93
- raise WorkflowNotFound.new("Workflow with given id doesn't exist")
94
- end
76
+ data = redis.get("gush.workflows.#{id}")
77
+ unless data.nil?
78
+ hash = Gush::JSON.decode(data, symbolize_keys: true)
79
+ keys = redis.keys("gush.jobs.#{id}.*")
80
+ nodes = redis.mget(*keys).map { |json| Gush::JSON.decode(json, symbolize_keys: true) }
81
+ workflow_from_hash(hash, nodes)
82
+ else
83
+ raise WorkflowNotFound.new("Workflow with given id doesn't exist")
95
84
  end
96
85
  end
97
86
 
98
87
  def persist_workflow(workflow)
99
- connection_pool.with do |redis|
100
- redis.set("gush.workflows.#{workflow.id}", workflow.to_json)
101
- end
102
-
88
+ redis.set("gush.workflows.#{workflow.id}", workflow.to_json)
103
89
  workflow.jobs.each {|job| persist_job(workflow.id, job) }
104
90
  workflow.mark_as_persisted
105
91
  true
106
92
  end
107
93
 
108
94
  def persist_job(workflow_id, job)
109
- connection_pool.with do |redis|
110
- redis.set("gush.jobs.#{workflow_id}.#{job.name}", job.to_json)
111
- end
95
+ redis.set("gush.jobs.#{workflow_id}.#{job.name}", job.to_json)
112
96
  end
113
97
 
114
98
  def load_job(workflow_id, job_id)
@@ -116,16 +100,10 @@ module Gush
116
100
  job_name_match = /(?<klass>\w*[^-])-(?<identifier>.*)/.match(job_id)
117
101
  hypen = '-' if job_name_match.nil?
118
102
 
119
- keys = connection_pool.with do |redis|
120
- redis.keys("gush.jobs.#{workflow_id}.#{job_id}#{hypen}*")
121
- end
122
-
103
+ keys = redis.keys("gush.jobs.#{workflow_id}.#{job_id}#{hypen}*")
123
104
  return nil if keys.nil?
124
105
 
125
- data = connection_pool.with do |redis|
126
- redis.get(keys.first)
127
- end
128
-
106
+ data = redis.get(keys.first)
129
107
  return nil if data.nil?
130
108
 
131
109
  data = Gush::JSON.decode(data, symbolize_keys: true)
@@ -133,16 +111,12 @@ module Gush
133
111
  end
134
112
 
135
113
  def destroy_workflow(workflow)
136
- connection_pool.with do |redis|
137
- redis.del("gush.workflows.#{workflow.id}")
138
- end
114
+ redis.del("gush.workflows.#{workflow.id}")
139
115
  workflow.jobs.each {|job| destroy_job(workflow.id, job) }
140
116
  end
141
117
 
142
118
  def destroy_job(workflow_id, job)
143
- connection_pool.with do |redis|
144
- redis.del("gush.jobs.#{workflow_id}.#{job.name}")
145
- end
119
+ redis.del("gush.jobs.#{workflow_id}.#{job.name}")
146
120
  end
147
121
 
148
122
  def worker_report(message)
@@ -166,6 +140,8 @@ module Gush
166
140
 
167
141
  private
168
142
 
143
+ attr_reader :sidekiq, :redis
144
+
169
145
  def workflow_from_hash(hash, nodes = nil)
170
146
  flow = hash[:klass].constantize.new *hash[:arguments]
171
147
  flow.jobs = []
@@ -180,9 +156,7 @@ module Gush
180
156
  end
181
157
 
182
158
  def report(key, message)
183
- connection_pool.with do |redis|
184
- redis.publish(key, Gush::JSON.encode(message))
185
- end
159
+ redis.publish(key, Gush::JSON.encode(message))
186
160
  end
187
161
 
188
162
 
@@ -195,7 +169,7 @@ module Gush
195
169
  end
196
170
 
197
171
  def connection_pool
198
- @connection_pool ||= ConnectionPool.new(size: configuration.concurrency, timeout: 1) { build_redis }
172
+ ConnectionPool.new(size: configuration.concurrency, timeout: 1) { build_redis }
199
173
  end
200
174
  end
201
175
  end
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.3.3
4
+ version: '0.4'
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: 2016-08-23 00:00:00.000000000 Z
11
+ date: 2016-03-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sidekiq
@@ -268,7 +268,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
268
268
  version: '0'
269
269
  requirements: []
270
270
  rubyforge_project:
271
- rubygems_version: 2.4.8
271
+ rubygems_version: 2.4.5.1
272
272
  signing_key:
273
273
  specification_version: 4
274
274
  summary: Fast and distributed workflow runner using only Sidekiq and Redis