aeternitas 0.1.0 → 2.0.0.rc1

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.
Files changed (52) hide show
  1. checksums.yaml +5 -5
  2. data/.gitattributes +1 -0
  3. data/.github/workflows/lint.yml +25 -0
  4. data/.github/workflows/tests.yml +28 -0
  5. data/.gitignore +2 -5
  6. data/.ruby-version +1 -1
  7. data/CHANGELOG.md +35 -0
  8. data/Gemfile +1 -1
  9. data/README.md +93 -148
  10. data/Rakefile +1 -1
  11. data/aeternitas.gemspec +23 -34
  12. data/lib/aeternitas/aeternitas_job.rb +7 -0
  13. data/lib/aeternitas/cleanup_old_metrics_job.rb +12 -0
  14. data/lib/aeternitas/cleanup_stale_locks_job.rb +12 -0
  15. data/lib/aeternitas/errors.rb +1 -2
  16. data/lib/aeternitas/guard.rb +72 -106
  17. data/lib/aeternitas/guard_lock.rb +19 -0
  18. data/lib/aeternitas/maintenance.rb +35 -0
  19. data/lib/aeternitas/metric.rb +12 -0
  20. data/lib/aeternitas/metrics.rb +54 -136
  21. data/lib/aeternitas/poll_job.rb +135 -0
  22. data/lib/aeternitas/pollable/configuration.rb +21 -22
  23. data/lib/aeternitas/pollable/dsl.rb +16 -17
  24. data/lib/aeternitas/pollable.rb +19 -18
  25. data/lib/aeternitas/pollable_meta_data.rb +18 -9
  26. data/lib/aeternitas/polling_frequency.rb +4 -4
  27. data/lib/aeternitas/source.rb +5 -5
  28. data/lib/aeternitas/storage_adapter/file.rb +9 -12
  29. data/lib/aeternitas/storage_adapter.rb +1 -3
  30. data/lib/aeternitas/unique_job_lock.rb +15 -0
  31. data/lib/aeternitas/version.rb +1 -1
  32. data/lib/aeternitas.rb +23 -26
  33. data/lib/generators/aeternitas/install_generator.rb +14 -8
  34. data/lib/generators/aeternitas/templates/add_aeternitas.rb.erb +34 -2
  35. data/lib/generators/aeternitas/templates/initializer.rb +10 -7
  36. metadata +41 -124
  37. data/.idea/.rakeTasks +0 -7
  38. data/.idea/misc.xml +0 -4
  39. data/.idea/modules.xml +0 -8
  40. data/.idea/vcs.xml +0 -6
  41. data/.rspec +0 -2
  42. data/.rubocop.yml +0 -2
  43. data/.travis.yml +0 -8
  44. data/lib/aeternitas/metrics/counter.rb +0 -18
  45. data/lib/aeternitas/metrics/ratio.rb +0 -67
  46. data/lib/aeternitas/metrics/ten_minutes_resolution.rb +0 -40
  47. data/lib/aeternitas/metrics/values.rb +0 -18
  48. data/lib/aeternitas/sidekiq/middleware.rb +0 -31
  49. data/lib/aeternitas/sidekiq/poll_job.rb +0 -30
  50. data/lib/aeternitas/sidekiq.rb +0 -5
  51. data/logo.png +0 -0
  52. data/logo.svg +0 -198
@@ -1,10 +1,13 @@
1
- # Configure Aeternitas
1
+ # Aeternitas is configured with sensible defaults. You can override them here if needed.
2
2
  Aeternitas.configure do |config|
3
- config.redis = { host: 'localhost', port: 6379 } #this is the default Redis config which should work in most cases.
4
- end
3
+ # Configure source storage (default is Rails.root.join("storage", "aeternitas"))
4
+ # config.storage_adapter_config = {
5
+ # directory: File.join(Rails.root, 'public', 'sources')
6
+ # }
7
+
8
+ # Configure metrics collection (default is disabled)
9
+ # config.metrics_enabled = true
5
10
 
6
- Sidekiq.configure_server do |config|
7
- config.server_middleware do |chain|
8
- chain.add Aeternitas::Sidekiq::Middleware
9
- end
11
+ # Change how long metric data is kept (default is 90 days)
12
+ # config.metric_retention_period = 180.days
10
13
  end
metadata CHANGED
@@ -1,59 +1,44 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aeternitas
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 2.0.0.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Prilop
8
8
  - Max Kießling
