def data
trace = Trace.find(params[:id])
if trace.public? or (@user and @user == trace.user)
- send_data(File.open("/tmp/#{trace.id}.gpx",'r').read , :filename => "#{trace.id}.gpx", :type => 'text/plain', :disposition => 'inline')
+ send_data(File.open("/home/osm/gpx/#{trace.id}.gpx",'r').read , :filename => "#{trace.id}.gpx", :type => 'text/plain', :disposition => 'inline')
end
end
@trace.timestamp = Time.now
if @trace.save
- saved_filename = "/tmp/#{@trace.id}.gpx"
+ saved_filename = "/home/osm/gpx/#{@trace.id}.gpx"
File.rename(filename, saved_filename)
logger.info("id is #{@trace.id}")
flash[:notice] = "Your GPX file has been uploaded and is awaiting insertion in to the database. This will usually happen within half an hour, and an email will be sent to you on completion."
belongs_to :user
has_many :tags, :class_name => 'Tracetag', :foreign_key => 'gpx_id', :dependent => :destroy
+ has_many :points, :class_name => 'Tracepoint', :foreign_key => 'gpx_id', :dependent => :destroy
def tagstring=(s)
self.tags = s.split().collect {|tag|
# FIXME change to permanent filestore area
def large_picture_name
- "/tmp/#{id}.gif"
+ "/home/osm/icons/#{id}.gif"
end
# FIXME change to permanent filestore area
def icon_picture_name
- "/tmp/#{id}_icon.gif"
+ "/home/osm/icons/#{id}_icon.gif"
end
def to_xml_node
logger = ActiveRecord::Base.logger
while($running) do
-
+
ActiveRecord::Base.logger.info("GPX Import daemon wake @ #{Time.now}.")
- traces = Trace.find(:all) #, :conditions => ['inserted = ?', false])
+ traces = Trace.find(:all, :conditions => ['inserted = ?', false])
if traces and traces.length > 0
traces.each do |trace|
begin
logger.info("GPX Import importing #{trace.name} (#{trace.id}) from #{trace.user.email}")
-\r
+ \r
# TODO *nix specific, could do to work on windows... would be functionally inferior though - check for '.gz'
- gzipped = `file -b /tmp/#{trace.id}.gpx`.chomp =~/^gzip/\r
+ gzipped = `file -b /home/osm/gpx/#{trace.id}.gpx`.chomp =~/^gzip/\r
if gzipped
logger.info("gzipped")
min_lat = Tracepoint.minimum('latitude', :conditions => ['gpx_id = ?', trace.id])
max_lon = Tracepoint.maximum('longitude', :conditions => ['gpx_id = ?', trace.id])
min_lon = Tracepoint.minimum('longitude', :conditions => ['gpx_id = ?', trace.id])
-
+
max_lat = max_lat.to_f / 1000000
min_lat = min_lat.to_f / 1000000
max_lon = max_lon.to_f / 1000000
min_lon = min_lon.to_f / 1000000
-
+
trace.latitude = f_lat
trace.longitude = f_lon
trace.large_picture = gpx.get_picture(min_lat, min_lon, max_lat, max_lon, gpx.actual_points)
trace.inserted = true
trace.save
- logger.info "done trace #{trace.id} -------------------------------------------------------------------------------"
- # Notifier::deliver_gpx_success(trace, gpx.possible_points)
+ logger.info "done trace #{trace.id}"
+ Notifier::deliver_gpx_success(trace, gpx.possible_points)
else
- #trace.destroy
-# Notifier::deliver_gpx_failure(trace, '0 points parsed ok. Do they all have lat,lng,alt,timestamp?')
+ `rm /home/osm/gpx/#{trace.id}.gpx`
+ trace.destroy
+ Notifier::deliver_gpx_failure(trace, '0 points parsed ok. Do they all have lat,lng,alt,timestamp?')
end
rescue Exception => ex
logger.info ex
ex.backtrace.each {|l| logger.info l }
- #trace.destroy
- # Notifier::deliver_gpx_failure(trace, ex.to_s + ex.backtrace.join("\n") )
+ `rm /home/osm/gpx/#{trace.id}.gpx`
+ trace.destroy
+ Notifier::deliver_gpx_failure(trace, ex.to_s + ex.backtrace.join("\n") )
end
end
end
+
+ Trace.find(:all, :conditions => ['inserted = ?', false]).each do |trace|
+ `rm /home/osm/gpx/#{trace.id}.gpx`
+ trace.destroy
+ end
+ exit
sleep 15.minutes
end