various gpx bits
authorSteve Coast <steve@asklater.com>
Thu, 10 May 2007 22:14:11 +0000 (22:14 +0000)
committerSteve Coast <steve@asklater.com>
Thu, 10 May 2007 22:14:11 +0000 (22:14 +0000)
app/controllers/trace_controller.rb
app/models/trace.rb
lib/daemons/gpx_import.rb

index b4e9d7f..541e0f8 100644 (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."
index 2ebf08e..0d9e886 100644 (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
index 9e7e906..82232e4 100755 (executable)
@@ -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}")
-\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")
@@ -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