puma-plugin-systemd 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bd5ff4b0b09929445d331d471da6f247198a3b3f68e6eccfb80dd0ad75c8005a
4
- data.tar.gz: 832f7943aa667f7052cc9fe696c8031686431c1c98a69ac2a260a3d74d6d02fa
3
+ metadata.gz: 331bad09b8a7f0e62675cd82edb25ac4154f062aa68c0a0d8281018ba276dd8b
4
+ data.tar.gz: 81e80990542efce424e76f4155a7bb4e416d63036163ac6b33aebbe88f20adc1
5
5
  SHA512:
6
- metadata.gz: 12a0453ea9359d9e86d9eaf66a23408987350e697fb0189ad77d7915695a76e69b093654e9e2449cd869f54362171d041460ae383c1969dcac05960c268b6483
7
- data.tar.gz: 8e9dc648216bbdad13386fbf25928dd54b240036e99b3a853a4a7cf6461243431405467f533c8b5ee3393e3e8484d8301d58717e9d90ea5596552b7e130be3c4
6
+ metadata.gz: c38c6cc61c8695eaa7b28406899d95c75e1a65a4754f98a947948e87ea3329544c303defd99eba30263e896e3f2712524e2bec0730ce159cddf16216715540fc
7
+ data.tar.gz: d3991a2398c378bfe02eb49a6e813180998d609a14d929d48a69cda5f2ba5732f120909b08ff287a8a373dc3a33503e45f93a6e2f4a6515ccba505027dc8898f
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -10,7 +10,115 @@ require "puma/plugin"
10
10
  # you know when your system has *actually* started and is ready to take
11
11
  # requests.
12
12
  #
13
- Puma::Plugin.create do
13
+ class Puma::Plugin::Systemd
14
+ Puma::Plugins.register("systemd", self)
15
+
16
+ # Puma creates the plugin when encountering `plugin` in the config.
17
+ def initialize(loader)
18
+ # This is a Puma::PluginLoader
19
+ @loader = loader
20
+ end
21
+
22
+ # We can start doing something when we have a launcher:
23
+ def start(launcher)
24
+ @launcher = launcher
25
+
26
+ # Log relevant ENV in debug
27
+ @launcher.events.debug "systemd: NOTIFY_SOCKET=#{ENV["NOTIFY_SOCKET"].inspect}"
28
+ @launcher.events.debug "systemd: WATCHDOG_PID=#{ENV["WATCHDOG_PID"].inspect}"
29
+ @launcher.events.debug "systemd: WATCHDOG_USEC=#{ENV["WATCHDOG_USEC"].inspect}"
30
+
31
+ # Only install hooks if systemd is present, the systemd is booted by
32
+ # systemd, and systemd has asked us to notify it of events.
33
+ @systemd = Systemd.new
34
+ if @systemd.present? && @systemd.booted? && @systemd.notify?
35
+ @launcher.events.debug "systemd: detected running inside systemd, registering hooks"
36
+ register_hooks
37
+ else
38
+ @launcher.events.debug "systemd: not running within systemd, doing nothing"
39
+ end
40
+ end
41
+
42
+ private
43
+
44
+ # Are we a single process worker, or do we have worker processes?
45
+ #
46
+ # Copied from puma, it's private:
47
+ # https://github.com/puma/puma/blob/v3.6.0/lib/puma/launcher.rb#L267-L269
48
+ #
49
+ def clustered?
50
+ (@launcher.options[:workers] || 0) > 0
51
+ end
52
+
53
+ def register_hooks
54
+ (@launcher.config.options[:on_restart] ||= []) << method(:restart)
55
+ @launcher.events.on_booted(&method(:booted))
56
+ in_background(&method(:status_loop))
57
+ in_background(&method(:watchdog_loop)) if @systemd.watchdog?
58
+ end
59
+
60
+ def booted
61
+ @launcher.events.log "* systemd: notify ready"
62
+ begin
63
+ @systemd.notify_ready
64
+ rescue
65
+ @launcher.events.error "! systemd: notify ready failed:\n #{$!.to_s}\n #{$!.backtrace.join("\n ")}"
66
+ end
67
+ end
68
+
69
+ def restart(launcher)
70
+ @launcher.events.log "* systemd: notify reloading"
71
+ begin
72
+ @systemd.notify_reloading
73
+ rescue
74
+ @launcher.events.error "! systemd: notify reloading failed:\n #{$!.to_s}\n #{$!.backtrace.join("\n ")}"
75
+ end
76
+ end
77
+
78
+ def fetch_stats
79
+ JSON.parse(@launcher.stats)
80
+ end
81
+
82
+ def status
83
+ Status.new(fetch_stats)
84
+ end
85
+
86
+ # Update systemd status event second or so
87
+ def status_loop
88
+ loop do
89
+ @launcher.events.debug "systemd: notify status"
90
+ begin
91
+ @systemd.notify_status(status.to_s)
92
+ rescue
93
+ @launcher.events.error "! systemd: notify status failed:\n #{$!.to_s}\n #{$!.backtrace.join("\n ")}"
94
+ ensure
95
+ sleep 1
96
+ end
97
+ end
98
+ end
99
+
100
+ # If watchdog is configured we'll send a ping at about half the timeout
101
+ # configured in systemd as recommended in the docs.
102
+ def watchdog_loop
103
+ @launcher.events.log "* systemd: watchdog detected (#{@systemd.watchdog_usec}usec)"
104
+
105
+ # Ruby wants seconds, and the docs suggest notifying halfway through the
106
+ # timeout.
107
+ sleep_seconds = @systemd.watchdog_usec / 1000.0 / 1000.0 / 2.0
108
+
109
+ loop do
110
+ begin
111
+ @launcher.events.debug "systemd: notify watchdog"
112
+ @systemd.notify_watchdog
113
+ rescue
114
+ @launcher.events.error "! systemd: notify watchdog failed:\n #{$!.to_s}\n #{$!.backtrace.join("\n ")}"
115
+ ensure
116
+ @launcher.events.debug "systemd: sleeping #{sleep_seconds}s"
117
+ sleep sleep_seconds
118
+ end
119
+ end
120
+ end
121
+
14
122
  # Give us a way to talk to systemd.