9
- - Robert Terbach
10
- autorequire:
9
+ - Louis Franzke
11
10
  bindir: exe
12
11
  cert_chain: []
13
- date: 2017-06-22 00:00:00.000000000 Z
12
+ date: 1980-01-02 00:00:00.000000000 Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
15
  name: activerecord
17
- requirement: !ruby/object:Gem::Requirement
18
- requirements:
19
- - - "~>"
20
- - !ruby/object:Gem::Version
21
- version: '5'
22
- type: :runtime
23
- prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
- requirements:
26
- - - "~>"
27
- - !ruby/object:Gem::Version
28
- version: '5'
29
- - !ruby/object:Gem::Dependency
30
- name: redis
31
16
  requirement: !ruby/object:Gem::Requirement
32
17
  requirements:
33
18
  - - ">="
34
19
  - !ruby/object:Gem::Version
35
- version: '0'
20
+ version: '7.0'
36
21
  type: :runtime
37
22
  prerelease: false
38
23
  version_requirements: !ruby/object:Gem::Requirement
39
24
  requirements:
40
25
  - - ">="
41
26
  - !ruby/object:Gem::Version
42
- version: '0'
27
+ version: '7.0'
43
28
  - !ruby/object:Gem::Dependency
44
- name: connection_pool
29
+ name: activejob
45
30
  requirement: !ruby/object:Gem::Requirement
46
31
  requirements:
47
32
  - - ">="
48
33
  - !ruby/object:Gem::Version
49
- version: '0'
34
+ version: '7.0'
50
35
  type: :runtime
51
36
  prerelease: false
52
37
  version_requirements: !ruby/object:Gem::Requirement
53
38
  requirements:
54
39
  - - ">="
55
40
  - !ruby/object:Gem::Version
56
- version: '0'
41
+ version: '7.0'
57
42
  - !ruby/object:Gem::Dependency
58
43
  name: aasm
59
44
  requirement: !ruby/object:Gem::Requirement
@@ -69,133 +54,77 @@ dependencies:
69
54
  - !ruby/object:Gem::Version
70
55
  version: '0'
71
56
  - !ruby/object:Gem::Dependency
72
- name: sidekiq
73
- requirement: !ruby/object:Gem::Requirement
74
- requirements:
75
- - - ">"
76
- - !ruby/object:Gem::Version
77
- version: '4'
78
- type: :runtime
79
- prerelease: false
80
- version_requirements: !ruby/object:Gem::Requirement
81
- requirements:
82
- - - ">"
83
- - !ruby/object:Gem::Version
84
- version: '4'
85
- - !ruby/object:Gem::Dependency
86
- name: sidekiq-unique-jobs
87
- requirement: !ruby/object:Gem::Requirement
88
- requirements:
89
- - - "~>"
90
- - !ruby/object:Gem::Version
91
- version: '5.0'
92
- type: :runtime
93
- prerelease: false
94
- version_requirements: !ruby/object:Gem::Requirement
95
- requirements:
96
- - - "~>"
97
- - !ruby/object:Gem::Version
98
- version: '5.0'
99
- - !ruby/object:Gem::Dependency
100
- name: tabstabs
57
+ name: bundler
101
58
  requirement: !ruby/object:Gem::Requirement
102
59
  requirements:
103
60
  - - ">="
104
61
  - !ruby/object:Gem::Version
105
62
  version: '0'
106
- type: :runtime
63
+ type: :development
107
64
  prerelease: false
108
65
  version_requirements: !ruby/object:Gem::Requirement
109
66
  requirements:
110
67
  - - ">="
111
68
  - !ruby/object:Gem::Version
112
69
  version: '0'
113
- - !ruby/object:Gem::Dependency
114
- name: bundler
115
- requirement: !ruby/object:Gem::Requirement
116
- requirements:
117
- - - "~>"
118
- - !ruby/object:Gem::Version
119
- version: '1.13'
120
- type: :development
121
- prerelease: false
122
- version_requirements: !ruby/object:Gem::Requirement
123
- requirements:
124
- - - "~>"
125
- - !ruby/object:Gem::Version
126
- version: '1.13'
127
70
  - !ruby/object:Gem::Dependency
128
71
  name: rake
129
72
  requirement: !ruby/object:Gem::Requirement
130
73
  requirements:
131
- - - "~>"
74
+ - - ">="
132
75
  - !ruby/object:Gem::Version
