You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Small gem to manage executing looping processes and signal handling.
Installation
Add this line to your application's Gemfile:
gem'sigurd'
And then execute:
$ bundle
Or install it yourself as:
$ gem install sigurd
Versioning
We use a version of semver for this gem. Any change in previous behavior
(something works differently or something old no longer works)
is denoted with a bump in the minor version (0.4 -> 0.5). Patch versions
are for bugfixes or new functionality which does not affect existing code. You
should be locking your Gemfile to the minor version:
gem'sigurd','0.0.3'
Usage
Sigurd exposes two classes for use with a third class. The ideas is as follows:
You have any object which responds to the start and stop methods.
This object is called a "Runner". When the stop method is called,
the runner should gracefully shut down.
You create an Executor class - this manages a thread pool for a
list of runners.
You create a SignalHandler which is the topmost object. This will
handle the signals sent by the system and gracefully forward the
requests. You pass the executor into the SignalHandler.
Finally, you call start on the SignalHandler to begin the execution.
Sample code:
classTestRunnerdefstartloopdobreakif@signal_to_stop# do some logic hereendenddefstop@signal_to_stop=trueendendrunners=(1..2).map{TestRunner.new}executor=Sigurd::Executor.new(runners,sleep_seconds: 5,logger: Logger.new(STDOUT))Sigurd::SignalHandler.new(executor).run!
If you have only a single runner, you can pass it into the SignalHandler
directly, without using an Executor:
Sigurd::SignalHandler.new(runner).run!
By default, if any of your runners fails, Sigurd will use an exponential
backoff to wait before restarting it. You can instead use the sleep_seconds
setting to always sleep a fixed amount of time before retrying. There
is no limit to retries.
Configuration
By default, sigurd will exit the process when a TERM, KILL or QUIT signal is received. You can change this
behavior to instead raise the original SignalException by setting