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
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."

View file

@ -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

View file

@ -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