From: Steve Coast Date: Thu, 10 May 2007 22:14:11 +0000 (+0000) Subject: various gpx bits X-Git-Tag: live~8445 X-Git-Url: https://git.openstreetmap.org/rails.git/commitdiff_plain/e25cbb009adb64eeb97e3a68d9c964ff785c7be3 various gpx bits --- diff --git a/app/controllers/trace_controller.rb b/app/controllers/trace_controller.rb index b4e9d7f51..541e0f840 100644 --- a/app/controllers/trace_controller.rb +++ b/app/controllers/trace_controller.rb @@ -123,7 +123,7 @@ class TraceController < ApplicationController 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 @@ -188,7 +188,7 @@ class TraceController < ApplicationController @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." diff --git a/app/models/trace.rb b/app/models/trace.rb index 2ebf08e85..0d9e8861d 100644 --- a/app/models/trace.rb +++ b/app/models/trace.rb @@ -7,6 +7,7 @@ class Trace < ActiveRecord::Base 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| @@ -47,12 +48,12 @@ class Trace < ActiveRecord::Base # 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 diff --git a/lib/daemons/gpx_import.rb b/lib/daemons/gpx_import.rb index 9e7e906c8..82232e496 100755 --- a/lib/daemons/gpx_import.rb +++ b/lib/daemons/gpx_import.rb @@ -13,19 +13,19 @@ end 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}") - + # 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/ + gzipped = `file -b /home/osm/gpx/#{trace.id}.gpx`.chomp =~/^gzip/ if gzipped logger.info("gzipped") @@ -60,12 +60,12 @@ while($running) do 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) @@ -74,20 +74,28 @@ while($running) do 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