Add locking to avoid duplicate entries

This commit is contained in:
Roberto Rosario
2012-07-05 14:49:26 -04:00
parent 383308cd73
commit 4439b9a6de

View File

@@ -23,6 +23,7 @@ from django.conf import settings
from common.models import Singleton
from common.utils import pretty_size
from main import __version__ as mayan_version
from lock_manager import Lock, LockError
FORM_SUBMIT_URL = 'https://docs.google.com/spreadsheet/formResponse'
FORM_KEY = 'dGZrYkw3SDl5OENMTG15emp1UFFEUWc6MQ'
@@ -100,40 +101,48 @@ class Installation(Singleton):
def submit(self):
try:
dictionary = {}
if self.is_lsb:
dictionary.update(
{
'is_lsb': unicode(self.is_lsb),
'distributor_id': unicode(self.distributor_id),
'description': unicode(self.description),
'release': unicode(self.release),
'codename': unicode(self.codename),
'sysinfo': unicode(self.sysinfo),
}
)
dictionary.update(
{
'uuid': self.uuid,
'architecture': unicode(self.architecture),
'python_version': unicode(self.python_version),
'platform': unicode(self.platform),
'machine': unicode(self.machine),
'processor': unicode(self.processor),
'cpus': unicode(self.cpus),
'total_phymem': unicode(self.total_phymem),
'mayan_version': unicode(self.mayan_version),
'fabfile': unicode(self.fabfile),
}
)
requests.post(FORM_SUBMIT_URL, data={'formkey': FORM_KEY, FORM_RECEIVER_FIELD: dumps(dictionary)}, timeout=TIMEOUT)
except (requests.exceptions.Timeout, requests.exceptions.ConnectionError):
lock = Lock.acquire_lock('upload_stats')
except LockError:
pass
else:
self.is_first_run = False
self.save()
try:
dictionary = {}
if self.is_lsb:
dictionary.update(
{
'is_lsb': unicode(self.is_lsb),
'distributor_id': unicode(self.distributor_id),
'description': unicode(self.description),
'release': unicode(self.release),
'codename': unicode(self.codename),
'sysinfo': unicode(self.sysinfo),
}
)
dictionary.update(
{
'uuid': self.uuid,
'architecture': unicode(self.architecture),
'python_version': unicode(self.python_version),
'platform': unicode(self.platform),
'machine': unicode(self.machine),
'processor': unicode(self.processor),
'cpus': unicode(self.cpus),
'total_phymem': unicode(self.total_phymem),
'mayan_version': unicode(self.mayan_version),
'fabfile': unicode(self.fabfile),
}
)
requests.post(FORM_SUBMIT_URL, data={'formkey': FORM_KEY, FORM_RECEIVER_FIELD: dumps(dictionary)}, timeout=TIMEOUT)
except (requests.exceptions.Timeout, requests.exceptions.ConnectionError):
pass
else:
self.is_first_run = False
self.save()
finally:
lock.release()
class Meta:
verbose_name = verbose_name_plural = _(u'installation details')