various gpx bits
This commit is contained in:
parent
1bbe59b6a7
commit
e25cbb009a
3 changed files with 25 additions and 16 deletions
|
@ -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."
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue