diff options
author | Heiko Bernloehr <Heiko.Bernloehr@FreeIT.de> | 2015-12-16 21:45:18 +0100 |
---|---|---|
committer | Heiko Bernloehr <Heiko.Bernloehr@FreeIT.de> | 2015-12-16 22:47:39 +0100 |
commit | 3d0e0b4b5b329f56edf83b4694b551c8a529027f (patch) | |
tree | d0012ccaae7690a5d0a69c2e1979d124a7747fb0 /lib/main_loop.rb | |
parent | 58d2e2e5c0b05ba4a20a2611d81cf73aa33d302a (diff) | |
download | vipeval-3d0e0b4b5b329f56edf83b4694b551c8a529027f.tar.gz vipeval-3d0e0b4b5b329f56edf83b4694b551c8a529027f.zip |
Merge and send to computation service.
Diffstat (limited to 'lib/main_loop.rb')
-rw-r--r-- | lib/main_loop.rb | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/lib/main_loop.rb b/lib/main_loop.rb new file mode 100644 index 0000000..473ec6e --- /dev/null +++ b/lib/main_loop.rb @@ -0,0 +1,66 @@ +## +# Loops for getting new events from *sys/events*. +# This class is a singelton, because it should be +# the only looping thing. +class MainLoop + include Singleton + +# class << self +# attr_accessor :exception_tries +# end +# +# attr_accessor :ecs + + @exception_tries= 0 + + def initialize + Rails.logger.info "*** VIP merge and compute service started ***" + @ecs= HttpEcs.instance + end + + def start + loop do + evbody=JSON::parse((ev=read_event).body) + if evbody.blank? + #Rails.logger.info "MainLoop#start: " + sleep(1) + else + if evbody[0]["ressource"].start_with?(APP_CONFIG["eventtypes"]["job"]["name"]) + Rails.logger.info "received \"#{APP_CONFIG["eventtypes"]["job"]["name"]}\" event type" + JobEvent.new.process(evbody) + elsif evbody[0]["ressource"].start_with?(APP_CONFIG["eventtypes"]["result"]["name"]) + Rails.logger.info "received \"#{APP_CONFIG["eventtypes"]["result"]["name"]}\" event type" + process_result_event(evbody) + else + Rails.logger.info "Unknown event type" + end + end + end + rescue => e + Rails.logger.error "MainLoop#start:Exception: #{e.class}: #{e.message}" + Rails.logger.error Rails.backtrace_cleaner.clean(e.backtrace) + #retry if MainLoop.try_ones_more? + end + + private + + def self.try_ones_more? + if MainLoop.exception_tries < 1 + sleep(2**MainLoop.exception_tries) + MainLoop.exception_tries+= 1 + true + else + false + end + end + + def read_event + @ecs.connection["sys/events/fifo"].post "" + end + + def process_result_event(ev) + # TODO remove exercise referenced through solution embedded in result + end + +end + |