On Tue, Jun 12, 2018 at 6:58 AM, sebb <[email protected]> wrote: > On 12 June 2018 at 01:23, <[email protected]> wrote: >> This is an automated email from the ASF dual-hosted git repository. >> >> rubys pushed a commit to branch master >> in repository https://gitbox.apache.org/repos/asf/whimsy.git >> >> >> The following commit(s) were added to refs/heads/master by this push: >> new bfb13a1 rough in a simple (file based) event system >> bfb13a1 is described below >> >> commit bfb13a1063f2bfedb6c4942d85e8d06be20b1791 >> Author: Sam Ruby <[email protected]> >> AuthorDate: Mon Jun 11 20:23:10 2018 -0400 >> >> rough in a simple (file based) event system >> --- >> www/board/agenda/daemon/channel.rb | 9 ++++++- >> www/board/agenda/daemon/events.rb | 49 >> ++++++++++++++++++++++++++++++++++++++ >> www/board/agenda/main.rb | 1 + >> 3 files changed, 58 insertions(+), 1 deletion(-) >> >> diff --git a/www/board/agenda/daemon/channel.rb >> b/www/board/agenda/daemon/channel.rb >> index 8441897..e507d2c 100644 >> --- a/www/board/agenda/daemon/channel.rb >> +++ b/www/board/agenda/daemon/channel.rb >> @@ -10,6 +10,7 @@ require 'digest' >> require 'yaml' >> >> require_relative './session' >> +require_relative './events' >> require 'whimsy/asf/svn' >> >> class Channel >> @@ -100,7 +101,8 @@ class Channel >> end >> >> board_listener.start >> - # listen for changes to pending and minutes files >> + >> + # listen for changes to pending and minutes files >> work_listener = Listen.to(Session::AGENDA_WORK) do |modified, added, >> removed| >> modified.each do |path| >> next if path.end_with? '/sessions/present.yml' >> @@ -117,6 +119,8 @@ class Channel >> elsif file =~ /^(\w+)\.yml$/ >> self.post_private $1, type: :pending, private: $1, >> value: YAML.load_file(path) >> + elsif path =~ /^\/events\/\w+$/ >> + Events.process() >> else >> STDERR.puts file >> end >> @@ -124,4 +128,7 @@ class Channel >> end >> >> work_listener.start >> + >> + # process pending messages >> + Events.process() >> end >> diff --git a/www/board/agenda/daemon/events.rb >> b/www/board/agenda/daemon/events.rb >> new file mode 100644 >> index 0000000..1faf85d >> --- /dev/null >> +++ b/www/board/agenda/daemon/events.rb >> @@ -0,0 +1,49 @@ >> +require 'fileutils' >> +require 'json' >> +require 'securerandom' >> + >> +require 'whimsy/asf/config' >> + >> +# >> +# Low-tech, file based event manager. Each message is stored as a separate >> +# file on disk, and is deleted once processed. >> +# >> +# No direct use of timers, events, or threads are made allowing this >> +# service to be used in a variety of contexts (e.g. Sinatra and >> +# EventMachine). >> +# >> + >> +class Events >> + if ENV['RACK_ENV'] == 'test' >> + AGENDA_WORK = File.expand_path('test/work/data').untaint >> + else >> + AGENDA_WORK = ASF::Config.get(:agenda_work).untaint || '/srv/agenda' >> + end >> + >> + WORKDIR = File.expand_path('events', AGENDA_WORK) >> + >> + # capture a message to be sent >> + def self.post(message) >> + filename = SecureRandom.hex(16) >> + File.write(File.join(WORKDIR, filename), JSON.generate(message)) >> + end >> + >> + # process pending messages >> + def self.process() >> + Dir[File.join(WORKDIR, '*')].each do |file| >> + begin >> + message = JSON.parse(File.read(file)) >> + if message[:private] > > The if condition looks odd when compared with the else clause below - > should it be unless?
good catch! Fixed. Thanks! >> + Channel.post_all(message) >> + else >> + Channel.post_private(message[:private], message) >> + end >> + ensure >> + File.unlink file >> + end >> + end >> + end >> + >> + # ensure the working directory exists >> + FileUtils.mkdir_p WORKDIR >> +end >> diff --git a/www/board/agenda/main.rb b/www/board/agenda/main.rb >> index bbcf8e6..b991243 100755 >> --- a/www/board/agenda/main.rb >> +++ b/www/board/agenda/main.rb >> @@ -51,6 +51,7 @@ require_relative './models/comments' >> require_relative './helpers/string' >> require_relative './helpers/integer' >> require_relative './daemon/session' >> +require_relative './daemon/events' >> >> require 'websocket-client-simple' >> >> >> -- >> To stop receiving notification emails like this one, please contact >> [email protected].
