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.
- checksums.yaml +4 -4
- data/.gitattributes +1 -0
- data/.github/workflows/lint.yml +25 -0
- data/.github/workflows/tests.yml +28 -0
- data/.gitignore +2 -5
- data/.ruby-version +1 -1
- data/CHANGELOG.md +35 -0
- data/Gemfile +1 -1
- data/README.md +93 -148
- data/Rakefile +1 -1
- data/aeternitas.gemspec +23 -34
- data/lib/aeternitas/aeternitas_job.rb +7 -0
- data/lib/aeternitas/cleanup_old_metrics_job.rb +12 -0
- data/lib/aeternitas/cleanup_stale_locks_job.rb +12 -0
- data/lib/aeternitas/errors.rb +1 -2
- data/lib/aeternitas/guard.rb +72 -106
- data/lib/aeternitas/guard_lock.rb +19 -0
- data/lib/aeternitas/maintenance.rb +35 -0
- data/lib/aeternitas/metric.rb +12 -0
- data/lib/aeternitas/metrics.rb +54 -136
- data/lib/aeternitas/poll_job.rb +135 -0
- data/lib/aeternitas/pollable/configuration.rb +21 -22
- data/lib/aeternitas/pollable/dsl.rb +16 -17
- data/lib/aeternitas/pollable.rb +19 -18
- data/lib/aeternitas/pollable_meta_data.rb +18 -9
- data/lib/aeternitas/polling_frequency.rb +4 -4
- data/lib/aeternitas/source.rb +5 -5
- data/lib/aeternitas/storage_adapter/file.rb +9 -12
- data/lib/aeternitas/storage_adapter.rb +1 -3
- data/lib/aeternitas/unique_job_lock.rb +15 -0
- data/lib/aeternitas/version.rb +1 -1
- data/lib/aeternitas.rb +23 -26
- data/lib/generators/aeternitas/install_generator.rb +14 -8
- data/lib/generators/aeternitas/templates/add_aeternitas.rb.erb +34 -2
- data/lib/generators/aeternitas/templates/initializer.rb +10 -7
- metadata +35 -123
- data/.idea/.rakeTasks +0 -7
- data/.idea/misc.xml +0 -4
- data/.idea/modules.xml +0 -8
- data/.idea/vcs.xml +0 -6
- data/.rspec +0 -2
- data/.rubocop.yml +0 -2
- data/.travis.yml +0 -8
- data/lib/aeternitas/metrics/counter.rb +0 -18
- data/lib/aeternitas/metrics/ratio.rb +0 -67
- data/lib/aeternitas/metrics/ten_minutes_resolution.rb +0 -40
- data/lib/aeternitas/metrics/values.rb +0 -18
- data/lib/aeternitas/sidekiq/middleware.rb +0 -31
- data/lib/aeternitas/sidekiq/poll_job.rb +0 -30
- data/lib/aeternitas/sidekiq.rb +0 -5
- data/logo.png +0 -0
- data/logo.svg +0 -198
@@ -1,10 +1,13 @@
|
|
1
|
-
#
|
1
|
+
# Aeternitas is configured with sensible defaults. You can override them here if needed.
|
2
2
|
Aeternitas.configure do |config|
|
3
|
-
|
4
|
-
|
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
|
-
|
7
|
-
config.
|
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.
|
4
|
+
version: 2.0.0.rc1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Prilop
|
8
8
|
- Max Kießling
|
9
|
-
-
|
10
|
-
autorequire:
|
9
|
+
- Louis Franzke
|
11
10
|
bindir: exe
|
12
11
|
cert_chain: []
|
13
|
-
date:
|
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: '
|
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: '
|
27
|
+
version: '7.0'
|
29
28
|
- !ruby/object:Gem::Dependency
|
30
|
-
name:
|
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: '
|
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: '
|
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: '
|
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: '
|
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: '
|
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: '
|
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:
|
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:
|
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
|
-
-
|
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
|
-
-
|
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/
|
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
|
-
|
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.
|
291
|
-
signing_key:
|
203
|
+
rubygems_version: 3.6.9
|
292
204
|
specification_version: 4
|
293
|
-
summary: æternitas -
|
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
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
data/.rspec
DELETED
data/.rubocop.yml
DELETED
data/.travis.yml
DELETED
@@ -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
|
data/lib/aeternitas/sidekiq.rb
DELETED
data/logo.png
DELETED
Binary file
|