Commit fd19ccbd0b07c50bbd9a11d9d2d2550d55f9b7a6:
    Rough in an activity log so that people who use the application on whimsy
    can be aware of who else is active...
    git-svn-id: 
https://svn.apache.org/repos/infra/infrastructure/trunk/projects/whimsy@819618 
90ea9780-b833-de11-8433-001ec94261de


Branch: refs/heads/master
Author: Sam Ruby <[email protected]>
Committer: Sam Ruby <[email protected]>
Pusher: rubys <[email protected]>

------------------------------------------------------------
www/secretary/workbench/file.cgi                             | +++++++++++ 
www/secretary/workbench/worklist.cgi                         | ++ --
------------------------------------------------------------
48 changes: 46 additions, 2 deletions.
------------------------------------------------------------


diff --git a/www/secretary/workbench/file.cgi b/www/secretary/workbench/file.cgi
index d580588..5d3c1f6 100755
--- a/www/secretary/workbench/file.cgi
+++ b/www/secretary/workbench/file.cgi
@@ -426,11 +426,24 @@ _html do
       .traceback {background-color:#ff0; margin: 1em 0; padding: 1em;
         border: 2px solid}
       #notice {color: green}
+      .collision {background-color: #ee82ee}
     }
   end
 
   _body? do
 
+    activity_log = nil
+    File.open "#{RECEIVED}/activity.yml", File::RDWR|File::CREAT, 0644 do 
|file|
+      file.flock File::LOCK_EX
+      activity_log = YAML.load(file.read) || []
+      activity_log.unshift({'user' => $USER, 'time' => Time.now.utc}.
+        merge(Hash[params.map {|key,value| [key,value.first]}]))
+      file.rewind
+      file.write YAML.dump(activity_log[0...5])
+      file.flush
+      file.truncate file.pos
+    end
+
     begin
       filename = [@filename, @cfilename, @gfilename, @mfilename, @nfilename].
         find {|name| name and not name.empty?}
@@ -779,6 +792,37 @@ _html do
           end
         end
 
+        _h2 'Recent Activity'
+        _table border: 1, cellpadding: 5, cellspacing: 0 do
+          _thead do
+            _tr do
+              _th 'Time'
+              _th 'User'
+              _th 'Action'
+              _th 'Parameters'
+            end
+          end
+          _tbody do
+            activity_log[1..-1].each do |entry|
+              collision = (entry['user'] != $USER and not entry['user'].empty?)
+              collision &&= (Time.now-entry['time'] < 600)
+              _tr_ class: ('collision' if collision) do
+                _td entry.delete('time')
+                _td entry.delete('user')
+                if entry['action']
+                  _td entry.delete('action')
+                elsif entry['doctype'] == 'other'
+                  _td entry['dest']
+                else
+                  _td entry['doctype']
+                end
+                entry.delete_if {|name, value| value.empty?}
+                _td entry.inspect
+              end
+            end
+          end
+        end
+
       when 'view'
         @dir.untaint if Dir.chdir(RECEIVED) {Dir['*'].include? @dir.chomp('/')}
         files = Dir["#{RECEIVED}/#{@dir}/*"].sort
diff --git a/www/secretary/workbench/worklist.cgi 
b/www/secretary/workbench/worklist.cgi
index 32715e2..726010e 100755
--- a/www/secretary/workbench/worklist.cgi
+++ b/www/secretary/workbench/worklist.cgi
@@ -77,7 +77,7 @@ _html do
         end
       end
 
-      files.reject! {|f| f=~ /\/(pending|completed)\.yml\s*$/}
+      files.reject! {|f| f=~ /\/(activity|pending|completed)\.yml\s*$/}
       unless files.empty? and !File.exist?(PENDING_YML)
         _h2_ 'Pending'
         files.each {|line| _pre line.strip.sub(/\s+/,' ')}
@@ -96,7 +96,7 @@ _html do
       Dir.chdir("#{RECEIVED}") do
         Dir["*"].sort_by {|name| File.stat(name.untaint).mtime}.each do |file|
           next if %w{README deadletter archives}.include? file
-          next if %w{pending.yml completed.yml}.include? file
+          next if %w{pending.yml completed.yml activity.yml}.include? file
           next if file =~ /^to_\w+$/
           if File.directory? file
             next if Dir.entries(file).reject {|name| name=~/^\./}.empty?

Reply via email to