WIP: add logfile and local IDs
diff --git a/crashreports/models.py b/crashreports/models.py
index 449db3c..96507b0 100644
--- a/crashreports/models.py
+++ b/crashreports/models.py
@@ -1,5 +1,6 @@
 # -*- coding: utf-8 -*-
 from django.db import models
+from django.db import transaction
 
 from django.contrib.auth.models import User
 from taggit.managers import TaggableManager
@@ -20,6 +21,22 @@
     tags = TaggableManager(blank=True)
     last_heartbeat = models.DateTimeField(null=True, blank=True)
     token = models.CharField(max_length=200, null=True, blank=True)
+    next_per_crashreport_key = models.PositiveIntegerField(default=1)
+    next_per_heartbeat_key = models.PositiveIntegerField(default=1)
+
+    @transaction.atomic
+    def get_crashreport_key(self):
+        ret = self.next_per_crashreport_key
+        self.next_per_crashreport_key = self.next_per_crashreport_key + 1
+        self.save()
+        return ret
+
+    @transaction.atomic
+    def get_heartbeat_key(self):
+        ret = self.next_per_heartbeat_key
+        self.next_per_crashreport_key = self.next_per_heartbeat_key + 1
+        self.save()
+        return ret
 
 
 def crashreport_file_name(instance, filename):
@@ -42,6 +59,20 @@
     power_off_reason = models.CharField(max_length=200)
     date = models.DateTimeField()
     tags = TaggableManager(blank=True)
+    device_local_id = models.PositiveIntegerField(blank=True)
+    next_crashreport_key = models.PositiveIntegerField(default=1)
+
+    @transaction.atomic
+    def get_logfile_key(self):
+        ret = self.next_logfile_key
+        self.next_logfile_key = self.next_logfile_key + 1
+        self.save()
+        return ret
+
+    def save(self, *args, **kwargs):
+        if not self.device_local_id:
+            self.device_local_id = self.device.get_crashreport_key()
+        super(Crashreport, self).save(*args, **kwargs)
 
     def _get_uuid(self):
         "Returns the person's full name."
@@ -53,6 +84,12 @@
     logfile_type = models.TextField(max_length=36, default="last_kmsg")
     crashreport = models.ForeignKey(Crashreport, on_delete=models.CASCADE)
     logfile = models.FileField(upload_to=crashreport_file_name)
+    crashreport_local_id = models.PositiveIntegerField(blank=True)
+
+    def save(self, *args, **kwargs):
+        if not self.device_local_id:
+            self.device_local_id = self.crashreport.next_logfile_key()
+        super(LogFile, self).save(*args, **kwargs)
 
 
 class HeartBeat(models.Model):
@@ -61,6 +98,12 @@
     uptime = models.CharField(max_length=200)
     build_fingerprint = models.CharField(max_length=200)
     date = models.DateTimeField()
+    device_local_id = models.PositiveIntegerField(blank=True)
+
+    def save(self, *args, **kwargs):
+        if not self.device_local_id:
+            self.device_local_id = self.device.get_heartbeat_key()
+        super(HeartBeat, self).save(*args, **kwargs)
 
     def _get_uuid(self):
         "Returns the person's full name."