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.
- checksums.yaml +5 -5
- 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 +41 -124
- 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,59 +1,44 @@
|
|
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
|
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:
|
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:
|
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: :
|
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: '
|
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: '
|
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: '
|
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: '
|
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: '
|
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: '
|
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: '
|
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: '
|
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:
|
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:
|
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
|
-
-
|
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
|
-
-
|
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/
|
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
|
-
|
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
|
-
|
285
|
-
rubygems_version: 2.6.8
|
286
|
-
signing_key:
|
203
|
+
rubygems_version: 3.6.9
|
287
204
|
specification_version: 4
|
288
|
-
summary: æternitas -
|
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
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
|