Hide public communty.
[ecs.git] / app / controllers / events_controller.rb
blob02f97aaa9604a3b686e6daaf9c260975367398c2
1 # Copyright (C) 2007, 2008, 2009, 2010 Heiko Bernloehr (FreeIT.de).
2
3 # This file is part of ECS.
4
5 # ECS is free software: you can redistribute it and/or modify it
6 # under the terms of the GNU Affero General Public License as
7 # published by the Free Software Foundation, either version 3 of
8 # the License, or (at your option) any later version.
9
10 # ECS is distributed in the hope that it will be useful, but
11 # WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13 # Affero General Public License for more details.
14
15 # You should have received a copy of the GNU Affero General Public
16 # License along with ECS. If not, see <http://www.gnu.org/licenses/>.
19 class EventsController < ApplicationController
21   before_action :authentication
22   before_action :add_cookie_header # only for anonymous participants
24   def initialize
25     super
26   end
28   def index
29     count = params["count"].blank? ? -1 : params["count"].to_i
30     events_render(@participant.id, count)
31   end
33   def fifo
34     max_tries = 5
35     begin
36       Event.transaction do
37         count = params["count"].blank? ? 1 : params["count"].to_i
38         events_render(@participant.id, count)
39       end
40     rescue ActiveRecord::StaleObjectError, ActiveRecord::RecordNotFound => error
41       logger.info "**** Concurrent access at events queue (max_tries=#{max_tries})."
42       max_tries-= 1
43       retry unless max_tries <= 0
44       raise
45     end
46   end
48 private
50   def events_render(participant_id, count)
51     events = []
52     events_txt = ""
53     Event.for_participant(participant_id,count).each do |event|
54       if request.post?
55         event.destroy
56         # do not destroy message if another reference in events to the message
57         # exists or the message is not marked as removed
58         unless Event.find_by_message_id(event.message.id) or !event.message.removed
59           event.message.destroy
60         end
61       end
62       events <<
63         { 
64           :ressource => event.message.ressource.namespace + "/" +
65                         event.message.ressource.ressource + "/" +
66                         event.message.id.to_s,
67           :status => event.ev_type.name
68         }
69     end
70     respond_to do |format|
71       format.json { render :json  => JSON.pretty_generate(events) }
72       format.xml  { render :xml   => events }
73       format.text { render :plain  => events_render_txt(events) }
74     end
75   end
77   def events_render_txt(events)
78     events_txt = ""
79     events.each do |event|
80       events_txt << event[:ressource] + "   " + event[:status] + "\r\n"
81     end
82     events_txt
83   end
85 end