Skip to content
This repository was archived by the owner on Sep 4, 2024. It is now read-only.

Optimize backend performance #423

Draft
wants to merge 53 commits into
base: release-v0.1
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
babe21c
Bump cryptography from 41.0.1 to 41.0.4 in /backend
dependabot[bot] Sep 21, 2023
7a5be12
feat: added new equivalence
LukasOsti Sep 25, 2023
99f1e27
Bump postcss from 8.4.24 to 8.4.31 in /frontendVue3
dependabot[bot] Oct 7, 2023
1ab6a2d
Feat. Added Indeces for Files and Families
MeisterSeSe Oct 13, 2023
526ef9e
Feat.: optimizized Database Access for ConfirmedUpload File
MeisterSeSe Oct 13, 2023
527af63
Feat: Implemented Caching for Families and Confirmed Models
MeisterSeSe Oct 16, 2023
e943217
Bump urllib3 from 2.0.3 to 2.0.7 in /backend
dependabot[bot] Oct 17, 2023
a49b421
Feat: Impl Owner specific cache for families
MeisterSeSe Oct 19, 2023
050b77e
Feat: Instantly create new Cache on FileConfirm
MeisterSeSe Oct 19, 2023
b7ae2b9
Bump @babel/traverse from 7.22.5 to 7.23.2 in /frontend
dependabot[bot] Oct 19, 2023
d752da9
Refactor: Adapted Multiple Upload Card
MeisterSeSe Oct 19, 2023
5899183
Refactor: Adapted Single Upload Card
MeisterSeSe Oct 19, 2023
0b913b4
Refactor: Adapted Zip Upload Card
MeisterSeSe Oct 19, 2023
e21e4d2
Feat: Implemented DefaultLicense
MeisterSeSe Oct 19, 2023
b807170
Feat: Added Default License to Backend, which will be created after m…
MeisterSeSe Oct 19, 2023
36d61a7
Fix: Adapted Test to new standardLicense
MeisterSeSe Oct 19, 2023
0add57b
Feat: Made Family optional for Upload
MeisterSeSe Oct 23, 2023
7501342
Feat: Implemented FIlter for Tags
MeisterSeSe Oct 20, 2023
282265a
Fix: Added TagsFIlter for all Views
MeisterSeSe Oct 20, 2023
90a1395
Fix: Removed Register Button
MeisterSeSe Oct 20, 2023
66efe7e
Feat: Added Private Field for File Model
MeisterSeSe Oct 27, 2023
482c754
Feat: Added new ViewSets for PrivateFileUpload
MeisterSeSe Oct 27, 2023
1fc3561
Feat: Implemented Possibility to upload private Feature from LocalStore
MeisterSeSe Oct 27, 2023
c4cca1c
Fix: adapted Test, version now is none
MeisterSeSe Oct 27, 2023
fdc9a83
Merge pull request #415 from OBDDimal/issue-414-equivalence-constraint
LukasOsti Nov 2, 2023
800a312
Fix: Removed unnecessary user_core.core DB Accesses
MeisterSeSe Nov 2, 2023
374d347
Revert "Fix: Removed unnecessary user_core.core DB Accesses"
MeisterSeSe Nov 2, 2023
3b236e3
Bump django from 4.2.2 to 4.2.7 in /backend
dependabot[bot] Nov 2, 2023
43a7d41
Migrate Tutorial Mode (#405)
tomatenhans Nov 6, 2023
6ecb2b3
Merge branch 'release-v0.1' into dependabot/pip/backend/cryptography-…
MeisterSeSe Nov 10, 2023
e0c4ff2
Merge pull request #412 from OBDDimal/dependabot/pip/backend/cryptogr…
MeisterSeSe Nov 10, 2023
83edbad
Merge pull request #419 from OBDDimal/dependabot/npm_and_yarn/fronten…
MeisterSeSe Nov 10, 2023
b321a0b
Merge pull request #422 from OBDDimal/dependabot/pip/backend/urllib3-…
MeisterSeSe Nov 10, 2023
96f592d
Merge pull request #425 from OBDDimal/dependabot/npm_and_yarn/fronten…
MeisterSeSe Nov 10, 2023
a3c8612
Merge branch 'release-v0.1' into dependabot/pip/backend/django-4.2.7
MeisterSeSe Nov 10, 2023
bdbee99
Merge pull request #428 from OBDDimal/dependabot/pip/backend/django-4…
MeisterSeSe Nov 10, 2023
76159a7
Merge pull request #429 from OBDDimal/426-optimize-fm-table
MeisterSeSe Nov 10, 2023
5ba5bb6
Bump axios from 0.27.2 to 1.6.0 in /frontend
dependabot[bot] Nov 11, 2023
8ff65ac
Bump axios from 1.4.0 to 1.6.0 in /frontendVue3
dependabot[bot] Nov 11, 2023
92c79e2
Fix: Reduce core.user_user calls
MeisterSeSe Nov 11, 2023
f5d82c8
Merge branch 'release-v0.1' into dependabot/npm_and_yarn/frontendVue3…
MeisterSeSe Nov 12, 2023
e4c7637
Merge pull request #431 from OBDDimal/dependabot/npm_and_yarn/fronten…
MeisterSeSe Nov 12, 2023
f38d820
Merge pull request #430 from OBDDimal/dependabot/npm_and_yarn/fronten…
MeisterSeSe Nov 12, 2023
472f93d
Feat. Added Indeces for Files and Families
MeisterSeSe Oct 13, 2023
833b5ad
Feat.: optimizized Database Access for ConfirmedUpload File
MeisterSeSe Oct 13, 2023
c0bddab
Feat: Implemented Caching for Families and Confirmed Models
MeisterSeSe Oct 16, 2023
68a7512
Feat: Impl Owner specific cache for families
MeisterSeSe Oct 19, 2023
6164ef7
Feat: Instantly create new Cache on FileConfirm
MeisterSeSe Oct 19, 2023
48f7fb9
Fix: Removed unnecessary user_core.core DB Accesses
MeisterSeSe Nov 2, 2023
af3d7da
Revert "Fix: Removed unnecessary user_core.core DB Accesses"
MeisterSeSe Nov 2, 2023
27523a8
Fix: Reduce core.user_user calls
MeisterSeSe Nov 11, 2023
dda2736
Create 0016_merge_20231113_0937.py
MeisterSeSe Nov 13, 2023
b1a05d6
Merge branch 'Optimize-Backend-Performance' of https://github.com/OBD…
MeisterSeSe Nov 13, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# Generated by Django 4.2.2 on 2023-10-12 10:44

from django.db import migrations


class Migration(migrations.Migration):

dependencies = [
('core_analysis', '0018_alter_dockerprocess_resources'),
]

operations = [
migrations.RemoveField(
model_name='dockerprocess',
name='file_to_analyse',
),
migrations.RemoveField(
model_name='dockerprocess',
name='owner',
),
migrations.DeleteModel(
name='Analysis',
),
migrations.DeleteModel(
name='DockerProcess',
),
]
18 changes: 18 additions & 0 deletions backend/core/fileupload/migrations/0012_alter_license_label.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 4.2.2 on 2023-10-19 12:50

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('core_fileupload', '0011_analysisresult'),
]

