Skip to content

Commit 9a5e998

Browse files
committed
Added new methods to control storage limits in DBManager
1 parent a51cf6e commit 9a5e998

File tree

3 files changed

+43
-2
lines changed

3 files changed

+43
-2
lines changed

app/mongo_models.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,3 +156,6 @@ class Logs(MongoModel):
156156
filename = fields.CharField()
157157
funcName = fields.CharField()
158158
lineno = fields.IntegerField()
159+
160+
class StorageMeta(MongoModel):
161+
used_size = fields.IntegerField()

app/mongo_odm.py

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
RecognizedAudioToProcess,
2424
RecognizedPresentationsToProcess, Sessions,
2525
TaskAttempts, TaskAttemptsToPassBack, Tasks,
26-
Trainings, TrainingsToProcess)
26+
Trainings, TrainingsToProcess, StorageMeta)
2727
from app.status import (AudioStatus, PassBackStatus, PresentationStatus,
2828
TrainingStatus)
2929
from app.utils import remove_blank_and_none
@@ -42,7 +42,17 @@ def __new__(cls):
4242
return cls.instance
4343

4444
def add_file(self, file, filename=uuid.uuid4()):
45-
return self.storage.save(name=filename, content=file)
45+
try:
46+
file.seek(0, os.SEEK_END)
47+
size = file.tell()
48+
file.seek(0)
49+
except:
50+
if(isinstance(file, str)):
51+
size = len(file)
52+
self.check_storage_limit(size)
53+
_id = self.storage.save(name=filename, content=file)
54+
self.update_storage_size(size)
55+
return _id
4656

4757
def read_and_add_file(self, path, filename=None):
4858
if filename is None:
@@ -67,6 +77,33 @@ def get_file(self, file_id):
6777
except (NoFile, ValidationError, InvalidId) as e:
6878
logger.warning('file_id = {}, {}.'.format(file_id, e))
6979
return None
80+
81+
def _get_or_create_storage_meta(self):
82+
try:
83+
return StorageMeta.objects.get({})
84+
except StorageMeta.DoesNotExist:
85+
meta = StorageMeta(used_size=0).save()
86+
return meta
87+
88+
def get_used_storage_size(self):
89+
return self._get_or_create_storage_meta().used_size
90+
91+
def set_used_storage_size(self, size):
92+
meta = self._get_or_create_storage_meta()
93+
meta.used_size = size
94+
meta.save()
95+
96+
def update_storage_size(self, deltasize):
97+
meta = self._get_or_create_storage_meta()
98+
meta.used_size += deltasize
99+
meta.save()
100+
101+
def check_storage_limit(self, new_file_size):
102+
max_size = int(Config.c.constants.storage_max_size_bytes)*1024*1024
103+
current_size = self.get_used_storage_size()
104+
if current_size + new_file_size > max_size:
105+
logger.warning('current_size = {}, new file size = {}'.format(current_size, new_file_size))
106+
70107

71108

72109
class TrainingsDBManager:

app_conf/config.ini

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ lti_consumer_key=secretconsumerkey
55
lti_consumer_secret=supersecretconsumersecret
66
version_file=VERSION.json
77
backup_path=../dump/database-dump/
8+
storage_max_size_bytes=5000
89

910
[mongodb]
1011
url=mongodb://db:27017/

0 commit comments

Comments
 (0)