15
123
  #
16
124
  # It'd be great to use systemd-notify for the whole shebang, but there's a
@@ -160,110 +268,4 @@ Puma::Plugin.create do
160
268
  end
161
269
  end
162
270
  end
163
-
164
- # Puma creates the plugin when encountering `plugin` in the config.
165
- def initialize(loader)
166
- # This is a Puma::PluginLoader
167
- @loader = loader
168
- end
169
-
170
- # We can start doing something when we have a launcher:
171
- def start(launcher)
172
- @launcher = launcher
173
-
174
- # Log relevant ENV in debug
175
- @launcher.events.debug "systemd: NOTIFY_SOCKET=#{ENV["NOTIFY_SOCKET"].inspect}"
176
- @launcher.events.debug "systemd: WATCHDOG_PID=#{ENV["WATCHDOG_PID"].inspect}"
177
- @launcher.events.debug "systemd: WATCHDOG_USEC=#{ENV["WATCHDOG_USEC"].inspect}"
178
-
179
- # Only install hooks if systemd is present, the systemd is booted by
180
- # systemd, and systemd has asked us to notify it of events.
181
- @systemd = Systemd.new
182
- if @systemd.present? && @systemd.booted? && @systemd.notify?
183
- @launcher.events.debug "systemd: detected running inside systemd, registering hooks"
184
- register_hooks
185
- else
186
- @launcher.events.debug "systemd: not running within systemd, doing nothing"
187
- end
188
- end
189
-
190
- private
191
-
192
- # Are we a single process worker, or do we have worker processes?
193
- #
194
- # Copied from puma, it's private:
195
- # https://github.com/puma/puma/blob/v3.6.0/lib/puma/launcher.rb#L267-L269
196
- #
197
- def clustered?
198
- (@launcher.options[:workers] || 0) > 0
199
- end
200
-
201
- def register_hooks
202
- (@launcher.config.options[:on_restart] ||= []) << method(:restart)
203
- @launcher.events.on_booted(&method(:booted))
204
- in_background(&method(:status_loop))
205
- in_background(&method(:watchdog_loop)) if @systemd.watchdog?
206
- end
207
-
208
- def booted
209
- @launcher.events.log "* systemd: notify ready"
210
- begin
211
- @systemd.notify_ready
212
- rescue
213
- @launcher.events.error "! systemd: notify ready failed:\n #{$!.to_s}\n #{$!.backtrace.join("\n ")}"
214
- end
215
- end
216
-
217
- def restart(launcher)
218
- @launcher.events.log "* systemd: notify reloading"
219
- begin
220
- @systemd.notify_reloading
221
- rescue
222
- @launcher.events.error "! systemd: notify reloading failed:\n #{$!.to_s}\n #{$!.backtrace.join("\n ")}"
223
- end
224
- end
225
-
226
- def fetch_stats
227
- JSON.parse(@launcher.stats)
228
- end
229
-
230
- def status
231
- Status.new(fetch_stats)
232
- end
233
-
234
- # Update systemd status event second or so
235
- def status_loop
236
- loop do
237
- @launcher.events.debug "systemd: notify status"
238
- begin
239
- @systemd.notify_status(status.to_s)
240
- rescue
241
- @launcher.events.error "! systemd: notify status failed:\n #{$!.to_s}\n #{$!.backtrace.join("\n ")}"
242
- ensure
243
- sleep 1
244
- end
245
- end
246
- end
247
-
248
- # If watchdog is configured we'll send a ping at about half the timeout
249
- # configured in systemd as recommended in the docs.
250
- def watchdog_loop
251
- @launcher.events.log "* systemd: watchdog detected (#{@systemd.watchdog_usec}usec)"
252
-
253
- # Ruby wants seconds, and the docs suggest notifying halfway through the
254
- # timeout.
255
- sleep_seconds = @systemd.watchdog_usec / 1000.0 / 1000.0 / 2.0
256
-
257
- loop do
258
- begin
259
- @launcher.events.debug "systemd: notify watchdog"
260
- @systemd.notify_watchdog
261
- rescue
262
- @launcher.events.error "! systemd: notify watchdog failed:\n #{$!.to_s}\n #{$!.backtrace.join("\n ")}"
263
- ensure
264
- @launcher.events.debug "systemd: sleeping #{sleep_seconds}s"
265
- sleep sleep_seconds
266
- end
267
- end
268
- end
269
271
  end
