aeternitas 0.2.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 +4 -4
  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 +35 -123
  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,16 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aeternitas
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.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: 2020-07-08 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
@@ -18,42 +17,28 @@ dependencies:
18
17
  requirements:
19
18
  - - ">="
20
19
  - !ruby/object:Gem::Version
21
- version: '5'
20
+ version: '7.0'
22
21
  type: :runtime
23
22
  prerelease: false
24
23
  version_requirements: !ruby/object:Gem::Requirement
25
24
  requirements:
26
25
  - - ">="
27
26
  - !ruby/object:Gem::Version
28
- version: '5'
27
+ version: '7.0'
29
28
  - !ruby/object:Gem::Dependency
30
- name: redis
29
+ name: activejob
31
30
  requirement: !ruby/object:Gem::Requirement
32
31
  requirements:
33
32
  - - ">="
34
33
  - !ruby/object:Gem::Version
35
- version: '0'
36
- type: :runtime
37
- prerelease: false
38
- version_requirements: !ruby/object:Gem::Requirement
39
- requirements:
40
- - - ">="
41
- - !ruby/object:Gem::Version
42
- version: '0'
43
- - !ruby/object:Gem::Dependency
44
- name: connection_pool
45
- requirement: !ruby/object:Gem::Requirement
46
- requirements:
47
- - - ">="
48
- - !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
@@ -68,54 +53,6 @@ dependencies:
68
53
  - - ">="
69
54
  - !ruby/object:Gem::Version
70
55
  version: '0'
71
- - !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
- - - "<"
79
- - !ruby/object:Gem::Version
80
- version: '6'
81
- type: :runtime
82
- prerelease: false
83
- version_requirements: !ruby/object:Gem::Requirement
84
- requirements:
85
- - - ">"
86
- - !ruby/object:Gem::Version
87
- version: '4'
88
- - - "<"
89
- - !ruby/object:Gem::Version
90
- version: '6'
91
- - !ruby/object:Gem::Dependency
92
- name: sidekiq-unique-jobs
93
- requirement: !ruby/object:Gem::Requirement
94
- requirements:
95
- - - "~>"
96
- - !ruby/object:Gem::Version
97
- version: '5.0'
98
- type: :runtime
99
- prerelease: false
100
- version_requirements: !ruby/object:Gem::Requirement
101
- requirements:
102
- - - "~>"
103
- - !ruby/object:Gem::Version
104
- version: '5.0'
105
- - !ruby/object:Gem::Dependency
106
- name: tabstabs
107
- requirement: !ruby/object:Gem::Requirement
108
- requirements:
109
- - - ">="
110
- - !ruby/object:Gem::Version
111
- version: '0'
112
- type: :runtime
113
- prerelease: false
114
- version_requirements: !ruby/object:Gem::Requirement
115
- requirements:
116
- - - ">="
117
- - !ruby/object:Gem::Version
118
- version: '0'
119
56
  - !ruby/object:Gem::Dependency
120
57
  name: bundler
121
58
  requirement: !ruby/object:Gem::Requirement
@@ -145,63 +82,49 @@ dependencies:
145
82
  - !ruby/object:Gem::Version
146
83
  version: '0'
147
84
  - !ruby/object:Gem::Dependency
148
- name: rspec
85
+ name: rspec-rails
149
86
  requirement: !ruby/object:Gem::Requirement
150
87
  requirements:
151
88
  - - "~>"
152
89
  - !ruby/object:Gem::Version
153
- version: '3.0'
90
+ version: '7.0'
154
91
  type: :development
155
92
  prerelease: false
156
93
  version_requirements: !ruby/object:Gem::Requirement
157
94
  requirements:
158
95
  - - "~>"
159
96
  - !ruby/object:Gem::Version
160
- version: '3.0'
97
+ version: '7.0'
161
98
  - !ruby/object:Gem::Dependency
162
99
  name: sqlite3
163
100
  requirement: !ruby/object:Gem::Requirement
164
101
  requirements:
165
- - - ">="
102
+ - - "~>"
166
103
  - !ruby/object:Gem::Version
167
- version: '0'
104
+ version: '2.1'
168
105
  type: :development
169
106
  prerelease: false
170
107
  version_requirements: !ruby/object:Gem::Requirement
171
108
  requirements:
172
- - - ">="
109
+ - - "~>"
173
110
  - !ruby/object:Gem::Version
174
- version: '0'
111
+ version: '2.1'
175
112
  - !ruby/object:Gem::Dependency
176
113
  name: database_cleaner
177
114
  requirement: !ruby/object:Gem::Requirement
178
115
  requirements:
179
116
  - - "~>"
180
117
  - !ruby/object:Gem::Version
181
- version: '1.5'
118
+ version: '2.0'
182
119
  type: :development
183
120
  prerelease: false
184
121
  version_requirements: !ruby/object:Gem::Requirement
185
122
  requirements:
186
123
  - - "~>"
