On 08/24/10 - 12:19:07AM, Mohammed Morsi wrote: > diff --git a/src/app/models/instance_event.rb > b/src/app/models/instance_event.rb > new file mode 100644 > index 0000000..cc1eaa0 > --- /dev/null > +++ b/src/app/models/instance_event.rb > @@ -0,0 +1,30 @@ > +# Copyright (C) 2010 Red Hat, Inc. > +# > +# This program is free software; you can redistribute it and/or modify > +# it under the terms of the GNU General Public License as published by > +# the Free Software Foundation; version 2 of the License. > +# > +# This program is distributed in the hope that it will be useful, > +# but WITHOUT ANY WARRANTY; without even the implied warranty of > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +# GNU General Public License for more details. > +# > +# You should have received a copy of the GNU General Public License > +# along with this program; if not, write to the Free Software > +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, > +# MA 02110-1301, USA. A copy of the GNU General Public License is > +# also available at http://www.gnu.org/copyleft/gpl.html. > + > +# Filters added to this controller apply to all controllers in the > application. > +# Likewise, all the methods added will be available for all controllers. > + > +class InstanceEvent < ActiveRecord::Base > + belongs_to :instance > + > + validates_presence_of :instance_id > + validates_presence_of :event_type > + > + #validates_inclusion_of :event_type, > + # :in => TYPES
Just drop the commented out code, we can include it later when we need it. <snip> > diff --git a/src/dbomatic/dbomatic.rb b/src/dbomatic/dbomatic.rb > new file mode 100644 > index 0000000..8a05362 > --- /dev/null > +++ b/src/dbomatic/dbomatic.rb > @@ -0,0 +1,98 @@ ... > + # Create a new entry for events which we have all the neccessary data for > + def end_element(element) > + if element == "c" && !...@event_cmd.nil? > + # Condor may write to event log before condormatic returns and instance > + # table is updated. Extract instance name from event_cmd and query on > that > + inst_name = @event_cmd[4,@event_cmd.size-4].gsub(/_[0-9]*$/, '') > + inst = Instance.find(:first, :conditions => ['name = ?', inst_name]) > + #puts "Instance event #{inst.name} #...@event_type} #...@event_time}" Same here. > + InstanceEvent.create! :instance => inst, > + :event_type => @event_type, > + :event_time => @event_time > + @tag = @event_type = @event_cmd = @event_time = nil > + end > + end > +end > +parser = Nokogiri::XML::SAX::PushParser.new(CondorEventLog.new) > + > +# XXX hack, condor event log doesn't seem to have a top level element > +# enclosing everything else in the doc (as standards conforming xml must). > +# Create one for parsing purposes. > +parser << "<events>" > + > +# last time the event log was modified > +#event_log_timestamp = nil Same here. > + > +# last position we've read in the log > +event_log_position = 0 > + > +# persistantly store log position in filesystem > +# incase of dbomatic restarts > +if File.exists?(EVENT_LOG_POS_FILE) > + event_log_position = File.open(EVENT_LOG_POS_FILE, 'r').read.to_i > +end I think this is going to leave the file descriptor for EVENT_LOG_POS_FILE. It's probably not a huge deal, but given that you are going to be writing data to it later, it's probably best to close it out: file = File.open(EVENT_LOG_POS_FILE, 'r') event_log_position = file.read.to_i file.close > + > +log_file = File.open(CONDOR_EVENT_LOG_FILE) > +log_file.pos = event_log_position > + > +# Setup inotify watch for condor event log > +notifier = INotify::Notifier.new > +notifier.watch(CONDOR_EVENT_LOG_FILE, :modify){ |event| I think you may also have to watch for the "new" event as well, for the first time a job is submitted. > + while s = log_file.gets > + parser << s > + end > + event_log_position = log_file.pos > + File.open(EVENT_LOG_POS_FILE, 'w') { |f| f.write event_log_position.to_s } > +} > +notifier.run > + > +parser << "</events>" > +parser.finish Otherwise, it looks good. We'll also want to write a daemon initscript for this. Once you fix those pretty minor nits above, I can ACK and we can get this into the tree. -- Chris Lalancette _______________________________________________ deltacloud-devel mailing list deltacloud-devel@lists.fedorahosted.org https://fedorahosted.org/mailman/listinfo/deltacloud-devel