aeternitas 0.2.0 → 2.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.
Files changed (55) 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 +36 -0
  8. data/CODE_OF_CONDUCT.md +0 -0
  9. data/Gemfile +1 -1
  10. data/LICENSE.txt +0 -0
  11. data/README.md +104 -145
  12. data/Rakefile +1 -1
  13. data/aeternitas.gemspec +23 -34
  14. data/lib/aeternitas/aeternitas_job.rb +7 -0
  15. data/lib/aeternitas/cleanup_old_metrics_job.rb +12 -0
  16. data/lib/aeternitas/cleanup_stale_locks_job.rb +12 -0
  17. data/lib/aeternitas/errors.rb +1 -2
  18. data/lib/aeternitas/guard.rb +76 -109
  19. data/lib/aeternitas/guard_lock.rb +19 -0
  20. data/lib/aeternitas/maintenance.rb +35 -0
  21. data/lib/aeternitas/metric.rb +12 -0
  22. data/lib/aeternitas/metrics.rb +54 -136
  23. data/lib/aeternitas/poll_job.rb +139 -0
  24. data/lib/aeternitas/pollable/configuration.rb +21 -22
  25. data/lib/aeternitas/pollable/dsl.rb +16 -17
  26. data/lib/aeternitas/pollable.rb +19 -18
  27. data/lib/aeternitas/pollable_meta_data.rb +18 -9
  28. data/lib/aeternitas/polling_frequency.rb +4 -4
  29. data/lib/aeternitas/source.rb +5 -5
  30. data/lib/aeternitas/storage_adapter/file.rb +9 -12
  31. data/lib/aeternitas/storage_adapter.rb +1 -3
  32. data/lib/aeternitas/test.rb +13 -0
  33. data/lib/aeternitas/unique_job_lock.rb +15 -0
  34. data/lib/aeternitas/version.rb +1 -1
  35. data/lib/aeternitas.rb +36 -26
  36. data/lib/generators/aeternitas/install_generator.rb +14 -8
  37. data/lib/generators/aeternitas/templates/add_aeternitas.rb.erb +34 -2
  38. data/lib/generators/aeternitas/templates/initializer.rb +10 -7
  39. metadata +39 -123
  40. data/.idea/.rakeTasks +0 -7
  41. data/.idea/misc.xml +0 -4
  42. data/.idea/modules.xml +0 -8
  43. data/.idea/vcs.xml +0 -6
  44. data/.rspec +0 -2
  45. data/.rubocop.yml +0 -2
  46. data/.travis.yml +0 -8
  47. data/lib/aeternitas/metrics/counter.rb +0 -18
  48. data/lib/aeternitas/metrics/ratio.rb +0 -67
  49. data/lib/aeternitas/metrics/ten_minutes_resolution.rb +0 -40
  50. data/lib/aeternitas/metrics/values.rb +0 -18
  51. data/lib/aeternitas/sidekiq/middleware.rb +0 -31
  52. data/lib/aeternitas/sidekiq/poll_job.rb +0 -30
  53. data/lib/aeternitas/sidekiq.rb +0 -5
  54. data/logo.png +0 -0
  55. data/logo.svg +0 -198
