graceful_shutdown 1.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.
- checksums.yaml +7 -0
- data/lib/graceful_shutdown.rb +64 -0
- metadata +59 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 8088de0ff9f291434ebffe3a11f66bb3017ac896
|
4
|
+
data.tar.gz: 018035600bc16b2c3674596d53ab0c61d32e30b7
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: f044965d5bbbea0cbfdadcbc88f3354dc607a65041e71bef9294749426ce19d23ef116d1d013436f9435e393afd98b3c4470886f54472d0cc38c46e15c6c73ac
|
7
|
+
data.tar.gz: 1ae42428f8e80cd517083ece8369923ecde8a4c1830c1b4f2ef71dc21c71d65a5f50775b88fc66c89aa4e9c82bdc303346533069ef34fed36d78302a8de11e22
|
@@ -0,0 +1,64 @@
|
|
1
|
+
# Catches +INT+ and +TERM+ and allows the task/program to finish execution
|
2
|
+
# before handling the interrupt safely.
|
3
|
+
#
|
4
|
+
# Usage:
|
5
|
+
# WithGracefulShutdown do
|
6
|
+
# begin
|
7
|
+
# loop do
|
8
|
+
# print '.'
|
9
|
+
# sleep 0.5
|
10
|
+
# end
|
11
|
+
# rescue Shutdown => shutdown
|
12
|
+
# puts "\ngoodbye"
|
13
|
+
# shutdown.continue
|
14
|
+
# end
|
15
|
+
# end
|
16
|
+
|
17
|
+
def WithGracefulShutdown(*signals, &block)
|
18
|
+
GracefulShutdown.new.handle_signals(*signals, &block)
|
19
|
+
end
|
20
|
+
|
21
|
+
class Shutdown < RuntimeError
|
22
|
+
def continue
|
23
|
+
raise self
|
24
|
+
end
|
25
|
+
|
26
|
+
def ignore
|
27
|
+
# No-Op, provided for clarity.
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
class GracefulShutdown
|
32
|
+
DEFAULT_SIGNALS = ['INT', 'TERM']
|
33
|
+
HANDLER = proc { raise Shutdown }
|
34
|
+
|
35
|
+
# Execute a block of code with signal handlers.
|
36
|
+
def handle_signals(*signals)
|
37
|
+
signals = DEFAULT_SIGNALS if signals.empty?
|
38
|
+
|
39
|
+
handlers = setup(signals)
|
40
|
+
yield if block_given?
|
41
|
+
teardown(handlers)
|
42
|
+
rescue Shutdown
|
43
|
+
teardown(handlers)
|
44
|
+
exit
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
# Setup signal traps, keeping track of the original handlers.
|
50
|
+
# NOTE If something else below this sets a trap, these traps will not
|
51
|
+
# be invoked.
|
52
|
+
def setup(signals)
|
53
|
+
signals.each_with_object({}) do |signal, handlers|
|
54
|
+
handlers[signal] = trap(signal, HANDLER)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
# Restore original signal handlers.
|
59
|
+
def teardown(handlers)
|
60
|
+
handlers.each do |signal, handler|
|
61
|
+
trap(signal, handler)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
metadata
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: graceful_shutdown
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Tim Uruski
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-05-24 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rspec
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3.0'
|
27
|
+
description: You can use GracefulShutdown to catch signals and safely shutdown your
|
28
|
+
program.
|
29
|
+
email: nerd@timuruski.net
|
30
|
+
executables: []
|
31
|
+
extensions: []
|
32
|
+
extra_rdoc_files: []
|
33
|
+
files:
|
34
|
+
- lib/graceful_shutdown.rb
|
35
|
+
homepage: https://rubygemgem.org/graceful_shutdown
|
36
|
+
licenses:
|
37
|
+
- MIT
|
38
|
+
metadata: {}
|
39
|
+
post_install_message:
|
40
|
+
rdoc_options: []
|
41
|
+
require_paths:
|
42
|
+
- lib
|
43
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
49
|
+
requirements:
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '0'
|
53
|
+
requirements: []
|
54
|
+
rubyforge_project:
|
55
|
+
rubygems_version: 2.2.2
|
56
|
+
signing_key:
|
57
|
+
specification_version: 4
|
58
|
+
summary: A tiny helper for handling signals.
|
59
|
+
test_files: []
|