metadata CHANGED
@@ -1,11 +1,11 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: puma-plugin-systemd
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Cochran
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain:
11
11
  - |
@@ -28,22 +28,28 @@ cert_chain:
28
28
  cTRkS42ilkarelc4DnSSO5jw7qFq7Cmf6F9hMx3xdoSWpLf+FvXJRbYrqwZIsmME
29
29
  V8zEtJFhdNOFOdtcTE67qh/aYQe2y/LDnG9ywXHWdSeF4UUjg1WRt8s3OP8=
30
30
  -----END CERTIFICATE-----
31
- date: 2020-04-06 00:00:00.000000000 Z
31
+ date: 2020-08-28 00:00:00.000000000 Z
32
32
  dependencies:
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: puma
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
- - - "~>"
37
+ - - ">="
38
38
  - !ruby/object:Gem::Version
39
39
  version: '3.6'
40
+ - - "<"
41
+ - !ruby/object:Gem::Version
42
+ version: '5'
40
43
  type: :runtime
41
44
  prerelease: false
42
45
  version_requirements: !ruby/object:Gem::Requirement
43
46
  requirements:
44
- - - "~>"
47
+ - - ">="
45
48
  - !ruby/object:Gem::Version
46
49
  version: '3.6'
50
+ - - "<"
51
+ - !ruby/object:Gem::Version
52
+ version: '5'
47
53
  - !ruby/object:Gem::Dependency
48
54
  name: json
49
55
  requirement: !ruby/object:Gem::Requirement
@@ -100,7 +106,7 @@ dependencies:
100
106
  - - "~>"
101
107
  - !ruby/object:Gem::Version
102
108
  version: '5.0'
103
- description:
109
+ description:
104
110
  email: sj26@sj26.com
105
111
  executables: []
106
112
  extensions: []
@@ -113,7 +119,7 @@ homepage: https://github.com/sj26/puma-plugin-systemd
113
119
  licenses:
114
120
  - MIT
115
121
  metadata: {}
116
- post_install_message:
122
+ post_install_message:
117
123
  rdoc_options: []
118
124
  require_paths:
119
125
  - lib
@@ -128,8 +134,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
128
134
  - !ruby/object:Gem::Version
129
135
  version: '0'
130
136
  requirements: []
131
- rubygems_version: 3.0.6
132
- signing_key:
137
+ rubygems_version: 3.1.4
138
+ signing_key:
133
139
  specification_version: 4
134
140
  summary: 'Puma integration with systemd: notify, status, watchdog'
135
141
  test_files: []
metadata.gz.sig CHANGED
@@ -1 +1,3 @@
1
- @��6IGH:*m���T!��3"9 }G[ā&m.�'k�@R��\$J-���UlP��3� �i��pO���L�G.~+�;�d�>��B��ۨ�g5?
1
+ C]U)]]r$Pɹ���
2
+ �B@
3
+ �F`{�zM�J��&I��]�m�K햜�S��f)A��Iu��9|�i�j��N�I