Added eta field to postgres
authorJean-Michel Nirgal Vourgère <jmv@nirgal.com>
Thu, 12 Aug 2010 13:30:44 +0000 (13:30 +0000)
committerJean-Michel Nirgal Vourgère <jmv@nirgal.com>
Thu, 12 Aug 2010 13:30:44 +0000 (13:30 +0000)
bin/common.py
bin/djais/models.py
bin/extras/shipplotter_parselogs.py

index afa34d355a15a9d5a0947f4f5cc82a6db738b561..5bad99bfb0f4fdfeefe4f682f808e76e04e51231 100755 (executable)
@@ -581,6 +581,11 @@ def _sql_add_nmea5(strmmsi, timestamp, imo, name, callsign, type, \
     sqlinfo['dim_port'] = dim_port
     sqlinfo['dim_starboard'] = dim_starboard
     sqlinfo['destination'] = None
+    eta = '%02d%02d%02d%02d' % ( eta_M, eta_D, eta_h, eta_m)
+    if eta == '00000000':
+        # FIXME tempory hack for corrupted db/latest/*.nmea5 file
+        eta = '00002460'
+    sqlinfo['eta'] = eta
     if destination:
         destination = destination.replace('\0', ' ').rstrip(' @\0')
     sqlinfo['destination'] = destination or None
@@ -598,8 +603,8 @@ def _sql_add_nmea5(strmmsi, timestamp, imo, name, callsign, type, \
         sqlexec(u'UPDATE vessel SET dim_bow = %(dim_bow)s, dim_stern = %(dim_stern)s WHERE mmsi=%(mmsi)s AND ((dim_port = 0 OR dim_stern=0) OR updated<%(updated)s)', sqlinfo)
     if sqlinfo['dim_port'] or sqlinfo['dim_starboard']:
         sqlexec(u'UPDATE vessel SET dim_port = %(dim_port)s, dim_starboard = %(dim_starboard)s WHERE mmsi=%(mmsi)s AND ((dim_port = 0 OR dim_starboard=0) OR updated<%(updated)s)', sqlinfo)
-    if sqlinfo['destination']:
-        sqlexec(u'UPDATE vessel SET destination = %(destination)s WHERE mmsi=%(mmsi)s AND (destination IS NULL OR updated<%(updated)s)', sqlinfo)
+    if sqlinfo['destination'] or sqlinfo['eta'] != '00002460':
+        sqlexec(u"UPDATE vessel SET destination = %(destination)s, eta = %(eta)s WHERE mmsi=%(mmsi)s AND (destination IS NULL OR eta = '00002460' OR updated<%(updated)s)", sqlinfo)
     sqlexec(u'UPDATE vessel SET (updated, source) = (%(updated)s, %(source)s) WHERE mmsi=%(mmsi)s AND updated<%(updated)s', sqlinfo)
     dbcommit()
 
index 813e6b5319fd7973f51b36d916ec7693f8b112bf..ef9a03f5ce7ed1b97ca66b1c92a2ce93d0bb0c52 100644 (file)
@@ -83,9 +83,14 @@ class Vessel(models.Model):
     imo = models.IntegerField()
     callsign = models.CharField(max_length=7)
     type = models.IntegerField()
-    destination = models.CharField(max_length=20)
+    destination = models.CharField(max_length=20, blank=True, null=True)
     updated = models.DateTimeField()
     source = models.CharField(max_length=8)
+    dim_bow = models.IntegerField(default=0)
+    dim_stern = models.IntegerField(default=0)
+    dim_port = models.IntegerField(default=0)
+    dim_starboard = models.IntegerField(default=0)
+    eta = models.CharField(max_length=8, default='00002460') # format MMDDhhmm
     class Meta:
         db_table = u'vessel'
     def __unicode__(self):
index 98222780e1a7dfb46715567ec03f26cdaa1ce551..3d71ba331f5dd29917997ab2cef57eb7fc573061 100755 (executable)
@@ -128,24 +128,40 @@ def parse_file(filename, dry_run):
         eta_M = eta_D = 0
         eta_h = 24
         eta_m = 60
-        if len(eta) > 0 and eta != 'unknown' and eta[0] not in ('*.'):
+        if len(eta) > 0 and eta != 'unknown' and eta[0] not in '*.':
             try:
                 eta_M = monthes.index(eta[:3])+1
+            except Exception:
+                pass
+            try:
                 eta_D = int(eta[3:5])
+            except Exception:
+                pass
+            try:
                 eta_h = int(eta[6:8])
+            except Exception:
+                pass
+            try:
                 eta_m = int(eta[9:11])
             except Exception:
                 pass
+
+            if eta_M == 0 and eta_D == 0 and eta_h == 0 and eta_m == 0:
+                # This should not happen, but it does
+                eta_h = 24
+                eta_m = 60
+                
         source = 'SP'+info['userid1']+info['userid2']
         imo = info['imo']
 
+        #for i in (mmsi, timestamp, imo, name, callsign, type_, dim_bow, dim_stern, dim_port, dim_starboard, eta_M, eta_D, eta_h, eta_m, draught, destination, source):
+        #    print repr(i),
+        #print
+
         if not dry_run:
             if not add_nmea1(mmsi, timestamp, status, AIS_ROT_NOT_AVAILABLE, sog, latitude, longitude, cog, heading, source):
                 logging.debug('%s nmea1 not updated', mmsi)
 
-            #for i in (mmsi, timestamp, imo, name, callsign, type_, dim_bow, dim_stern, dim_port, dim_starboard, eta_M, eta_D, eta_h, eta_m, draught, destination, source):
-            #    print repr(i),
-            #print
             if not add_nmea5_partial(mmsi, timestamp, imo, name, callsign, type_, dim_bow, dim_stern, dim_port, dim_starboard, eta_M, eta_D, eta_h, eta_m, draught, destination, source):
                 logging.debug('%s nmea5 not updated', mmsi)
     f.close()