processwanker 0.0.12 → 0.0.13
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/Manifest +1 -0
- data/Rakefile +1 -1
- data/bin/pw +0 -0
- data/lib/config/config_node.rb +17 -17
- data/lib/service.rb +113 -86
- data/processwanker.gemspec +9 -13
- metadata +4 -31
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -2
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bdbff70c0aafb84b989efd3b5fa877353c92914ec98b4c2dead92f3b491e68bd
|
4
|
+
data.tar.gz: 7f3f5fc365fd1abef1d240889a8dbf476cce1d55cefd73a24956e6007a070511
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b86a12d0cc175c254b4e7c035edd0586ee8ed4c8702e8595160b4d84439537a31087bbb2a9af82212a9691f9948e874910e36756a67895879b6e746b9b3706c8
|
7
|
+
data.tar.gz: 9cb0bbdd3aaaf74fa0b622838de5d80f94783d4f2b460e3718c35f9c7d0a296c69ea9298a4e0d9b4b494f36f05a5c03fa136ddd5de02823f0dfc1ea042d2c1ad
|
data/Manifest
CHANGED
data/Rakefile
CHANGED
@@ -2,7 +2,7 @@ require 'rubygems'
|
|
2
2
|
require 'rake'
|
3
3
|
require 'echoe'
|
4
4
|
|
5
|
-
Echoe.new('processwanker', '0.0.
|
5
|
+
Echoe.new('processwanker', '0.0.13') do |p|
|
6
6
|
p.description = "Process monitoring and remote control system"
|
7
7
|
p.url = "https://github.com/strags/processwanker"
|
8
8
|
p.author = "Ben Stragnell"
|
data/bin/pw
CHANGED
File without changes
|
data/lib/config/config_node.rb
CHANGED
@@ -25,7 +25,7 @@ module ProcessWanker
|
|
25
25
|
# walk from the current object up to the root, looking for the named attribute
|
26
26
|
#
|
27
27
|
############################################################################
|
28
|
-
|
28
|
+
|
29
29
|
def find_attributes(name)
|
30
30
|
r=[]
|
31
31
|
p=self
|
@@ -44,7 +44,7 @@ module ProcessWanker
|
|
44
44
|
def get_auth()
|
45
45
|
find_attributes("auth").first
|
46
46
|
end
|
47
|
-
|
47
|
+
|
48
48
|
end
|
49
49
|
|
50
50
|
############################################################################
|
@@ -62,7 +62,7 @@ module ProcessWanker
|
|
62
62
|
############################################################################
|
63
63
|
|
64
64
|
class Deferred
|
65
|
-
|
65
|
+
|
66
66
|
def initialize(deferred_container,deferred_args,deferred_block,deferred_builder)
|
67
67
|
@deferred_container=deferred_container
|
68
68
|
@deferred_args=deferred_args
|
@@ -70,7 +70,7 @@ module ProcessWanker
|
|
70
70
|
@deferred_builder=deferred_builder
|
71
71
|
@deferred_object=nil
|
72
72
|
end
|
73
|
-
|
73
|
+
|
74
74
|
def method_missing(name,*args)
|
75
75
|
if(!@deferred_object)
|
76
76
|
@deferred_object=@deferred_builder.new.build(
|
@@ -80,9 +80,9 @@ module ProcessWanker
|
|
80
80
|
end
|
81
81
|
@deferred_object.send(name,*args)
|
82
82
|
end
|
83
|
-
|
83
|
+
|
84
84
|
end
|
85
|
-
|
85
|
+
|
86
86
|
############################################################################
|
87
87
|
#
|
88
88
|
#
|
@@ -97,16 +97,16 @@ module ProcessWanker
|
|
97
97
|
instance_eval(&block) if(block)
|
98
98
|
@config
|
99
99
|
end
|
100
|
-
|
100
|
+
|
101
101
|
def klass
|
102
|
-
cn=self.class.name
|
102
|
+
cn=self.class.name + ""
|
103
103
|
cn.gsub!("Builder","")
|
104
104
|
cn=cn.split("::")[-1]
|
105
105
|
ProcessWanker::const_get(cn)
|
106
106
|
end
|
107
|
-
|
107
|
+
|
108
108
|
end
|
109
|
-
|
109
|
+
|
110
110
|
############################################################################
|
111
111
|
#
|
112
112
|
#
|
@@ -118,17 +118,17 @@ module ProcessWanker
|
|
118
118
|
require 'erb'
|
119
119
|
|
120
120
|
@@config_path=ENV["PW_CFG"] || "/etc/pw/pw.cfg"
|
121
|
-
|
121
|
+
|
122
122
|
def get_config_path()
|
123
123
|
@@config_path
|
124
124
|
end
|
125
125
|
module_function :get_config_path
|
126
|
-
|
126
|
+
|
127
127
|
def set_config_path(path)
|
128
128
|
@@config_path=path
|
129
129
|
end
|
130
130
|
module_function :set_config_path
|
131
|
-
|
131
|
+
|
132
132
|
def load_config(path)
|
133
133
|
ProcessWanker::loaded_config=nil
|
134
134
|
# load(path)
|
@@ -137,9 +137,9 @@ module ProcessWanker
|
|
137
137
|
ProcessWanker::loaded_config
|
138
138
|
end
|
139
139
|
module_function :load_config
|
140
|
-
|
140
|
+
|
141
141
|
end
|
142
|
-
|
142
|
+
|
143
143
|
|
144
144
|
############################################################################
|
145
145
|
#
|
@@ -155,6 +155,6 @@ module ProcessWanker
|
|
155
155
|
@loaded_config=ConfigurationBuilder.new.build(nil,[],block)
|
156
156
|
end
|
157
157
|
module_function :config
|
158
|
-
|
159
|
-
|
158
|
+
|
159
|
+
|
160
160
|
end
|
data/lib/service.rb
CHANGED
@@ -11,17 +11,17 @@ require 'log'
|
|
11
11
|
require 'events'
|
12
12
|
|
13
13
|
module ProcessWanker
|
14
|
-
|
14
|
+
|
15
15
|
class Service
|
16
|
-
|
16
|
+
|
17
17
|
include Log
|
18
|
-
|
18
|
+
|
19
19
|
############################################################################
|
20
20
|
#
|
21
21
|
# current state
|
22
22
|
#
|
23
23
|
############################################################################
|
24
|
-
|
24
|
+
|
25
25
|
attr_accessor :params
|
26
26
|
attr_accessor :want_state
|
27
27
|
attr_accessor :last_action_time
|
@@ -37,7 +37,7 @@ module ProcessWanker
|
|
37
37
|
attr_accessor :config_node
|
38
38
|
attr_accessor :want_state_mode
|
39
39
|
attr_accessor :stable
|
40
|
-
|
40
|
+
|
41
41
|
############################################################################
|
42
42
|
#
|
43
43
|
# initialize
|
@@ -55,11 +55,13 @@ module ProcessWanker
|
|
55
55
|
# :fail_trigger_count number of transitions to trigger failing
|
56
56
|
# :fail_suppress_secs seconds to delay actions after failing detected
|
57
57
|
# :initial_state (defaults to current state) :up or :down
|
58
|
+
# :watchdog_file file to watch for mtime
|
59
|
+
# :watchdog_timeout_secs restart service if watchdog_file hasn't been modified in this number of seconds
|
58
60
|
#
|
59
61
|
############################################################################
|
60
|
-
|
62
|
+
|
61
63
|
def initialize(iparams)
|
62
|
-
|
64
|
+
|
63
65
|
# extract params
|
64
66
|
extract_params(
|
65
67
|
iparams,
|
@@ -76,13 +78,15 @@ module ProcessWanker
|
|
76
78
|
:initial_state,
|
77
79
|
:dependencies,
|
78
80
|
:log_file,
|
81
|
+
:watchdog_file,
|
82
|
+
:watchdog_timeout_secs
|
79
83
|
])
|
80
84
|
|
81
85
|
# warn about extra params
|
82
86
|
iparams.keys.each do |k|
|
83
87
|
warn "warning: ignoring unrecognized parameter: #{k.to_s}"
|
84
88
|
end
|
85
|
-
|
89
|
+
|
86
90
|
# apply defaults
|
87
91
|
@params={
|
88
92
|
:min_action_delay_secs => 1,
|
@@ -92,11 +96,11 @@ module ProcessWanker
|
|
92
96
|
:group_name => "default",
|
93
97
|
:start_grace_secs => 5,
|
94
98
|
:stop_grace_secs => 5,
|
95
|
-
:dependencies => []
|
99
|
+
:dependencies => [],
|
96
100
|
}.merge(@params)
|
97
|
-
|
98
|
-
@params[:tags] ||= []
|
99
|
-
|
101
|
+
|
102
|
+
@params[:tags] ||= []
|
103
|
+
|
100
104
|
# convert necessary things to symbols
|
101
105
|
@params[:initial_state] = @params[:initial_state].to_sym if(@params[:initial_state])
|
102
106
|
|
@@ -113,11 +117,11 @@ module ProcessWanker
|
|
113
117
|
@suppress=false
|
114
118
|
@want_state_mode=:boot
|
115
119
|
@stable=false
|
116
|
-
|
120
|
+
|
117
121
|
# register with the manager
|
118
122
|
ServiceMgr::register_service(self)
|
119
123
|
end
|
120
|
-
|
124
|
+
|
121
125
|
############################################################################
|
122
126
|
#
|
123
127
|
#
|
@@ -132,7 +136,7 @@ module ProcessWanker
|
|
132
136
|
end
|
133
137
|
end
|
134
138
|
end
|
135
|
-
|
139
|
+
|
136
140
|
############################################################################
|
137
141
|
#
|
138
142
|
#
|
@@ -146,70 +150,70 @@ module ProcessWanker
|
|
146
150
|
params.delete(k)
|
147
151
|
end
|
148
152
|
end
|
149
|
-
|
153
|
+
|
150
154
|
############################################################################
|
151
155
|
#
|
152
156
|
# return the host-wide unique name of the service
|
153
157
|
#
|
154
158
|
############################################################################
|
155
|
-
|
159
|
+
|
156
160
|
def name
|
157
161
|
@params[:name]
|
158
|
-
end
|
159
|
-
|
162
|
+
end
|
163
|
+
|
160
164
|
############################################################################
|
161
165
|
#
|
162
166
|
# return the name of the group this process belongs to
|
163
167
|
#
|
164
168
|
############################################################################
|
165
|
-
|
169
|
+
|
166
170
|
def group_name
|
167
171
|
@params[:group_name]
|
168
|
-
end
|
169
|
-
|
172
|
+
end
|
173
|
+
|
170
174
|
############################################################################
|
171
175
|
#
|
172
176
|
# start the service. should not block for a considerable amount of time
|
173
177
|
#
|
174
178
|
############################################################################
|
175
|
-
|
179
|
+
|
176
180
|
def do_start(attempt_ct)
|
177
181
|
raise "method not defined in base class"
|
178
182
|
end
|
179
|
-
|
183
|
+
|
180
184
|
############################################################################
|
181
185
|
#
|
182
186
|
# stop the service - should not block for a considerable amount of time
|
183
187
|
#
|
184
188
|
############################################################################
|
185
|
-
|
189
|
+
|
186
190
|
def do_stop(attempt_ct)
|
187
191
|
raise "method not defined in base class"
|
188
192
|
end
|
189
|
-
|
193
|
+
|
190
194
|
############################################################################
|
191
195
|
#
|
192
196
|
# return state (:up, :down)
|
193
197
|
#
|
194
198
|
############################################################################
|
195
|
-
|
199
|
+
|
196
200
|
def do_ping
|
197
201
|
raise "method not defined in base class"
|
198
202
|
end
|
199
|
-
|
203
|
+
|
200
204
|
############################################################################
|
201
205
|
#
|
202
206
|
# resolve dependencies through name lookup
|
203
207
|
#
|
204
208
|
############################################################################
|
205
|
-
|
209
|
+
|
206
210
|
def resolve_dependencies
|
207
|
-
|
211
|
+
|
208
212
|
@dependencies=[]
|
209
213
|
params[:dependencies].each do |dep|
|
210
214
|
ServiceMgr::instance.match_services(dep.service).each do |k,v|
|
211
215
|
@dependencies << { :service => v, :dep => dep }
|
212
|
-
end
|
216
|
+
end
|
213
217
|
end
|
214
218
|
end
|
215
219
|
|
@@ -218,13 +222,13 @@ module ProcessWanker
|
|
218
222
|
# safe, exception-catching methods
|
219
223
|
#
|
220
224
|
############################################################################
|
221
|
-
|
225
|
+
|
222
226
|
def safe_do(name)
|
223
227
|
ProcessWanker::with_logged_rescue("#{name} - safe_do") do
|
224
228
|
yield
|
225
229
|
end
|
226
230
|
end
|
227
|
-
|
231
|
+
|
228
232
|
def safe_do_start(attempt_ct)
|
229
233
|
safe_do("#{name}:do_start") { do_start(attempt_ct) }
|
230
234
|
end
|
@@ -232,31 +236,31 @@ module ProcessWanker
|
|
232
236
|
def safe_do_stop(attempt_ct)
|
233
237
|
safe_do("#{name}:do_start") { do_stop(attempt_ct) }
|
234
238
|
end
|
235
|
-
|
239
|
+
|
236
240
|
def safe_do_ping()
|
237
241
|
p=:down
|
238
242
|
safe_do("#{name}:do_start") { p=do_ping }
|
239
243
|
p
|
240
244
|
end
|
241
|
-
|
245
|
+
|
242
246
|
############################################################################
|
243
247
|
#
|
244
248
|
# main logic
|
245
249
|
#
|
246
250
|
############################################################################
|
247
|
-
|
251
|
+
|
248
252
|
def tick
|
249
|
-
|
253
|
+
|
250
254
|
#
|
251
255
|
# get current time
|
252
256
|
#
|
253
|
-
|
257
|
+
|
254
258
|
now=Time.now
|
255
|
-
|
259
|
+
|
256
260
|
#
|
257
261
|
# get current state, check for change, record transition time
|
258
262
|
#
|
259
|
-
|
263
|
+
|
260
264
|
state = safe_do_ping()
|
261
265
|
if(@current_state != state)
|
262
266
|
@prev_state = @current_state
|
@@ -265,11 +269,11 @@ module ProcessWanker
|
|
265
269
|
@stable = false
|
266
270
|
@show_state = state.to_s
|
267
271
|
end
|
268
|
-
|
272
|
+
|
269
273
|
#
|
270
274
|
# handle special :restart case
|
271
275
|
#
|
272
|
-
|
276
|
+
|
273
277
|
want=@want_state
|
274
278
|
if(want == :restart)
|
275
279
|
if(@current_state == :down)
|
@@ -280,11 +284,11 @@ module ProcessWanker
|
|
280
284
|
want = :down
|
281
285
|
end
|
282
286
|
end
|
283
|
-
|
287
|
+
|
284
288
|
#
|
285
289
|
# check dependencies
|
286
|
-
#
|
287
|
-
|
290
|
+
#
|
291
|
+
|
288
292
|
deps_ok=true
|
289
293
|
@dependencies.each do |d|
|
290
294
|
s=d[:service]
|
@@ -301,24 +305,47 @@ module ProcessWanker
|
|
301
305
|
if(@suppress)
|
302
306
|
want = :down
|
303
307
|
end
|
304
|
-
|
308
|
+
|
305
309
|
#
|
306
310
|
# have we been in the same state for a while?
|
307
311
|
#
|
308
|
-
|
312
|
+
|
309
313
|
stabilized=false
|
310
314
|
elapsed = now - @last_transition_time
|
311
315
|
if(!@stable && elapsed >= @params[:stable_secs])
|
312
316
|
stabilized=true
|
313
317
|
@stable=true
|
314
318
|
end
|
315
|
-
|
319
|
+
|
320
|
+
#
|
321
|
+
# if we're up and stable, check watchdog timer
|
322
|
+
#
|
323
|
+
|
324
|
+
if(@stable && @current_state == :up && want == :up)
|
325
|
+
if(@params[:watchdog_file] && @params[:watchdog_timeout_secs])
|
326
|
+
timeout=true
|
327
|
+
begin
|
328
|
+
st = File.stat(@params[:watchdog_file])
|
329
|
+
if((now - st.mtime) < @params[:watchdog_timeout_secs])
|
330
|
+
timeout=false
|
331
|
+
end
|
332
|
+
rescue Exception => e
|
333
|
+
end
|
334
|
+
if(timeout)
|
335
|
+
info("#{self.name}: watchdog file: #{@params[:watchdog_file]} has timed out")
|
336
|
+
Event.dispatch("watchdog_timeout",self)
|
337
|
+
@want_state = :restart
|
338
|
+
want = :down
|
339
|
+
end
|
340
|
+
end
|
341
|
+
end
|
342
|
+
|
316
343
|
#
|
317
344
|
# are we in the desired state?
|
318
345
|
#
|
319
|
-
|
346
|
+
|
320
347
|
if(@current_state == want)
|
321
|
-
|
348
|
+
|
322
349
|
# did we just stabilize?
|
323
350
|
if(stabilized)
|
324
351
|
|
@@ -333,40 +360,40 @@ module ProcessWanker
|
|
333
360
|
# clear request mode
|
334
361
|
@want_state_mode=:none
|
335
362
|
end
|
336
|
-
|
363
|
+
|
337
364
|
# nothing more to do
|
338
365
|
return
|
339
366
|
end
|
340
|
-
|
367
|
+
|
341
368
|
#
|
342
369
|
# are we ignoring the process?
|
343
370
|
#
|
344
|
-
|
371
|
+
|
345
372
|
if(want == :ignore)
|
346
373
|
@show_state = "#{@current_state.to_s} (ignored)"
|
347
374
|
return
|
348
375
|
end
|
349
|
-
|
376
|
+
|
350
377
|
#
|
351
378
|
# is it too soon to do anything?
|
352
379
|
#
|
353
380
|
|
354
381
|
proposed_action = { :up => :start , :down => :stop }[want]
|
355
382
|
return if(!check_action_delay(now,proposed_action))
|
356
|
-
|
383
|
+
|
357
384
|
#
|
358
385
|
# actually attempt to cause a change
|
359
386
|
#
|
360
|
-
|
387
|
+
|
361
388
|
# update state
|
362
389
|
@attempt_count=0 if(proposed_action != @last_action)
|
363
390
|
@last_action=proposed_action
|
364
391
|
@last_action_time=now
|
365
|
-
|
392
|
+
|
366
393
|
# check for failing
|
367
394
|
if(@attempt_count >= @params[:fail_trigger_count])
|
368
395
|
info("#{self.name} has now had #{@attempt_count} attempts. considering it failed.")
|
369
|
-
|
396
|
+
|
370
397
|
@show_state = "failing(#{proposed_action})"
|
371
398
|
@last_fail_time = now
|
372
399
|
@attempt_count = 0 # reset for next time
|
@@ -380,61 +407,61 @@ module ProcessWanker
|
|
380
407
|
if(@want_state_mode == :none && proposed_action == :start && @attempt_count==0)
|
381
408
|
Event::dispatch("restarting",self)
|
382
409
|
end
|
383
|
-
|
410
|
+
|
384
411
|
# do it
|
385
412
|
@show_state = "#{proposed_action} [#{@attempt_count}]"
|
386
413
|
if(proposed_action == :start)
|
387
414
|
|
388
415
|
Event::dispatch("pre-launch",self)
|
389
|
-
|
416
|
+
|
390
417
|
info("calling do_start for #{self.name}")
|
391
418
|
safe_do_start(@attempt_count)
|
392
|
-
|
419
|
+
|
393
420
|
else
|
394
|
-
|
421
|
+
|
395
422
|
info("calling do_stop for #{self.name}")
|
396
423
|
safe_do_stop(@attempt_count)
|
397
|
-
|
398
|
-
end
|
424
|
+
|
425
|
+
end
|
399
426
|
@attempt_count += 1
|
400
|
-
|
427
|
+
|
401
428
|
end
|
402
|
-
|
429
|
+
|
403
430
|
############################################################################
|
404
431
|
#
|
405
432
|
# check the various timers, and see if we're allowed to take action
|
406
433
|
# on a specific service at this point...
|
407
434
|
#
|
408
435
|
############################################################################
|
409
|
-
|
436
|
+
|
410
437
|
def check_action_delay(now,proposed_action)
|
411
|
-
|
438
|
+
|
412
439
|
elapsed=now - @last_action_time
|
413
440
|
|
414
441
|
# check general-purpose between-action-delay
|
415
442
|
return(false) if(elapsed < @params[:min_action_delay_secs])
|
416
443
|
|
417
444
|
if(proposed_action == @last_action)
|
418
|
-
|
445
|
+
|
419
446
|
# check grace periods
|
420
447
|
return(false) if(@last_action == :start && elapsed < @params[:start_grace_secs])
|
421
448
|
return(false) if(@last_action == :stop && elapsed < @params[:stop_grace_secs])
|
422
|
-
|
449
|
+
|
423
450
|
# check failing suppression
|
424
451
|
since_fail=now - @last_fail_time
|
425
452
|
return(false) if(since_fail < @params[:fail_suppress_secs])
|
426
453
|
end
|
427
454
|
|
428
455
|
true
|
429
|
-
end
|
430
|
-
|
456
|
+
end
|
457
|
+
|
431
458
|
############################################################################
|
432
459
|
#
|
433
460
|
# set want state in response to a user request - clear all delay state,
|
434
461
|
# start with a clean slate.
|
435
462
|
#
|
436
463
|
############################################################################
|
437
|
-
|
464
|
+
|
438
465
|
def set_want_state(state)
|
439
466
|
@want_state = state
|
440
467
|
@want_state_mode = :user
|
@@ -444,31 +471,31 @@ module ProcessWanker
|
|
444
471
|
if(@want_state != @current_state)
|
445
472
|
@show_state = "received #{state.inspect}"
|
446
473
|
end
|
447
|
-
end
|
474
|
+
end
|
448
475
|
|
449
476
|
############################################################################
|
450
477
|
#
|
451
478
|
#
|
452
479
|
#
|
453
480
|
############################################################################
|
454
|
-
|
481
|
+
|
455
482
|
def matches_spec(spec)
|
456
|
-
|
483
|
+
|
457
484
|
# ensure it's in array form
|
458
485
|
spec=spec.split(",")
|
459
|
-
|
486
|
+
|
460
487
|
# check for inversion on first item
|
461
488
|
if(spec.first[0..0]=="~")
|
462
489
|
# insert implicit "all" at front
|
463
490
|
spec=["all"] + spec
|
464
491
|
end
|
465
|
-
|
492
|
+
|
466
493
|
matches=false
|
467
494
|
spec.each do |p|
|
468
495
|
matches = matches_single(p,matches)
|
469
496
|
end
|
470
497
|
matches
|
471
|
-
|
498
|
+
|
472
499
|
end
|
473
500
|
|
474
501
|
############################################################################
|
@@ -478,7 +505,7 @@ module ProcessWanker
|
|
478
505
|
############################################################################
|
479
506
|
|
480
507
|
def matches_single(p,prev)
|
481
|
-
|
508
|
+
|
482
509
|
if(p == "all")
|
483
510
|
return(true)
|
484
511
|
elsif(p[0..0] == "/")
|
@@ -495,18 +522,18 @@ module ProcessWanker
|
|
495
522
|
elsif(p == group_name)
|
496
523
|
return(true)
|
497
524
|
end
|
498
|
-
|
525
|
+
|
499
526
|
prev
|
500
527
|
end
|
501
|
-
|
502
|
-
|
528
|
+
|
529
|
+
|
503
530
|
############################################################################
|
504
531
|
#
|
505
532
|
#
|
506
533
|
#
|
507
534
|
############################################################################
|
508
|
-
|
509
|
-
|
535
|
+
|
536
|
+
|
510
537
|
end
|
511
|
-
|
538
|
+
|
512
539
|
end
|
data/processwanker.gemspec
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
# stub: processwanker 0.0.
|
2
|
+
# stub: processwanker 0.0.13 ruby lib
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "processwanker".freeze
|
6
|
-
s.version = "0.0.
|
6
|
+
s.version = "0.0.13"
|
7
7
|
|
8
8
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.2".freeze) if s.respond_to? :required_rubygems_version=
|
9
9
|
s.require_paths = ["lib".freeze]
|
10
10
|
s.authors = ["Ben Stragnell".freeze]
|
11
11
|
s.cert_chain = ["/home/ben/nas/docs/personal/keys/rubygems/gem-public_cert.pem".freeze]
|
12
|
-
s.date = "2020-
|
12
|
+
s.date = "2020-05-12"
|
13
13
|
s.description = "Process monitoring and remote control system".freeze
|
14
14
|
s.email = "pw@codepuppies.com".freeze
|
15
15
|
s.executables = ["pw".freeze]
|
@@ -17,21 +17,17 @@ Gem::Specification.new do |s|
|
|
17
17
|
s.files = ["Manifest".freeze, "README".freeze, "Rakefile".freeze, "bin/pw".freeze, "lib/config/config.rb".freeze, "lib/config/config_auth.rb".freeze, "lib/config/config_client.rb".freeze, "lib/config/config_client_cluster.rb".freeze, "lib/config/config_client_clusters.rb".freeze, "lib/config/config_client_host.rb".freeze, "lib/config/config_daemon.rb".freeze, "lib/config/config_daemon_service.rb".freeze, "lib/config/config_daemon_service_dependency.rb".freeze, "lib/config/config_daemon_services.rb".freeze, "lib/config/config_hook.rb".freeze, "lib/config/config_node.rb".freeze, "lib/config/config_smtp.rb".freeze, "lib/events.rb".freeze, "lib/log.rb".freeze, "lib/net/net_api.rb".freeze, "lib/net/net_client.rb".freeze, "lib/net/net_connection.rb".freeze, "lib/net/net_server.rb".freeze, "lib/net/net_server_client.rb".freeze, "lib/net/net_util.rb".freeze, "lib/process_util.rb".freeze, "lib/pw_app.rb".freeze, "lib/service.rb".freeze, "lib/service_classes/dummy_service.rb".freeze, "lib/service_classes/pid_service.rb".freeze, "lib/service_classes/process_service.rb".freeze, "lib/service_classes/upstart_service.rb".freeze, "lib/service_mgr.rb".freeze, "lib/util.rb".freeze, "processwanker.gemspec".freeze]
|
18
18
|
s.homepage = "https://github.com/strags/processwanker".freeze
|
19
19
|
s.rdoc_options = ["--line-numbers".freeze, "--title".freeze, "Processwanker".freeze, "--main".freeze, "README".freeze]
|
20
|
-
s.
|
21
|
-
s.
|
22
|
-
s.signing_key = "/home/ben/nas/docs/personal/keys/rubygems/gem-private_key.pem".freeze
|
20
|
+
s.rubygems_version = "3.1.2".freeze
|
21
|
+
# s.signing_key = "/home/ben/nas/docs/personal/keys/rubygems/gem-private_key.pem".freeze
|
23
22
|
s.summary = "Process monitoring and remote control system".freeze
|
24
23
|
|
25
24
|
if s.respond_to? :specification_version then
|
26
25
|
s.specification_version = 4
|
26
|
+
end
|
27
27
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
else
|
32
|
-
s.add_dependency(%q<echoe>.freeze, [">= 0"])
|
33
|
-
s.add_dependency(%q<highline>.freeze, [">= 0"])
|
34
|
-
end
|
28
|
+
if s.respond_to? :add_runtime_dependency then
|
29
|
+
s.add_runtime_dependency(%q<echoe>.freeze, [">= 0"])
|
30
|
+
s.add_runtime_dependency(%q<highline>.freeze, [">= 0"])
|
35
31
|
else
|
36
32
|
s.add_dependency(%q<echoe>.freeze, [">= 0"])
|
37
33
|
s.add_dependency(%q<highline>.freeze, [">= 0"])
|
metadata
CHANGED
@@ -1,41 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: processwanker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.13
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ben Stragnell
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain:
|
11
|
-
-
|
12
|
-
|
13
|
-
MIIEUjCCArqgAwIBAgIBATANBgkqhkiG9w0BAQsFADApMScwJQYDVQQDDB5ydWJ5
|
14
|
-
Z2Vtcy9EQz1jb2RlcHVwcGllcy9EQz1jb20wHhcNMjAwMzAxMDI1ODI0WhcNMjEw
|
15
|
-
MzAxMDI1ODI0WjApMScwJQYDVQQDDB5ydWJ5Z2Vtcy9EQz1jb2RlcHVwcGllcy9E
|
16
|
-
Qz1jb20wggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQDhCu9pU02a3l9M
|
17
|
-
91dnAGcSFSZmu2xxSIMZvBGVzxGba3Mx0t8Ih3EDUm6TWiT+5hCDdr9+ouEOGv9R
|
18
|
-
Sjga5SNQDfBWUtzwgIKOf+ltGSD8KulpmSczcw6enVhzNu+Z6x9ZDRwjr+1/wDSY
|
19
|
-
8ilSXYFvG5MKxqw+bHOqozKhOELQX3bpvvrn2iM9HGoxFbdErTohuKLqt2zI28jD
|
20
|
-
v/YUrraB7aHEriicrJ+wLCGkGjon+PU9cPaioNMVJl8/yd4zAkn4Ero57btVZAwF
|
21
|
-
lTFqJZFv7iJ66Nhmz8D64WcT5SFDna3CmAZ9Jlew34F/m5sC8K4grbs8bWgdK9I6
|
22
|
-
/jnq8jFhlmDVbSjlLGmYHgJJmAjD4UNYubSLeNSad4meOVN/0RMzPSsj0ANFmeeZ
|
23
|
-
Fjd9O0dvgaDl7b9pzJ/5EvexdYb/GUsEuMo6t7vas6TC43l5l6jUZ8Zuan3U5lEm
|
24
|
-
/hFW8TxtdvLWVC2kgOE4I8fd/X/gkldpIECk8trjWnzKmPf/T4cCAwEAAaOBhDCB
|
25
|
-
gTAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUF+4ZGptfGLlWmfl3
|
26
|
-
k97y8Q0jLRkwIwYDVR0RBBwwGoEYcnVieWdlbXNAY29kZXB1cHBpZXMuY29tMCMG
|
27
|
-
A1UdEgQcMBqBGHJ1YnlnZW1zQGNvZGVwdXBwaWVzLmNvbTANBgkqhkiG9w0BAQsF
|
28
|
-
AAOCAYEAQIdSBokSX9oIK82wMTZyJs9o0R3TbqVfiwX8CcQHPUIAJrRO/oo1xoAW
|
29
|
-
QL7MtgAB7OQzb5vjMg0E9ySai37sLi8+kh6LLkVvgn6O+fDxytzi+NTpPL45k1Su
|
30
|
-
+3hdoF3LwwvMMmo+r0KXfxJMcmTkqhtPoHutXxSj1+8kvf7tCqhzIsXGyOGbl43J
|
31
|
-
j2bNKvlsvj5gT7wxfio7BPdyo2dME4jmKZNzk26eEe6X+FejlgbwupIXNFJGbIWY
|
32
|
-
mDHkMHklUlqD8yBbapxyZzQHj7P3pMBTqDwuSw9CBCSa5bjODzW4ypyLMubuyhX9
|
33
|
-
/6UhoMPk1CQUVXq49uOQippAAV/2tb9Qj47itB+/HBbShRDGTa8T+ReOPdhtFMGM
|
34
|
-
+pQgFI9v1u1a41xIsHL4ywvy/h3PhrxAIZUZWtli208wCbbMccC1ZJgaaMFTNKM+
|
35
|
-
JBW+Lr7BWFNyaAFJI3yYU/sk8DGLCUOdPT2CzX/perzGScKgKscXT+Hys+HvHdMa
|
36
|
-
K+mzJYQy
|
37
|
-
-----END CERTIFICATE-----
|
38
|
-
date: 2020-03-01 00:00:00.000000000 Z
|
11
|
+
- "/home/ben/nas/docs/personal/keys/rubygems/gem-public_cert.pem"
|
12
|
+
date: 2020-05-12 00:00:00.000000000 Z
|
39
13
|
dependencies:
|
40
14
|
- !ruby/object:Gem::Dependency
|
41
15
|
name: echoe
|
@@ -162,8 +136,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
162
136
|
- !ruby/object:Gem::Version
|
163
137
|
version: '1.2'
|
164
138
|
requirements: []
|
165
|
-
|
166
|
-
rubygems_version: 2.7.6
|
139
|
+
rubygems_version: 3.1.2
|
167
140
|
signing_key:
|
168
141
|
specification_version: 4
|
169
142
|
summary: Process monitoring and remote control system
|
checksums.yaml.gz.sig
DELETED
Binary file
|
data.tar.gz.sig
DELETED
metadata.gz.sig
DELETED
Binary file
|