threaded.rb 990B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. require 'thread'
  2. require 'huginn_scheduler'
  3. STDOUT.sync = true
  4. STDERR.sync = true
  5. def stop
  6. puts 'Exiting...'
  7. @scheduler.stop
  8. @dj.stop
  9. @stream.stop
  10. end
  11. def safely(&block)
  12. begin
  13. yield block
  14. rescue StandardError => e
  15. STDERR.puts "\nException #{e.message}:\n#{e.backtrace.join("\n")}\n\n"
  16. STDERR.puts "Terminating myself ..."
  17. stop
  18. end
  19. end
  20. threads = []
  21. threads << Thread.new do
  22. safely do
  23. @stream = TwitterStream.new
  24. @stream.run
  25. puts "Twitter stream stopped ..."
  26. end
  27. end
  28. threads << Thread.new do
  29. safely do
  30. @scheduler = HuginnScheduler.new
  31. @scheduler.run!
  32. puts "Scheduler stopped ..."
  33. end
  34. end
  35. threads << Thread.new do
  36. safely do
  37. require 'delayed/command'
  38. @dj = Delayed::Worker.new
  39. @dj.start
  40. puts "Delayed job stopped ..."
  41. end
  42. end
  43. # We need to wait a bit to let delayed_job set it's traps so we can override them
  44. sleep 0.5
  45. trap('TERM') do
  46. stop
  47. end
  48. trap('INT') do
  49. stop
  50. end
  51. threads.collect { |t| t.join }