133
- version: '10.0'
76
+ version: '0'
134
77
  type: :development
135
78
  prerelease: false
136
79
  version_requirements: !ruby/object:Gem::Requirement
137
80
  requirements:
138
- - - "~>"
81
+ - - ">="
139
82
  - !ruby/object:Gem::Version
140
- version: '10.0'
83
+ version: '0'
141
84
  - !ruby/object:Gem::Dependency
142
- name: rspec
85
+ name: rspec-rails
143
86
  requirement: !ruby/object:Gem::Requirement
144
87
  requirements:
145
88
  - - "~>"
146
89
  - !ruby/object:Gem::Version
147
- version: '3.0'
90
+ version: '7.0'
148
91
  type: :development
149
92
  prerelease: false
150
93
  version_requirements: !ruby/object:Gem::Requirement
151
94
  requirements:
152
95
  - - "~>"
153
96
  - !ruby/object:Gem::Version
154
- version: '3.0'
97
+ version: '7.0'
155
98
  - !ruby/object:Gem::Dependency
156
99
  name: sqlite3
157
100
  requirement: !ruby/object:Gem::Requirement
158
101
  requirements:
159
- - - ">="
102
+ - - "~>"
160
103
  - !ruby/object:Gem::Version
161
- version: '0'
104
+ version: '2.1'
162
105
  type: :development
163
106
  prerelease: false
164
107
  version_requirements: !ruby/object:Gem::Requirement
165
108
  requirements:
166
- - - ">="
109
+ - - "~>"
167
110
  - !ruby/object:Gem::Version
168
- version: '0'
111
+ version: '2.1'
169
112
  - !ruby/object:Gem::Dependency
170
113
  name: database_cleaner
171
114
  requirement: !ruby/object:Gem::Requirement
172
115
  requirements:
173
116
  - - "~>"
174
117
  - !ruby/object:Gem::Version
175
- version: '1.5'
118
+ version: '2.0'
176
119
  type: :development
177
120
  prerelease: false
178
121
  version_requirements: !ruby/object:Gem::Requirement
179
122
  requirements:
180
123
  - - "~>"
181
124
  - !ruby/object:Gem::Version
182
- version: '1.5'
183
- - !ruby/object:Gem::Dependency
184
- name: rspec-sidekiq
185
- requirement: !ruby/object:Gem::Requirement
186
- requirements:
187
- - - ">="
188
- - !ruby/object:Gem::Version
189
- version: '0'
190
- type: :development
191
- prerelease: false
192
- version_requirements: !ruby/object:Gem::Requirement
193
- requirements:
194
- - - ">="
195
- - !ruby/object:Gem::Version
196
- version: '0'
125
+ version: '2.0'
197
126
  - !ruby/object:Gem::Dependency
198
- name: mock_redis
127
+ name: standard
199
128
  requirement: !ruby/object:Gem::Requirement
200
129
  requirements:
201
130
  - - ">="
@@ -208,27 +137,19 @@ dependencies:
208
137
  - - ">="
209
138
  - !ruby/object:Gem::Version
210
139
  version: '0'
211
- description: |2
212
- Æternitas provides means to regularly 'poll' resources (i.e. a website, twitter feed or API) and to permanently
213
- store retrieved results. By default æternitas avoids putting too much load on external servers and stores raw
214
- results as compressed files on disk. It can be configured to a wide variety of polling strategies (e.g. frequencies,
215
- cooldown periods, ignoring exceptions, deactivating resources, ...)."
140
+ description: æternitas is a tool support polling resources (webpages, APIs).
216
141
  email:
217
- - max@kopfueber.org
218
- - michael.prilop@imw.fraunhofer.de
142
+ - prilop@infai.org
219
143
  executables: []
220
144
  extensions: []
221
145
  extra_rdoc_files: []
222
146
  files:
147
+ - ".gitattributes"
148
+ - ".github/workflows/lint.yml"
149
+ - ".github/workflows/tests.yml"
223
150
  - ".gitignore"
224
- - ".idea/.rakeTasks"
225
- - ".idea/misc.xml"
226
- - ".idea/modules.xml"
227
- - ".idea/vcs.xml"
228
- - ".rspec"
229
- - ".rubocop.yml"
230
151
  - ".ruby-version"
231
- - ".travis.yml"
152
+ - CHANGELOG.md
232
153
  - CODE_OF_CONDUCT.md
