Add locking to avoid duplicate entries
This commit is contained in:
@@ -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')
|
||||
|
||||
Reference in New Issue
Block a user