On 12 June 2018 at 01:23, <ru...@apache.org> 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 <ru...@intertwingly.net> > 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? > + 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 > ru...@apache.org.