operations = [
migrations.AlterField(
model_name='license',
name='label',
field=models.TextField(default='CC BY - SA 4.0 DEED'),
),
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Generated by Django 4.2.2 on 2023-10-12 10:44

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('core_fileupload', '0011_analysisresult'),
]

operations = [
migrations.AddIndex(
model_name='file',
index=models.Index(fields=['owner', 'confirmation_token'], name='core_fileup_owner_i_4178bf_idx'),
),
migrations.AddIndex(
model_name='file',
index=models.Index(fields=['confirmation_token'], name='core_fileup_confirm_22c787_idx'),
),
migrations.AddIndex(
model_name='file',
index=models.Index(fields=['family', 'version', 'is_confirmed'], name='core_fileup_family__df0347_idx'),
),
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# Generated by Django 4.2.2 on 2023-10-12 10:50

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('core_fileupload', '0012_file_core_fileup_owner_i_4178bf_idx_and_more'),
]

operations = [
migrations.AddIndex(
model_name='family',
index=models.Index(fields=['owner'], name='core_fileup_owner_i_4e6325_idx'),
),
migrations.AddIndex(
model_name='file',
index=models.Index(fields=['owner'], name='core_fileup_owner_i_3c733f_idx'),
),
migrations.AddIndex(
model_name='file',
index=models.Index(fields=['family'], name='core_fileup_family__57b383_idx'),
),
migrations.AddIndex(
model_name='file',
index=models.Index(fields=['version'], name='core_fileup_version_b47e16_idx'),
),
migrations.AddIndex(
model_name='file',
index=models.Index(fields=['is_confirmed'], name='core_fileup_is_conf_ba01cb_idx'),
),
migrations.AddIndex(
model_name='license',
index=models.Index(fields=['label'], name='core_fileup_label_70ea9c_idx'),
),
migrations.AddIndex(
model_name='tag',
index=models.Index(fields=['label'], name='core_fileup_label_fa57bd_idx'),
),
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Generated by Django 4.2.2 on 2023-10-23 13:08

from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

dependencies = [
('core_fileupload', '0012_alter_license_label'),
]

operations = [
migrations.AlterField(
model_name='file',
name='family',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='core_fileupload.family'),
),
migrations.AlterField(
model_name='file',
name='version',
field=models.CharField(blank=True, max_length=16, null=True),
),
]
18 changes: 18 additions & 0 deletions backend/core/fileupload/migrations/0014_file_private.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 4.2.2 on 2023-10-26 07:29

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('core_fileupload', '0013_file_private_alter_file_family_alter_file_version'),
]