233
154
  - Gemfile
234
155
  - LICENSE.txt
@@ -238,35 +159,33 @@ files:
238
159
  - bin/console
239
160
  - bin/setup
240
161
  - lib/aeternitas.rb
162
+ - lib/aeternitas/aeternitas_job.rb
163
+ - lib/aeternitas/cleanup_old_metrics_job.rb
164
+ - lib/aeternitas/cleanup_stale_locks_job.rb
241
165
  - lib/aeternitas/errors.rb
242
166
  - lib/aeternitas/guard.rb
167
+ - lib/aeternitas/guard_lock.rb
168
+ - lib/aeternitas/maintenance.rb
169
+ - lib/aeternitas/metric.rb
243
170
  - lib/aeternitas/metrics.rb
244
- - lib/aeternitas/metrics/counter.rb
245
- - lib/aeternitas/metrics/ratio.rb
246
- - lib/aeternitas/metrics/ten_minutes_resolution.rb
247
- - lib/aeternitas/metrics/values.rb
171
+ - lib/aeternitas/poll_job.rb
248
172
  - lib/aeternitas/pollable.rb
249
173
  - lib/aeternitas/pollable/configuration.rb
250
174
  - lib/aeternitas/pollable/dsl.rb
251
175
  - lib/aeternitas/pollable_meta_data.rb
252
176
  - lib/aeternitas/polling_frequency.rb
253
- - lib/aeternitas/sidekiq.rb
254
- - lib/aeternitas/sidekiq/middleware.rb
255
- - lib/aeternitas/sidekiq/poll_job.rb
256
177
  - lib/aeternitas/source.rb
257
178
  - lib/aeternitas/storage_adapter.rb
258
179
  - lib/aeternitas/storage_adapter/file.rb
180
+ - lib/aeternitas/unique_job_lock.rb
259
181
  - lib/aeternitas/version.rb
260
182
  - lib/generators/aeternitas/install_generator.rb
261
183
  - lib/generators/aeternitas/templates/add_aeternitas.rb.erb
262
184
  - lib/generators/aeternitas/templates/initializer.rb
263
- - logo.png
264
- - logo.svg
265
- homepage: https://github.com/FHG-IMW/aeternitas
185
+ homepage: https://github.com/Dietech-Group/aeternitas
266
186
  licenses:
267
187
  - MIT
268
188
  metadata: {}
269
- post_install_message:
270
189
  rdoc_options: []
271
190
  require_paths:
272
191
  - lib
@@ -281,9 +200,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
281
200
  - !ruby/object:Gem::Version
282
201
  version: '0'
283
202
  requirements: []
284
- rubyforge_project:
285
- rubygems_version: 2.6.8
286
- signing_key:
203
+ rubygems_version: 3.6.9
287
204
  specification_version: 4
288
- summary: æternitas - A ruby gem for continuous source retrieval and data integration
205
+ summary: æternitas - version 2
289
206
  test_files: []
