various gpx bits

This commit is contained in:
Steve Coast 2007-05-10 22:14:11 +00:00
parent 1bbe59b6a7
commit e25cbb009a
3 changed files with 25 additions and 16 deletions

View file

@ -123,7 +123,7 @@ class TraceController < ApplicationController
def data def data
trace = Trace.find(params[:id]) trace = Trace.find(params[:id])
if trace.public? or (@user and @user == trace.user) 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
end end
@ -188,7 +188,7 @@ class TraceController < ApplicationController
@trace.timestamp = Time.now @trace.timestamp = Time.now
if @trace.save if @trace.save
saved_filename = "/tmp/#{@trace.id}.gpx" saved_filename = "/home/osm/gpx/#{@trace.id}.gpx"
File.rename(filename, saved_filename) File.rename(filename, saved_filename)
logger.info("id is #{@trace.id}") 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." 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."

View file

@ -7,6 +7,7 @@ class Trace < ActiveRecord::Base
belongs_to :user belongs_to :user
has_many :tags, :class_name => 'Tracetag', :foreign_key => 'gpx_id', :dependent => :destroy 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) def tagstring=(s)
self.tags = s.split().collect {|tag| self.tags = s.split().collect {|tag|
@ -47,12 +48,12 @@ class Trace < ActiveRecord::Base
# FIXME change to permanent filestore area # FIXME change to permanent filestore area
def large_picture_name def large_picture_name
"/tmp/#{id}.gif" "/home/osm/icons/#{id}.gif"
end end
# FIXME change to permanent filestore area # FIXME change to permanent filestore area
def icon_picture_name def icon_picture_name
"/tmp/#{id}_icon.gif" "/home/osm/icons/#{id}_icon.gif"
end end
def to_xml_node def to_xml_node

View file

@ -16,7 +16,7 @@ while($running) do
ActiveRecord::Base.logger.info("GPX Import daemon wake @ #{Time.now}.") 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 if traces and traces.length > 0
traces.each do |trace| traces.each do |trace|
@ -25,7 +25,7 @@ while($running) do
logger.info("GPX Import importing #{trace.name} (#{trace.id}) from #{trace.user.email}") 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' # 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 if gzipped
logger.info("gzipped") logger.info("gzipped")
@ -74,20 +74,28 @@ while($running) do
trace.inserted = true trace.inserted = true
trace.save trace.save
logger.info "done trace #{trace.id} -------------------------------------------------------------------------------" logger.info "done trace #{trace.id}"
# Notifier::deliver_gpx_success(trace, gpx.possible_points) Notifier::deliver_gpx_success(trace, gpx.possible_points)
else else
#trace.destroy `rm /home/osm/gpx/#{trace.id}.gpx`
# Notifier::deliver_gpx_failure(trace, '0 points parsed ok. Do they all have lat,lng,alt,timestamp?') trace.destroy
Notifier::deliver_gpx_failure(trace, '0 points parsed ok. Do they all have lat,lng,alt,timestamp?')
end end
rescue Exception => ex rescue Exception => ex
logger.info ex logger.info ex
ex.backtrace.each {|l| logger.info l } ex.backtrace.each {|l| logger.info l }
#trace.destroy `rm /home/osm/gpx/#{trace.id}.gpx`
# Notifier::deliver_gpx_failure(trace, ex.to_s + ex.backtrace.join("\n") ) trace.destroy
Notifier::deliver_gpx_failure(trace, ex.to_s + ex.backtrace.join("\n") )
end end
end 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 sleep 15.minutes
end end