operations = [
migrations.AddField(
model_name='file',
name='private',
field=models.BooleanField(default=False),
),
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Generated by Django 4.2.2 on 2023-10-12 11:02

from django.db import migrations


class Migration(migrations.Migration):

dependencies = [
('core_fileupload', '0013_family_core_fileup_owner_i_4e6325_idx_and_more'),
]

operations = [
migrations.RemoveIndex(
model_name='file',
name='core_fileup_owner_i_4178bf_idx',
),
migrations.RemoveIndex(
model_name='file',
name='core_fileup_confirm_22c787_idx',
),
migrations.RemoveIndex(
model_name='file',
name='core_fileup_owner_i_3c733f_idx',
),
migrations.RemoveIndex(
model_name='file',
name='core_fileup_version_b47e16_idx',
),
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Generated by Django 4.2.2 on 2023-10-13 06:50

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('core_fileupload', '0014_remove_file_core_fileup_owner_i_4178bf_idx_and_more'),
]

operations = [
migrations.RemoveIndex(
model_name='file',
name='core_fileup_family__df0347_idx',
),
migrations.RemoveIndex(
model_name='license',
name='core_fileup_label_70ea9c_idx',
),
migrations.RemoveIndex(
model_name='tag',
name='core_fileup_label_fa57bd_idx',
),
migrations.AddIndex(
model_name='file',
index=models.Index(fields=['owner'], name='core_fileup_owner_i_3c733f_idx'),
),
]
14 changes: 14 additions & 0 deletions backend/core/fileupload/migrations/0016_merge_20231113_0937.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Generated by Django 4.2.2 on 2023-11-13 08:37

from django.db import migrations


class Migration(migrations.Migration):

dependencies = [
('core_fileupload', '0014_file_private'),
('core_fileupload', '0015_remove_file_core_fileup_family__df0347_idx_and_more'),
]

operations = [
]
58 changes: 49 additions & 9 deletions backend/core/fileupload/models.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
from django.db import models
from django.db.models.signals import post_migrate
from django.dispatch import receiver

from core.user.models import User
from django.core.files.base import ContentFile
from django.template.defaultfilters import slugify # new
Expand All @@ -20,6 +23,9 @@ class Family(models.Model):
class Meta:
verbose_name = "family"
verbose_name_plural = "families"
indexes = [
models.Index(fields=['owner']),
]

def __str__(self):
# do not change that
Expand Down Expand Up @@ -67,21 +73,35 @@ def create(self, **kwargs):
lic.save()
return lic

def create_default_license(self):
"""
Creates the default license.
"""
default_license_label = "CC BY - SA 4.0 DEED"
default_license, created = self.get_or_create(label=default_license_label)
return default_license

class License(models.Model):
"""
Data Model for a license in the backend
"""

objects = LicenseManager()
_default_license = "CC BY - Mention"
_default_license = "CC BY - SA 4.0 DEED"

label = models.TextField(blank=False, default=_default_license)

def __str__(self):
# do not change that
return f"{self.id}"

@receiver(post_migrate)
def create_default_license(sender, **kwargs):
"""
Creates the default license after migrations.
"""
License.objects.create_default_license()


# -------------------------------------------------- File Model --------------------------------------------------
class FileManager(models.Manager):
Expand All @@ -101,13 +121,14 @@ def save_file(self, local_file, **kwargs):
if tags is None:
raise TypeError("Tags is not set")
family = kwargs.get("family", None)
# get file from id
if kwargs.get("version", None) is None:
raise TypeError("Version is not set")
version = kwargs.get("version", None)
private = kwargs.get("private", None)
# get license from id
if kwargs.get("license", None) is None:
if kwargs.get("license", None) is None and kwargs.get("private") is None:
raise TypeError("License not set!")

file = self.model(**kwargs)

file.save()
file.tags.set(tags)
file.save()
Expand Down Expand Up @@ -140,14 +161,14 @@ class File(models.Model):
relative_upload_dir = "files/"

owner = models.ForeignKey(User, on_delete=models.RESTRICT)
family = models.ForeignKey(Family, on_delete=models.CASCADE)
family = models.ForeignKey(Family, on_delete=models.CASCADE, null=True, blank=True)
label = models.CharField(blank=False, max_length=255)
description = models.TextField(blank=True)
local_file = models.FileField(upload_to=relative_upload_dir)
uploaded_at = models.DateTimeField(auto_now_add=True)
license = models.ForeignKey(License, on_delete=models.CASCADE)
tags = models.ManyToManyField(Tag)
version = models.CharField(blank=False, null=False, max_length=16)
version = models.CharField(blank=True, null=True, max_length=16)
transpiled_file = models.FileField(
null=True, blank=True, upload_to=relative_upload_dir
)
Expand All @@ -159,6 +180,23 @@ class File(models.Model):
) # indicates if the user confirmed the upload
slug = models.SlugField(null=True)
confirmation_token = models.CharField(default="", max_length=255)
private = models.BooleanField(
default=False
)

class Meta:
indexes = [
models.Index(fields=['owner']),
models.Index(fields=['family']),
models.Index(fields=['is_confirmed']),
]

class Meta:
indexes = [
models.Index(fields=['owner']),
models.Index(fields=['family']),
models.Index(fields=['is_confirmed']),
]

def __str__(self):
# do not change that
Expand All @@ -169,17 +207,19 @@ def save(self, *args, **kwargs): # new
self.slug = slugify(self.label)
return super().save(*args, **kwargs)


class Analysis(models.Model):
admin_only = models.BooleanField(default=False)
disabled = models.BooleanField(default=False)
query = models.TextField()

depends_on = models.ManyToManyField("self", symmetrical=False)


class AnalysisResult(models.Model):
triggered = models.BooleanField(default=False)
error = models.BooleanField(default=False)
result = models.JSONField(null=True)

analysis = models.ForeignKey(Analysis, on_delete=models.CASCADE)
file = models.ForeignKey(File, on_delete=models.CASCADE)
Loading