snipr 0.0.1 → 0.0.2

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
  SHA512:
3
- metadata.gz: 0431e21ba622f828ce67bbef64c3ea2bd900e9dac1e6069dbeb88feb0389c6837f9dd1a5654918dd3a2059b69ce52c836927522ea5f1a6c4aa5bec1f74d51bd3
4
- data.tar.gz: f2f45b0e24e2576610dd7883ac64b9828dd2ef6586320399d77832b54a597183a297e11e18a252a93130179c86cb11da4d7c610b9d4b90d5acb6a86afb5421ea
3
+ data.tar.gz: 3f2677c94a34966b9d5348c73d2d40b26051390251eefac5a3f8e1ec39c1a3b697b23fcfacdaa17da42a7b5b4073302686cf79b9ce2fc01e55a718cbc7f2063d
4
+ metadata.gz: 832f8d4ad90744c629518ca67a98762c57a70c4c6373d805c2346c097ca47bf0238fb2e0aa856d29ee84151fd544cd321dfbe7052d519507f4edcb1a14916662
5
5
  SHA1:
6
- metadata.gz: e4ba65cbad1a2cd5acb11c37237b5f843328a176
7
- data.tar.gz: 9ab5063ba228c17e50ab64634c58efea2fc6aee4
6
+ data.tar.gz: 4d56124489b903a171f4c73ea3f11016faf5b17c
7
+ metadata.gz: c9cda0f35966f40058ad8dc4d53efd4cdd8d702a
data/.gitignore CHANGED
@@ -11,4 +11,5 @@
11
11
  *.so
12
12
  *.o
13
13
  *.a
14
+ *.gem
14
15
  mkmf.log
@@ -39,6 +39,11 @@ parser = OptionParser.new do |config|
39
39
  config.on("-s", "--signal [SIGNAL]", desc) do |signal|
40
40
  options.signal = signal
41
41
  end
42
+
43
+ desc = "Perform a dry run which will identify workers to be reaped but not send any signals"
44
+ config.on("-d", "--dry-run", desc) do
45
+ options.no_signals = true
46
+ end
42
47
  end.parse!
43
48
 
44
49
  # TODO remove me
@@ -52,12 +57,15 @@ unless options.bytes || options.keys || options.alive
52
57
  Kernel.exit(-1)
53
58
  end
54
59
 
60
+ output.info("*** DRY RUN ***") if options.no_signals
61
+
55
62
  signaller = Snipr::ProcessSignaller.new do |signaller|
56
63
  signaller.signal options.signal
57
64
  signaller.target_parent true
58
65
  signaller.include /resque/
59
66
  signaller.include /processing/i
60
67
  signaller.exclude /scheduler/i
68
+ signaller.dry_run if options.no_signals
61
69
 
62
70
  if options.bytes
63
71
  signaller.memory_greater_than(options.bytes)
@@ -12,6 +12,7 @@ module Snipr
12
12
  # signaller.exclude /scheduler/
13
13
  # signaller.signal "USR1"
14
14
  # signaller.target_parent false
15
+ # singaller.dry_run
15
16
  #
16
17
  # signaller.on_no_processes do
17
18
  # puts "No processes"
@@ -50,7 +51,8 @@ module Snipr
50
51
  end
51
52
 
52
53
  ##
53
- # Send the specified signal to all located processes
54
+ # Send the specified signal to all located processes, invoking
55
+ # callbacks as appropriate.
54
56
  def send_signals
55
57
  processes = @locator.locate
56
58
 
@@ -65,6 +67,11 @@ module Snipr
65
67
  @on_error.call(e)
66
68
  end
67
69
 
70
+ ##
71
+ # Specify the signal to send to the targetted processes. This should
72
+ # be a string that maps one of the values listed here:
73
+ #
74
+ # http://ruby-doc.org/core-1.8.7/Signal.html#method-c-list
68
75
  def signal(signal)
69
76
  @signal = Signal.list[signal.to_s.upcase].tap do |sig|
70
77
  unless sig
@@ -73,37 +80,67 @@ module Snipr
73
80
  end
74
81
  end
75
82
 
83
+ ##
84
+ # Specify or access the locator collaborator that is responsible for
85
+ # collecting the processes to operate on
76
86
  def locator(locator=nil)
77
87
  @locator ||= (locator || ProcessLocator.new)
78
88
  end
79
89
 
90
+ ##
91
+ # Callback invoked when no processes are found
80
92
  def on_no_processes(&callback)
81
93
  @on_no_processes = callback
82
94
  end
83
95
 
96
+ ##
97
+ # Callback invoked immediately before sending a signal to a process.
98
+ # Will send both the signal and the KernelProcess object as returned
99
+ # by the locator.
84
100
  def before_signal(&callback)
85
101
  @before_signal = callback
86
102
  end
87
103
 
104
+ ##
105
+ # Callback invoked immediately after sending a signal to a process.
106
+ # Will send both the signal and the KernelProcess object as returned
107
+ # by the locator.
88
108
  def after_signal(&callback)
89
109
  @after_signal = callback
90
110
  end
91
111
 
112
+ ##
113
+ # Callback invoked if an error is encountered. If this is within
114
+ # the context of attempting to send a signal to a process, then
115
+ # the exception, signal and KernelProcess object are sent. Otherwise,
116
+ # only the exception is sent.
92
117
  def on_error(&callback)
93
118
  @on_error = callback
94
119
  end
95
120
 
121
+ ##
122
+ # Set to true if the signal should be sent to the parent of any
123
+ # located processes. Defaults to false.
96
124
  def target_parent(flag=false)
97
125
  @target_parent = flag
98
126
  end
99
127
 
128
+ ##
129
+ # Invoke if you want to have callbacks invoked, but not actually
130
+ # send signals to located processes.
131
+ def dry_run
132
+ @dry_run = true
133
+ end
134
+
100
135
  private
101
136
  def signal_process(process)
102
137
  @before_signal.call(@signal, process)
103
- if @target_parent
104
- Process.kill(@signal, process.ppid)
105
- else
106
- Process.kill(@signal, process.pid)
138
+ unless @dry_run
139
+ if @target_parent
140
+ Process.kill(@signal, process.ppid)
141
+ else
142
+ Process.kill(@signal, process.pid)
143
+ end
107
144
  end
108
145
  @after_signal.call(@signal, process)
109
146
  rescue StandardError => e
data/lib/snipr/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Snipr
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -76,7 +76,7 @@ module Snipr
76
76
  expect(checkins.after_signal).to eq("#{signal} > 6337")
77
77
  end
78
78
  end
79
-
79
+
80
80
  context "targetting the parent process" do
81
81
  it "should send the appropriate signal to the parent process and call callbacks" do
82
82
  subject.target_parent true
@@ -94,6 +94,16 @@ module Snipr
94
94
  expect(checkins.on_error).to eq("Ouch! #{signal} > 6337")
95
95
  end
96
96
  end
97
+
98
+ context "when doing a dry run" do
99
+ it "should not send any signals to the process or its parent" do
100
+ expect(Process).to_not receive(:kill)
101
+ subject.dry_run
102
+ subject.send_signals
103
+ expect(checkins.before_signal).to eq("#{signal} > 6337")
104
+ expect(checkins.after_signal).to eq("#{signal} > 6337")
105
+ end
106
+ end
97
107
  end
98
108
  end
99
109
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: snipr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lance Woodson