You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@whimsical.apache.org by sebb <se...@gmail.com> on 2018/06/12 10:58:15 UTC
Re: [whimsy] branch master updated: rough in a simple (file based)
event system
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
> rubys@apache.org.
Re: [whimsy] branch master updated: rough in a simple (file based)
event system
Posted by Sam Ruby <ru...@intertwingly.net>.
On Tue, Jun 12, 2018 at 6:58 AM, sebb <se...@gmail.com> wrote:
> 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?
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
>> rubys@apache.org.