@@ -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
data/logo.svg DELETED
@@ -1,198 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
- <!-- Created with Inkscape (http://www.inkscape.org/) -->
3
-
4
- <svg
5
- xmlns:dc="http://purl.org/dc/elements/1.1/"
6
- xmlns:cc="http://creativecommons.org/ns#"
7
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8
- xmlns:svg="http://www.w3.org/2000/svg"
9
- xmlns="http://www.w3.org/2000/svg"
10
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12
- width="210mm"
13
- height="297mm"
14
- viewBox="0 0 210 297"
15
- version="1.1"
16
- id="svg8"
17
- inkscape:version="0.92.1 r"
18
- sodipodi:docname="Zeichnung.svg">
19
- <defs
20
- id="defs2" />
21
- <sodipodi:namedview
22
- id="base"
23
- pagecolor="#ffffff"
24
- bordercolor="#666666"
25
- borderopacity="1.0"
26
- inkscape:pageopacity="0.0"
27
- inkscape:pageshadow="2"
28
- inkscape:zoom="7.9195959"
29
- inkscape:cx="156.46393"
30
- inkscape:cy="658.66545"
31
- inkscape:document-units="mm"
32
- inkscape:current-layer="flowRoot3680"
33
- showgrid="false"
34
- inkscape:window-width="1920"
35
- inkscape:window-height="1141"
36
- inkscape:window-x="1920"
37
- inkscape:window-y="0"
38
- inkscape:window-maximized="1" />
39
- <metadata
40
- id="metadata5">
41
- <rdf:RDF>
42
- <cc:Work
43
- rdf:about="">
44
- <dc:format>image/svg+xml</dc:format>
45
- <dc:type
46
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
47
- <dc:title></dc:title>
48
- </cc:Work>
49
- </rdf:RDF>
50
- </metadata>
51
- <g
52
- inkscape:label="Ebene 1"
53
- inkscape:groupmode="layer"
54
- id="layer1">
55
- <g
56
- aria-label="Æ"
57
- transform="scale(0.26458333)"
58
- style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
59
- id="flowRoot3680">
60
- <path
61
- style="fill:none;stroke:#000000;stroke-width:1.8368504;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
62
- d="m 129.11306,438.19859 c -2.84852,2.31146 -6.97885,4.09709 -11.01739,4.09709 -9.00781,0 -16.31009,-6.94251 -16.31009,-15.50652 0,-8.56401 7.30228,-15.50652 16.31009,-15.50652 2.92238,0 6.18611,0.14673 8.55835,1.42648"
63
- id="path3696"
64
- inkscape:connector-curvature="0"
65
- sodipodi:nodetypes="csssc"
66
- inkscape:export-xdpi="570.17267"
67
- inkscape:export-ydpi="570.17267" />
68
- <path
69
- d="M 136.61211,438.93865 H 121.74883 V 430.091 h -10 l -6.86668,12.96704 h -3.71094 l 16.12449,-32.67408 h 19.31641 v 3.16407 h -11.26953 v 8.90625 h 10.50781 v 3.125 h -10.50781 v 10.19531 h 11.26953 z M 113.13555,426.9074 h 8.61328 v -13.32031 h -2.32422 z"
70
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans';stroke:#000000;fill:#2c89a0;stroke-opacity:1.0"
71
- id="path3688"
72
- inkscape:connector-curvature="0"
73
- sodipodi:nodetypes="cccccccccccccccccccccc"
74
- inkscape:export-xdpi="570.17267"
75
- inkscape:export-ydpi="570.17267" />
76
- <path
77
- style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.8368504;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
78
- d="m 129.302,475.53626 c -2.84852,2.31146 -6.97885,4.09709 -11.01739,4.09709 -9.00781,0 -16.31009,-6.94251 -16.31009,-15.50652 0,-8.56401 7.30228,-15.50652 16.31009,-15.50652 2.92238,0 6.18611,0.14673 8.55835,1.42648"
79
- id="path3696-8"
80
- inkscape:connector-curvature="0"
81
- sodipodi:nodetypes="csssc"
82
- inkscape:export-xdpi="570.17267"
83
- inkscape:export-ydpi="570.17267" />
84
- <path
85
- d="m 136.80105,476.27632 h -14.86328 v -8.84765 h -10 l -6.86668,12.96704 h -3.71094 l 16.12449,-32.67408 h 19.31641 v 3.16407 h -11.26953 v 8.90625 h 10.50781 v 3.125 h -10.50781 v 10.19531 h 11.26953 z m -23.47656,-12.03125 h 8.61328 v -13.32031 h -2.32422 z"
86
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans';letter-spacing:0px;word-spacing:0px;fill:#2c89a0;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0"
87
- id="path3688-0"
88
- inkscape:connector-curvature="0"
89
- sodipodi:nodetypes="cccccccccccccccccccccc"
90
- inkscape:export-xdpi="570.17267"
91
- inkscape:export-ydpi="570.17267" />
92
- <text
93
- xml:space="preserve"
94
- style="font-style:normal;font-weight:normal;font-size:29.65250015px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#2c89a0;fill-opacity:1;stroke:#000000;stroke-width:0.7413125px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0;"
95
- x="134.15927"
96
- y="476.14157"
97
- id="text4524"
98
- inkscape:export-xdpi="570.17267"
99
- inkscape:export-ydpi="570.17267"><tspan
100
- sodipodi:role="line"
101
- id="tspan4522"
102
- x="134.15927"
103
- y="476.14157"
104
- style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans Italic';letter-spacing:0px;stroke-width:0.7413125px;stroke:#000000;fill:#2c89a0;stroke-opacity:1.0;">T</tspan></text>
105
- <text
106
- xml:space="preserve"
107
- style="font-style:normal;font-weight:normal;font-size:29.65250015px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#2c89a0;fill-opacity:1;stroke:#000000;stroke-width:0.7413125px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0;"
108
- x="145.95291"
109
- y="476.13583"
110
- id="text4524-6"
111
- inkscape:export-xdpi="570.17267"
112
- inkscape:export-ydpi="570.17267"><tspan
113
- sodipodi:role="line"
114
- id="tspan4522-5"
115
- x="145.95291"
116
- y="476.13583"
117
- style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans Italic';letter-spacing:0px;fill:#2c89a0;stroke:#000000;stroke-width:0.7413125px;stroke-opacity:1.0;">E</tspan></text>
118
- <text
119
- xml:space="preserve"
120
- style="font-style:normal;font-weight:normal;font-size:29.65250015px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#2c89a0;fill-opacity:1;stroke:#000000;stroke-width:0.7413125px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0;"
121
- x="156.73026"
122
- y="476.13657"
123
- id="text4524-0"
124
- inkscape:export-xdpi="570.17267"
125
- inkscape:export-ydpi="570.17267"><tspan
126
- sodipodi:role="line"
127
- id="tspan4522-8"
128
- x="156.73026"
129
- y="476.13657"
130
- style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans Italic';letter-spacing:0px;fill:#2c89a0;stroke:#000000;stroke-width:0.7413125px;stroke-opacity:1.0;">R</tspan></text>
131
- <text
132
- xml:space="preserve"
133
- style="font-style:normal;font-weight:normal;font-size:29.65250015px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#2c89a0;fill-opacity:1;stroke:#000000;stroke-width:0.7413125px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0;"
134
- x="170.48477"
135
- y="476.12665"
136
- id="text4524-1"
137
- inkscape:export-xdpi="570.17267"
138
- inkscape:export-ydpi="570.17267"><tspan
139
- sodipodi:role="line"
140
- id="tspan4522-2"
141
- x="170.48477"
142
- y="476.12665"
143
- style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans Italic';letter-spacing:0px;fill:#2c89a0;stroke:#000000;stroke-width:0.7413125px;stroke-opacity:1.0;">N</tspan></text>
144
- <text
145
- xml:space="preserve"
146
- style="font-style:normal;font-weight:normal;font-size:29.65250015px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#2c89a0;fill-opacity:1;stroke:#000000;stroke-width:0.7413125px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0;"
147
- x="187.77988"
148
- y="476.1207"
149
- id="text4524-2"
150
- inkscape:export-xdpi="570.17267"
151
- inkscape:export-ydpi="570.17267"><tspan
152
- sodipodi:role="line"
153
- id="tspan4522-6"
154
- x="187.77988"
155
- y="476.1207"
156
- style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans Italic';letter-spacing:0px;fill:#2c89a0;stroke:#000000;stroke-width:0.7413125px;stroke-opacity:1.0;">I</tspan></text>
157
- <text
158
- xml:space="preserve"
159
- style="font-style:normal;font-weight:normal;font-size:29.65250015px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#2c89a0;fill-opacity:1;stroke:#000000;stroke-width:0.7413125px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0;"
160
- x="195.93016"
161
- y="476.12857"
162
- id="text4524-9"
163
- inkscape:export-xdpi="570.17267"
164
- inkscape:export-ydpi="570.17267"><tspan
165
- sodipodi:role="line"
166
- id="tspan4522-1"
167
- x="195.93016"
168
- y="476.12857"
169
- style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans Italic';letter-spacing:0px;fill:#2c89a0;stroke:#000000;stroke-width:0.7413125px;stroke-opacity:1.0;">T</tspan></text>
170
- <text
171
- xml:space="preserve"
172
- style="font-style:normal;font-weight:normal;font-size:29.65250015px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#2c89a0;fill-opacity:1;stroke:#000000;stroke-width:0.7413125px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0;"
173
- x="204.82211"
174
- y="476.12311"
175
- id="text4524-04"
176
- inkscape:export-xdpi="570.17267"
177
- inkscape:export-ydpi="570.17267"><tspan
178
- sodipodi:role="line"
179
- id="tspan4522-27"
180
- x="204.82211"
181
- y="476.12311"
182
- style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans Italic';letter-spacing:0px;fill:#2c89a0;stroke:#000000;stroke-width:0.7413125px;stroke-opacity:1.0;">A</tspan></text>
183
- <text
184
- xml:space="preserve"
185
- style="font-style:normal;font-weight:normal;font-size:29.65250015px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#2c89a0;fill-opacity:1;stroke:#000000;stroke-width:0.7413125px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0;"
186
- x="219.43689"
187
- y="475.82886"
188
- id="text4524-4"
189
- inkscape:export-xdpi="570.17267"
190
- inkscape:export-ydpi="570.17267"><tspan
191
- sodipodi:role="line"
192
- id="tspan4522-0"
193
- x="219.43689"
194
- y="475.82886"
195
- style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans Italic';letter-spacing:0px;fill:#2c89a0;stroke:#000000;stroke-width:0.7413125px;stroke-opacity:1.0;">S</tspan></text>
196
- </g>
197
- </g>
198
- </svg>