Module: Looper
- Defined in:
- lib/looper.rb
Overview
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Instance Method Summary collapse
- #exit_loop ⇒ Object
- #loopme(run_every = 10) ⇒ Object
- #trap_signals ⇒ Object
- #write_pid(filename, pid) ⇒ Object
Instance Method Details
#exit_loop ⇒ Object
68 69 70 |
# File 'lib/looper.rb', line 68 def exit_loop @run = false end |
#loopme(run_every = 10) ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/looper.rb', line 36 def loopme(run_every = 10) # we don't want to delay output to sdtout until the program stops, we want feedback! $stdout.sync=true trap_signals @run = true puts "#{Time.now} process started with #{run_every} loop. kill #{Process.pid} to stop" last_run = Time.now - run_every - 1 while (@run) do now = Time.now if last_run + run_every < now begin yield rescue Exception => e puts "Uncaught exception bubbled up: \n#{e.class}: #{e.}\n\t#{e.backtrace.join("\n\t")} " end last_run = now end sleep(2) end puts "#{Time.now} shutting down" end |
#trap_signals ⇒ Object
26 27 28 29 30 31 32 33 34 |
# File 'lib/looper.rb', line 26 def trap_signals sigtrap = proc { puts "caught trapped signal, shutting down" @run = false } ["SIGTERM", "SIGINT", "SIGHUP"].each do |signal| trap signal, sigtrap end end |
#write_pid(filename, pid) ⇒ Object
62 63 64 65 66 |
# File 'lib/looper.rb', line 62 def write_pid(filename, pid) file = File.new(filename, "w") file.print pid.to_s file.close end |