Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Massively optimized... everything. #12

Merged
merged 29 commits into from
Mar 23, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
4bcaba7
added base userScore model
JasonLovesDoggo Mar 6, 2024
bdbee31
updated to allow for teams
JasonLovesDoggo Mar 6, 2024
3393e9e
fix accidental indentation
JasonLovesDoggo Mar 6, 2024
560eef6
Optimized time_taken
JasonLovesDoggo Mar 6, 2024
55cf15b
modified it to be update or create
JasonLovesDoggo Mar 6, 2024
8a1a667
Added what I belive should work
JasonLovesDoggo Mar 6, 2024
099c70e
this probably will break... I MEAN WONT BREAK
JasonLovesDoggo Mar 6, 2024
1fa8cf3
Replaced UserCache with ContestScore and UserScore
JasonLovesDoggo Mar 8, 2024
48e37c8
Fix missing imports
JasonLovesDoggo Mar 8, 2024
6d9971c
Merge branch 'scoreboard-optimizations' into merge-fix
JasonLovesDoggo Mar 11, 2024
bd00c59
Merge pull request #11 from mcpt/merge-fix
JasonLovesDoggo Mar 11, 2024
b15bcf1
Update poetry to reflect docker + fix conflicts
JasonLovesDoggo Mar 11, 2024
87bee98
Fixed some type issues.
JasonLovesDoggo Mar 11, 2024
8a41151
Formatting
JasonLovesDoggo Mar 11, 2024
da1f855
Updated setup guide
JasonLovesDoggo Mar 11, 2024
4bd2ea8
Added indexes for slugs
JasonLovesDoggo Mar 11, 2024
dc136de
Heavily optimized scoreboard and user page.
JasonLovesDoggo Mar 11, 2024
163056c
Heavily optimized scoreboard and user page.
JasonLovesDoggo Mar 11, 2024
b9564b7
fixed ref name.
JasonLovesDoggo Mar 11, 2024
92244ea
Optimized Contest Detail.
JasonLovesDoggo Mar 11, 2024
5137217
Fixed scoreboard listing everyone as team.
JasonLovesDoggo Mar 11, 2024
3a781e0
Fixed rank being broken.
JasonLovesDoggo Mar 11, 2024
0539afd
Remove gaps. (lil sketchy)
JasonLovesDoggo Mar 11, 2024
fa5746b
fmt
JasonLovesDoggo Mar 11, 2024
a5e8e1d
Fixed worker count on scoreboard-optimizations
JasonLovesDoggo Mar 11, 2024
8f8f7d1
Added the migration. (wip/subjected to be removed)
JasonLovesDoggo Mar 11, 2024
577712e
Fixed some naming for update or create, added an index to is_correct.
JasonLovesDoggo Mar 23, 2024
9a863ce
Fixed flag captured.
JasonLovesDoggo Mar 23, 2024
19b3112
Added skip to end esk to paginator
JasonLovesDoggo Mar 23, 2024
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
9 changes: 9 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,15 @@ Installation instructions are currently a work in progress. Feel free to join [o

## Development Setup
1. Clone the repository
### Using Poetry (Recommended)
2. Run `pip install poetry`
3. Run `poetry install`
4. Run `poetry shell`
5. Create a file called config.py with the contents of [Docker Setup #2](#using-docker)
5. Run `python manage.py migrate && python manage.py createsuperuser`
6. To start the server, run `python manage.py runserver`

### Using Docker
2. Go to mCTF/docker_config.py, Set DEBUG to True and root to "http://localhost:28730" as well as deleting import config2.
3. docker build -t mctf .
4. docker run -p 28730:28730 mctf
Expand Down
3 changes: 1 addition & 2 deletions container/gunicorn.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import multiprocessing


workers = multiprocessing.cpu_count()
workers = (2 * multiprocessing.cpu_count()) + 1
21 changes: 12 additions & 9 deletions gameserver/admin.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
import django.db
from adminsortable2.admin import SortableInlineAdminMixin
from django.contrib import admin
from django.contrib.auth import get_user_model
from django.contrib.flatpages.admin import FlatPageAdmin
from django.contrib.flatpages.models import FlatPage
from django.db.models import Q
from django.utils.translation import gettext_lazy as _

from . import models
Expand Down Expand Up @@ -81,7 +79,9 @@ def get_readonly_fields(self, request, obj=None):
fields = self.readonly_fields
if request.user.is_superuser:
return fields
if request.user.is_superuser or request.user.has_perm("gameserver.change_problem_visibility"):
if request.user.is_superuser or request.user.has_perm(
"gameserver.change_problem_visibility"
):
return fields
fields += ("is_public",)
return fields
Expand All @@ -97,7 +97,6 @@ def get_authors(self, obj):


class SubmissionAdmin(admin.ModelAdmin):

list_display = [
"problem",
"date_created",
Expand All @@ -114,13 +113,14 @@ class SubmissionAdmin(admin.ModelAdmin):
"user__username",
"user__full_name",
]

def display_firstblooded(self, obj: models.Submission):
return obj.is_firstblood

display_firstblooded.short_description = "Firstblooded"
display_firstblooded.boolean = True
# return obj.firstblooded
# return obj.firstblooded


class OrganizationAdmin(admin.ModelAdmin):
list_display = ["__str__", "owner", "member_count", "is_open"]
Expand Down Expand Up @@ -247,7 +247,9 @@ def get_queryset(self, request):

def get_readonly_fields(self, request, obj=None):
fields = self.readonly_fields
if request.user.is_superuser or request.user.has_perm("gameserver.change_contest_visibility"):
if request.user.is_superuser or request.user.has_perm(
"gameserver.change_contest_visibility"
):
return fields
fields += ("is_public",)
return fields
Expand Down Expand Up @@ -278,7 +280,8 @@ class UserAdmin(admin.ModelAdmin):


admin.site.register(User, UserAdmin)
admin.site.register(models.UserCache)
admin.site.register(models.ContestScore)
admin.site.register(models.UserScore)
admin.site.register(models.Problem, ProblemAdmin)
admin.site.register(models.Submission, SubmissionAdmin)
admin.site.register(models.ProblemType)
Expand Down
5 changes: 0 additions & 5 deletions gameserver/forms/contest.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,8 @@
from allauth.account.forms import SignupForm
from django import forms
from django.conf import settings
from django.contrib.auth import get_user_model
from django.core.exceptions import ValidationError
from django.db.models import Q
from django.forms import ModelForm

from .. import models
from ..models import choices

User = get_user_model()

Expand Down
7 changes: 0 additions & 7 deletions gameserver/forms/organization.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,6 @@
from allauth.account.forms import SignupForm
from django import forms
from django.conf import settings
from django.contrib.auth import get_user_model
from django.core.exceptions import ValidationError
from django.db.models import Q
from django.forms import ModelForm

from .. import models
from ..models import choices

User = get_user_model()

Expand Down
7 changes: 0 additions & 7 deletions gameserver/forms/problem.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,6 @@
from allauth.account.forms import SignupForm
from django import forms
from django.conf import settings
from django.contrib.auth import get_user_model
from django.core.exceptions import ValidationError
from django.db.models import Q
from django.forms import ModelForm

from .. import models
from ..models import choices

User = get_user_model()

Expand Down
1 change: 0 additions & 1 deletion gameserver/forms/profile.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
from django import forms
from django.conf import settings
from django.contrib.auth import get_user_model
from django.core.exceptions import ValidationError
from django.db.models import Q
from django.forms import ModelForm

Expand Down
5 changes: 0 additions & 5 deletions gameserver/forms/team.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,8 @@
from allauth.account.forms import SignupForm
from django import forms
from django.conf import settings
from django.contrib.auth import get_user_model
from django.core.exceptions import ValidationError
from django.db.models import Q
from django.forms import ModelForm

from .. import models
from ..models import choices

User = get_user_model()

Expand Down
11 changes: 8 additions & 3 deletions gameserver/middleware.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,14 +41,19 @@ class RedirectFallbackTemporaryMiddleware(RedirectFallbackMiddleware):

l = logging.getLogger(__name__)


class ErrorLogMiddleware:
def __init__(self, get_response):
self.get_response = get_response

def __call__(self, request):
response = self.get_response(request)
return response

def process_exception(self, request, exception):
if exception:
l.error(f'URI: {request.build_absolute_uri()}\n'
f'Exception: {repr(exception)}\n'
f'{traceback.format_exc()}')
l.error(
f"URI: {request.build_absolute_uri()}\n"
f"Exception: {repr(exception)}\n"
f"{traceback.format_exc()}"
)
6 changes: 3 additions & 3 deletions gameserver/migrations/0001_initial.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
# Generated by Django 4.0.1 on 2022-01-25 05:23

from django.conf import settings
import django.contrib.auth.models
import django.contrib.auth.validators
import django.core.validators
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone
from django.conf import settings
from django.db import migrations, models

import gameserver.models.problem
import gameserver.models.profile

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
# Generated by Django 4.0.1 on 2022-01-26 23:58

from django.db import migrations, models
import gameserver.models.profile


class Migration(migrations.Migration):
Expand Down
1 change: 1 addition & 0 deletions gameserver/migrations/0012_problem_opaque_id.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# Generated by Django 4.0.1 on 2022-02-06 21:52

from django.db import migrations, models

import gameserver.models.problem


Expand Down
1 change: 1 addition & 0 deletions gameserver/migrations/0013_alter_problem_opaque_id.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# Generated by Django 4.0.1 on 2022-02-08 02:50

from django.db import migrations, models

import gameserver.models.problem


Expand Down
2 changes: 2 additions & 0 deletions gameserver/migrations/0014_regen_opaque_id.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
from django.db import migrations

import gameserver.models.problem


def regen_opaque_id(apps, schema_editor):
Problem = apps.get_model('gameserver', 'Problem')
for row in Problem.objects.all():
Expand Down
1 change: 1 addition & 0 deletions gameserver/migrations/0015_alter_problem_opaque_id.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# Generated by Django 4.0.1 on 2022-02-08 03:03

from django.db import migrations, models

import gameserver.models.problem


Expand Down
9 changes: 6 additions & 3 deletions gameserver/migrations/0016_move_problem_files.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
from django.db import migrations, models
import gameserver.models.problem
from shutil import move
import os
from shutil import move

from django.conf import settings
from django.db import migrations

import gameserver.models.problem


def move_problem_files(apps, schema_editor):
MEDIA_ROOT = settings.MEDIA_ROOT
Expand Down
2 changes: 1 addition & 1 deletion gameserver/migrations/0025_problem_firstblood.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Generated by Django 4.0.1 on 2022-11-28 17:20

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


def compute_firstblood(apps, schema_editor):
Expand Down
3 changes: 1 addition & 2 deletions gameserver/migrations/0026_problem_firstblood_2.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
# Generated by Django 4.0.1 on 2022-11-28 17:20

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


def compute_firstblood(apps, schema_editor):
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
# Generated by Django 4.0.1 on 2023-02-28 19:17

import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
import gameserver.models.profile


class Migration(migrations.Migration):
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# Generated by Django 4.0.1 on 2023-02-28 19:36

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


class Migration(migrations.Migration):
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
# Generated by Django 4.0.1 on 2023-03-09 00:47

from django.db import migrations, models
import gameserver.models.profile


class Migration(migrations.Migration):
Expand Down
1 change: 0 additions & 1 deletion gameserver/migrations/0032_alter_user_timezone_and_more.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
# Generated by Django 4.0.1 on 2024-03-05 02:51

from django.db import migrations, models
import gameserver.models.profile


class Migration(migrations.Migration):
Expand Down

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion gameserver/models/abstract.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

class Category(models.Model):
name = models.CharField(max_length=30)
slug = models.SlugField(unique=True)
slug = models.SlugField(unique=True, db_index=True)
description = models.TextField(blank=True)

class Meta:
Expand Down
Loading
Loading