187
124
  - !ruby/object:Gem::Version
188
- version: '1.5'
189
- - !ruby/object:Gem::Dependency
190
- name: rspec-sidekiq
191
- requirement: !ruby/object:Gem::Requirement
192
- requirements:
193
- - - ">="
194
- - !ruby/object:Gem::Version
195
- version: '0'
196
- type: :development
197
- prerelease: false
198
- version_requirements: !ruby/object:Gem::Requirement
199
- requirements:
200
- - - ">="
201
- - !ruby/object:Gem::Version
202
- version: '0'
125
+ version: '2.0'
203
126
  - !ruby/object:Gem::Dependency
204
- name: mock_redis
127
+ name: standard
205
128
  requirement: !ruby/object:Gem::Requirement
206
129
  requirements:
207
130
  - - ">="
@@ -214,27 +137,19 @@ dependencies:
214
137
  - - ">="
215
138
  - !ruby/object:Gem::Version
216
139
  version: '0'
217
- description: |2
218
- Æternitas provides means to regularly 'poll' resources (i.e. a website, twitter feed or API) and to permanently
219
- store retrieved results. By default æternitas avoids putting too much load on external servers and stores raw
220
- results as compressed files on disk. It can be configured to a wide variety of polling strategies (e.g. frequencies,
221
- cooldown periods, ignoring exceptions, deactivating resources, ...)."
140
+ description: æternitas is a tool support polling resources (webpages, APIs).
222
141
  email:
223
- - max@kopfueber.org
224
- - michael.prilop@imw.fraunhofer.de
142
+ - prilop@infai.org
225
143
  executables: []
226
144
  extensions: []
227
145
  extra_rdoc_files: []
228
146
  files:
147
+ - ".gitattributes"
148
+ - ".github/workflows/lint.yml"
149
+ - ".github/workflows/tests.yml"
229
150
  - ".gitignore"
230
- - ".idea/.rakeTasks"
231
- - ".idea/misc.xml"
232
- - ".idea/modules.xml"
233
- - ".idea/vcs.xml"
234
- - ".rspec"
235
- - ".rubocop.yml"
236
151
  - ".ruby-version"
237
- - ".travis.yml"
152
+ - CHANGELOG.md
238
153
  - CODE_OF_CONDUCT.md
239
154
  - Gemfile
240
155
  - LICENSE.txt
@@ -244,35 +159,33 @@ files:
244
159
  - bin/console
245
160
  - bin/setup
246
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
247
165
  - lib/aeternitas/errors.rb
248
166
  - lib/aeternitas/guard.rb
167
+ - lib/aeternitas/guard_lock.rb
168
+ - lib/aeternitas/maintenance.rb
169
+ - lib/aeternitas/metric.rb
249
170
  - lib/aeternitas/metrics.rb
250
- - lib/aeternitas/metrics/counter.rb
251
- - lib/aeternitas/metrics/ratio.rb
252
- - lib/aeternitas/metrics/ten_minutes_resolution.rb
253
- - lib/aeternitas/metrics/values.rb
171
+ - lib/aeternitas/poll_job.rb
254
172
  - lib/aeternitas/pollable.rb
255
173
  - lib/aeternitas/pollable/configuration.rb
256
174
  - lib/aeternitas/pollable/dsl.rb
257
175
  - lib/aeternitas/pollable_meta_data.rb
258
176
  - lib/aeternitas/polling_frequency.rb
259
- - lib/aeternitas/sidekiq.rb
260
- - lib/aeternitas/sidekiq/middleware.rb
261
- - lib/aeternitas/sidekiq/poll_job.rb
262
177
  - lib/aeternitas/source.rb
263
178
  - lib/aeternitas/storage_adapter.rb
264
179
  - lib/aeternitas/storage_adapter/file.rb
180
+ - lib/aeternitas/unique_job_lock.rb
265
181
  - lib/aeternitas/version.rb
266
182
  - lib/generators/aeternitas/install_generator.rb
267
183
  - lib/generators/aeternitas/templates/add_aeternitas.rb.erb
268
184
  - lib/generators/aeternitas/templates/initializer.rb
269
- - logo.png
270
- - logo.svg
271
- homepage: https://github.com/FHG-IMW/aeternitas
185
+ homepage: https://github.com/Dietech-Group/aeternitas
272
186
  licenses:
273
187
  - MIT
274
188
  metadata: {}
275
- post_install_message:
276
189
  rdoc_options: []
277
190
  require_paths:
278
191
  - lib
@@ -287,8 +200,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
287
200
  - !ruby/object:Gem::Version
288
201
  version: '0'
289
202
  requirements: []
290
- rubygems_version: 3.0.6
291
- signing_key:
203
+ rubygems_version: 3.6.9
292
204
  specification_version: 4
293
- summary: æternitas - A ruby gem for continuous source retrieval and data integration
205
+ summary: æternitas - version 2
294
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.4.0
7
- - 2.5.7
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