processwanker 0.0.12 → 0.0.13
Sign up to get free protection for your applications and to get access to all the features.
- 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
|