data/.idea/.rakeTasks DELETED
@@ -1,7 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <Settings><!--This file was automatically generated by Ruby plugin.
3
- You are allowed to:
4
- 1. Remove rake task
5
- 2. Add existing rake tasks
6
- To add existing rake tasks automatically delete this file and reload the project.
7
- --><RakeGroup description="" fullCmd="" taksId="rake"><RakeTask description="Build aeternitas-0.1.0.gem into the pkg directory" fullCmd="build" taksId="build" /><RakeTask description="Remove any temporary products" fullCmd="clean" taksId="clean" /><RakeTask description="Remove any generated files" fullCmd="clobber" taksId="clobber" /><RakeTask description="Build and install aeternitas-0.1.0.gem into system gems" fullCmd="install" taksId="install" /><RakeGroup description="" fullCmd="" taksId="install"><RakeTask description="Build and install aeternitas-0.1.0.gem into system gems without network access" fullCmd="install:local" taksId="local" /></RakeGroup><RakeTask description="Create tag v0.1.0 and build and push aeternitas-0.1.0.gem to Rubygems" fullCmd="release[remote]" taksId="release[remote]" /><RakeTask description="Run RSpec code examples" fullCmd="spec" taksId="spec" /><RakeTask description="" fullCmd="default" taksId="default" /><RakeTask description="" fullCmd="release" taksId="release" /><RakeGroup description="" fullCmd="" taksId="release"><RakeTask description="" fullCmd="release:guard_clean" taksId="guard_clean" /><RakeTask description="" fullCmd="release:rubygem_push" taksId="rubygem_push" /><RakeTask description="" fullCmd="release:source_control_push" taksId="source_control_push" /></RakeGroup></RakeGroup></Settings>
data/.idea/misc.xml DELETED
@@ -1,4 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="ProjectRootManager" version="2" project-jdk-name="rbenv: 2.4.0" project-jdk-type="RUBY_SDK" />
4
- </project>
data/.idea/modules.xml DELETED
@@ -1,8 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="ProjectModuleManager">
4
- <modules>
5
- <module fileurl="file://$PROJECT_DIR$/.idea/aeternitas.iml" filepath="$PROJECT_DIR$/.idea/aeternitas.iml" />
6
- </modules>
7
- </component>
8
- </project>
data/.idea/vcs.xml DELETED
@@ -1,6 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="VcsDirectoryMappings">
4
- <mapping directory="$PROJECT_DIR$" vcs="Git" />
5
- </component>
6
- </project>
data/.rspec DELETED
@@ -1,2 +0,0 @@
1
- --format documentation
2
- --color
data/.rubocop.yml DELETED
@@ -1,2 +0,0 @@
1
- Metrics/LineLength:
2
- Max: 100
data/.travis.yml DELETED
@@ -1,8 +0,0 @@
1
- sudo: false
2
- services:
3
- - redis-server
4
- language: ruby
5
- rvm:
6
- - 2.3.3
7
- - 2.4.0
8
- before_install: gem install bundler -v 1.13.7
@@ -1,18 +0,0 @@
1
- module Aeternitas
2
- module Metrics
3
- # Wrapper for {TabsTabs::Metrics::Counter::Stats}.
4
- # It is for Counter metrics.
5
- class Counter
6
- include Enumerable
7
- extend Forwardable
8
-
9
- def_delegators :@tabstabs_stats, :min, :max, :avg, :each, :to_a, :first, :last
10
-
11
- # Create a new Wrapper
12
- # @param [TabsTabs::Metrics::Counter::Stats] tabstabs_stats the wrapped stats.
13
- def initialize(tabstabs_stats)
14
- @tabstabs_stats = tabstabs_stats
15
- end
16
- end
17
- end
18
- end
@@ -1,67 +0,0 @@
1
- module Aeternitas
2
- module Metrics
3
- # Stores time series data for ratios
4
- # @!attribute [r] from
5
- # @return [DateTime] start of the time series
6
- # @!attribute [r] to
7
- # @return [DateTime] end of the time series
8
- # @!attribute [r] resolution
9
- # @return [Symbol] resolution of the time series
10
- # @!attribute [r] values
11
- # @return [Array] time series data
12
- # The time series values have the following format:
13
- # {
14
- # timestamp: DateTime("2000-01-01 00:00:00 UTC"),
15
- # ratio: 0.01
16
- # }
17
- class Ratio
18
- include Enumerable
19
-
20
- attr_reader :from, :to, :resolution, :values
21
-
22
- # Create a new ratio time series
23
- # @param [DateTime] from start of the time series
24
- # @param [DateTime] to end of the time series
25
- # @param [Symbol] resolution time series resolution
26
- # @param [Array] values time series data
27
- def initialize(from, to, resolution, values)
28
- @from = from
29
- @to = to
30
- @resolution = resolution
31
- @values = values
32
- end
33
-
34
- def each(&block)
35
- @values.each(&block)
36
- end
37
-
38
- def to_a
39
- @values.to_a
40
- end
41
-
42
- # Computes the minimum ration within the time series.
43
- # @return [Float] the minimum ratio
44
- def min
45
- @values.min_by { |v| v['ratio'] }['ratio']
46
- end
47
-
48
- # Computes the maximum ration within the time series.
49
- # @return [Float] the maximum ratio
50
- def max
51
- @values.max_by { |v| v['ratio'] }['ratio']
52
- end
53
-
54
- # Computes the average ration within the time series.
55
- # @return [Float] the average ratio
56
- def avg
57
- return 0 if count.zero?
58
- p @values
59
- @values.inject(0) { |sum, v| sum + v[:ratio] } / @values.count
60
- end
61
-
62
- def to_s
63
- values.to_s
64
- end
65
- end
66
- end
67
- end
@@ -1,40 +0,0 @@
1
- module Aeternitas
2
- module Metrics
3
- # A TabsTabs resolution represeting 10 minute intervals.
4
- module TenMinutesResolution
5
- include TabsTabs::Resolutionable
6
- extend self
7
-
8
- PATTERN = '%Y-%m-%d-%H-%M'.freeze
9
-
10
- def name
11
- :ten_minutes
12
- end
13
-
14
- def serialize(ts)
15
- Time.utc(ts.year, ts.month, ts.day, ts.hour, (ts.min / 10).to_i).strftime(PATTERN)
16
- end
17
-
18
- def deserialize(str)
19
- dt = DateTime.strptime(str, PATTERN)
20
- normalize(dt)
21
- end
22
-
23
- def from_seconds(s)
24
- s / 10.minutes
25
- end
26
-
27
- def to_seconds
28
- 10.minutes
29
- end
30
-
31
- def add(ts, number)
32
- ts + number * 10.minutes
33
- end
34
-
35
- def normalize(ts)
36
- Time.utc(ts.year, ts.month, ts.day, ts.hour, ts.min)
37
- end
38
- end
39
- end
40
- end
@@ -1,18 +0,0 @@
1
- module Aeternitas
2
- module Metrics
3
- # Wrapper for {TabsTabs::Metrics::Value::Stats}.
4
- # It is for Value metrics.
5
- class Values
6
- include Enumerable
7
- extend Forwardable
8
-
9
- def_delegators :@tabstabs_stats, :sum, :min, :max, :avg, :each, :to_a, :first, :last
10
-
11
- # Create a new Wrapper
12
- # @param [TabsTabs::Metrics::Value::Stats] tabstabs_stats the wrapped stats.
13
- def initialize(tabstabs_stats)
14
- @tabstabs_stats = tabstabs_stats
15
- end
16
- end
17
- end
18
- end
@@ -1,31 +0,0 @@
1
- module Aeternitas
2
- module Sidekiq
3
- # Aeternitas Sidekiq Middleware
4
- class Middleware
5
-
6
- def call(worker, msg, queue)
7
- yield
8
- rescue Aeternitas::Guard::GuardIsLocked => e
9
- raise e unless worker.is_a? Aeternitas::Sidekiq::PollJob
10
-
11
- # try deleting the sidekiq unique key so the job can be reenqueued
12
- Aeternitas.redis.del(
13
- SidekiqUniqueJobs::UniqueArgs.digest(msg)
14
- )
15
-
16
- # reenqueue the job
17
- worker.class.client_push msg
18
-
19
- # update the pollables state
20
- meta_data = Aeternitas::PollableMetaData.find_by(id: msg['args'].first)
21
- meta_data.enqueue!
22
-
23
- if meta_data.pollable.pollable_configuration.sleep_on_guard_locked
24
- # put the worker to rest for errors timeout
25
- sleep_duration = (e.timeout - Time.now).to_i
26
- sleep(sleep_duration + 1.0) if sleep_duration > 0
27
- end
28
- end
29
- end
30
- end
31
- end
@@ -1,30 +0,0 @@
1
- require 'sidekiq'
2
- module Aeternitas
3
- module Sidekiq
4
- # Sidekiq Worker that is responsible for executing the polling.
5
- class PollJob
6
- include ::Sidekiq::Worker
7
-
8
- sidekiq_options unique: :until_executed,
9
- unique_args: [:pollable_meta_data_id],
10
- unique_job_expiration: 1.month.to_i,
11
- queue: :polling,
12
- retry: 4
13
-
14
- sidekiq_retry_in do |count|
15
- [60, 3600, 86400, 604800][count]
16
- end
17
-
18
- sidekiq_retries_exhausted do |msg|
19
- meta_data = Aeternitas::PollableMetaData.find_by!(id: msg['args'].first)
20
- meta_data.disable_polling(msg['error_message'])
21
- end
22
-
23
- def perform(pollable_meta_data_id)
24
- meta_data = Aeternitas::PollableMetaData.find_by(id: pollable_meta_data_id)
25
- pollable = meta_data.pollable
26
- pollable.execute_poll
27
- end
28
- end
29
- end
30
- end
@@ -1,5 +0,0 @@
1
- require 'aeternitas/sidekiq/poll_job'
2
- require 'aeternitas/sidekiq/middleware'
3
- module Aeternitas
4
- module Sidekiq ; end
5
- end
data/logo.png DELETED
Binary file