lowkiq 1.0.0

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.
@@ -0,0 +1,43 @@
1
+ module Lowkiq
2
+ module Worker
3
+ extend ExtendTracker
4
+
5
+ attr_accessor :shards_count,
6
+ :batch_size,
7
+ :max_retry_count,
8
+ :queue_name,
9
+
10
+ def self.extended(mod)
11
+ super
12
+ mod.shards_count = 5
13
+ mod.batch_size = 1
14
+ mod.max_retry_count = 25
15
+ mod.queue_name = mod.name
16
+ end
17
+
18
+ # i.e. 15, 16, 31, 96, 271, ... seconds + a random amount of time
19
+ def retry_in(retry_count)
20
+ (retry_count ** 4) + 15 + (rand(30) * (retry_count + 1))
21
+ end
22
+
23
+ def perform(payload)
24
+ fail "not implemented"
25
+ end
26
+
27
+ def client_queue
28
+ Queue::Queue.new Lowkiq.client_redis_pool, self.queue_name, self.shards_count
29
+ end
30
+
31
+ def client_queries
32
+ Queue::Queries.new Lowkiq.client_redis_pool, self.queue_name
33
+ end
34
+
35
+ def client_actions
36
+ Queue::Actions.new client_queue, client_queries
37
+ end
38
+
39
+ def perform_async(batch)
40
+ client_queue.push batch
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,36 @@
1
+ lib = File.expand_path("../lib", __FILE__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require "lowkiq/version"
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "lowkiq"
7
+ spec.version = Lowkiq::VERSION
8
+ spec.authors = ["Mikhail Kuzmin"]
9
+ spec.email = ["Mihail.Kuzmin@bia-tech.ru"]
10
+
11
+ spec.summary = %q{Lowkiq}
12
+ spec.description = %q{Lowkiq}
13
+ spec.homepage = "https://github.com/bia-technologies/lowkiq"
14
+
15
+ # Specify which files should be added to the gem when it is released.
16
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
17
+ spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
18
+ `git ls-files -z`
19
+ .split("\x0")
20
+ .reject { |f| f.match(%r{^(spec|frontend|examples|doc)/}) }
21
+ .push('assets/app.js')
22
+ end
23
+ spec.bindir = "exe"
24
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
25
+ spec.require_paths = ["lib"]
26
+
27
+ spec.add_dependency "redis", ">= 4.0.1", "< 5"
28
+ spec.add_dependency "connection_pool", "~> 2.2", ">= 2.2.2"
29
+ spec.add_dependency "rack", ">= 1.5.0"
30
+
31
+ spec.add_development_dependency "bundler", "~> 1.16"
32
+ spec.add_development_dependency "rake", "~> 10.0"
33
+ spec.add_development_dependency "rspec", "~> 3.0"
34
+ spec.add_development_dependency "rspec-mocks", "~> 3.8"
35
+ spec.add_development_dependency "rack-test", "~> 1.1"
36
+ end
metadata ADDED
@@ -0,0 +1,206 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: lowkiq
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Mikhail Kuzmin
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2019-10-04 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: redis
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 4.0.1
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '5'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: 4.0.1
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '5'
33
+ - !ruby/object:Gem::Dependency
34
+ name: connection_pool
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '2.2'
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 2.2.2
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '2.2'
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 2.2.2
53
+ - !ruby/object:Gem::Dependency
54
+ name: rack
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: 1.5.0
60
+ type: :runtime
61
+ prerelease: false
62
+ version_requirements: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: 1.5.0
67
+ - !ruby/object:Gem::Dependency
68
+ name: bundler
69
+ requirement: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - "~>"
72
+ - !ruby/object:Gem::Version
73
+ version: '1.16'
74
+ type: :development
75
+ prerelease: false
76
+ version_requirements: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - "~>"
79
+ - !ruby/object:Gem::Version
80
+ version: '1.16'
81
+ - !ruby/object:Gem::Dependency
82
+ name: rake
83
+ requirement: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - "~>"
86
+ - !ruby/object:Gem::Version
87
+ version: '10.0'
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - "~>"
93
+ - !ruby/object:Gem::Version
94
+ version: '10.0'
95
+ - !ruby/object:Gem::Dependency
96
+ name: rspec
97
+ requirement: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - "~>"
100
+ - !ruby/object:Gem::Version
101
+ version: '3.0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - "~>"
107
+ - !ruby/object:Gem::Version
108
+ version: '3.0'
109
+ - !ruby/object:Gem::Dependency
110
+ name: rspec-mocks
111
+ requirement: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - "~>"
114
+ - !ruby/object:Gem::Version
115
+ version: '3.8'
116
+ type: :development
117
+ prerelease: false
118
+ version_requirements: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - "~>"
121
+ - !ruby/object:Gem::Version
122
+ version: '3.8'
123
+ - !ruby/object:Gem::Dependency
124
+ name: rack-test
125
+ requirement: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - "~>"
128
+ - !ruby/object:Gem::Version
129
+ version: '1.1'
130
+ type: :development
131
+ prerelease: false
132
+ version_requirements: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - "~>"
135
+ - !ruby/object:Gem::Version
136
+ version: '1.1'
137
+ description: Lowkiq
138
+ email:
139
+ - Mihail.Kuzmin@bia-tech.ru
140
+ executables:
141
+ - lowkiq
142
+ extensions: []
143
+ extra_rdoc_files: []
144
+ files:
145
+ - ".gitignore"
146
+ - ".rspec"
147
+ - Gemfile
148
+ - Gemfile.lock
149
+ - LICENSE.md
150
+ - README.md
151
+ - Rakefile
152
+ - assets/app.js
153
+ - bin/console
154
+ - bin/setup
155
+ - deploy.md
156
+ - docker-compose.yml
157
+ - exe/lowkiq
158
+ - lib/lowkiq.rb
159
+ - lib/lowkiq/extend_tracker.rb
160
+ - lib/lowkiq/option_parser.rb
161
+ - lib/lowkiq/queue/actions.rb
162
+ - lib/lowkiq/queue/fetch.rb
163
+ - lib/lowkiq/queue/keys.rb
164
+ - lib/lowkiq/queue/marshal.rb
165
+ - lib/lowkiq/queue/queries.rb
166
+ - lib/lowkiq/queue/queue.rb
167
+ - lib/lowkiq/queue/queue_metrics.rb
168
+ - lib/lowkiq/queue/shard_metrics.rb
169
+ - lib/lowkiq/redis_info.rb
170
+ - lib/lowkiq/schedulers/lag.rb
171
+ - lib/lowkiq/schedulers/seq.rb
172
+ - lib/lowkiq/server.rb
173
+ - lib/lowkiq/shard_handler.rb
174
+ - lib/lowkiq/splitters/by_node.rb
175
+ - lib/lowkiq/splitters/default.rb
176
+ - lib/lowkiq/utils.rb
177
+ - lib/lowkiq/version.rb
178
+ - lib/lowkiq/web.rb
179
+ - lib/lowkiq/web/action.rb
180
+ - lib/lowkiq/web/api.rb
181
+ - lib/lowkiq/worker.rb
182
+ - lowkiq.gemspec
183
+ homepage: https://github.com/bia-technologies/lowkiq
184
+ licenses: []
185
+ metadata: {}
186
+ post_install_message:
187
+ rdoc_options: []
188
+ require_paths:
189
+ - lib
190
+ required_ruby_version: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
195
+ required_rubygems_version: !ruby/object:Gem::Requirement
196
+ requirements:
197
+ - - ">="
198
+ - !ruby/object:Gem::Version
199
+ version: '0'
200
+ requirements: []
201
+ rubyforge_project:
202
+ rubygems_version: 2.7.7
203
+ signing_key:
204
+ specification_version: 4
205
+ summary: Lowkiq
206
+ test_files: []