From 8a9940a3af004e3451d4da7339e42c2e76eaf6f9 Mon Sep 17 00:00:00 2001 From: Ben Muschol Date: Sun, 16 Feb 2025 18:13:17 -0500 Subject: [PATCH] remove some stuff --- Dockerfile.web | 24 --- bin/setup_pythonanywhere.sh | 41 ------ mittab/apps/tab/forms.py | 15 +- .../tab/management/commands/export_stats.py | 3 - .../apps/tab/management/commands/load_test.py | 138 ------------------ mittab/apps/tab/pairing_views.py | 10 +- mittab/settings.py | 50 +++++-- 7 files changed, 46 insertions(+), 235 deletions(-) delete mode 100644 Dockerfile.web delete mode 100755 bin/setup_pythonanywhere.sh delete mode 100644 mittab/apps/tab/management/commands/load_test.py diff --git a/Dockerfile.web b/Dockerfile.web deleted file mode 100644 index a58989831..000000000 --- a/Dockerfile.web +++ /dev/null @@ -1,24 +0,0 @@ -FROM python:3.7 - -# install dependenices -RUN apt-get update && apt-get upgrade -y && \ - apt-get install && apt-get install -y vim default-mysql-client -# sets up nodejs to install npm -RUN curl -sL https://deb.nodesource.com/setup_12.x | bash -RUN apt-get install nodejs - -WORKDIR /var/www/tab -COPY Pipfile ./ -COPY Pipfile.lock ./ -COPY package.json ./ -COPY package-lock.json ./ -RUN pip install pipenv -RUN pipenv install --deploy --system -RUN mkdir /var/tmp/django_cache - -# setup django -COPY manage.py ./ -COPY setup.py ./ -COPY ./mittab ./mittab -COPY ./assets ./assets -COPY settings.yaml ./ diff --git a/bin/setup_pythonanywhere.sh b/bin/setup_pythonanywhere.sh deleted file mode 100755 index ce9d50089..000000000 --- a/bin/setup_pythonanywhere.sh +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/bash -# sets up a server on PythonAnywhere - -set -e - -echo $1 -if [ -z $1 ]; then - WSGI="/var/www/${USER}_pythonanywhere_com_wsgi.py" -else - BASE=$1 - WSGI="/var/www/${BASE//./_}_wsgi.py" -fi - -BLUE='\033[0;34m' -GREEN='\033[0;32m' -NC='\033[0m' - -echo -e "${BLUE}STEP 1: Installing dependencies${NC}" - -echo '' >> ~/.bashrc && echo 'source virtualenvwrapper.sh' >> ~/.bashrc -source virtualenvwrapper.sh - -mkvirtualenv mittab -workon mittab -pip install -r requirements.txt - -echo -e "${BLUE}STEP 2: Set up the tournament${NC}" -printf "Please enter a password for the 'tab' user: " -read tab_password -python manage.py initialize_tourney --tab-password $tab_password $USER - -echo -e "${BLUE}STEP 3: Collecting HTML, CSS and JS files${NC}" -python manage.py collectstatic - -# Sets up WSGI with this gist: -# https://gist.github.com/BenMusch/f3e950298001b2717882a39fc5ca3074 -# If you wish to change the WSGI, change the Gist then update the link -echo -e "${BLUE}STEP 4: Configuring server${NC}" -curl -o $WSGI https://gist.githubusercontent.com/BenMusch/f3e950298001b2717882a39fc5ca3074/raw/f97ba6cb20946b7cf21916be3f90b43d333874ca/gistfile1.py -echo -e "${GREEN}Success! Read this document to see how to finish the process:${NC}" -echo -e "${BLUE}https://docs.google.com/document/d/1j4r8UwtJqeQBz2rhNAZo1ITt40DaDe0cz6G2iiTz414/edit${NC}" diff --git a/mittab/apps/tab/forms.py b/mittab/apps/tab/forms.py index 0e9abadbd..96bfab275 100644 --- a/mittab/apps/tab/forms.py +++ b/mittab/apps/tab/forms.py @@ -1,7 +1,7 @@ from decimal import Decimal import os import itertools -import pprint +import logging from django.db import transaction from django import forms @@ -12,6 +12,9 @@ from mittab import settings +logger = logging.getLogger('mittab') + + class UploadBackupForm(forms.Form): file = forms.FileField(label="Your Backup File") @@ -458,7 +461,7 @@ def clean(self): self._errors[key] = self.error_class([msg]) except Exception as e: - print(("Caught error %s" % e)) + logger.error("Error validating eballot form", exc_info=True) self._errors["winner"] = self.error_class( ["Non handled error, preventing data contamination"]) @@ -565,9 +568,6 @@ def score_panel(result, discard_minority): ranked = [(deb, role, speak, rank + 1) for (rank, (deb, role, speak, _)) in enumerate(ranked)] - print("Ranked Debaters") - pprint.pprint(ranked) - # Break any ties by taking the average of the tied ranks ties = {} for (score_i, score) in enumerate(ranked): @@ -580,9 +580,6 @@ def score_panel(result, discard_minority): else: ties[tie_key] = [(score_i, score[3])] - print("Ties") - pprint.pprint(ties) - # Average over the tied ranks for val in ties.values(): if len(val) > 1: @@ -592,8 +589,6 @@ def score_panel(result, discard_minority): final_score = ranked[i] ranked[i] = (final_score[0], final_score[1], final_score[2], avg) - print("Final scores") - pprint.pprint(ranked) return ranked, final_winner diff --git a/mittab/apps/tab/management/commands/export_stats.py b/mittab/apps/tab/management/commands/export_stats.py index 4c259a6be..30c05abc2 100644 --- a/mittab/apps/tab/management/commands/export_stats.py +++ b/mittab/apps/tab/management/commands/export_stats.py @@ -59,7 +59,6 @@ def handle(self, *args, **kwargs): if not os.path.exists(kwargs["root"]): os.makedirs(kwargs["root"]) - print("Calculating ranks") teams = [ self.make_team_row(team_score.team) for team_score in tab_logic.rankings.rank_teams() @@ -84,7 +83,6 @@ def is_novice_team(team): if deb_score.debater.novice_status == Debater.NOVICE ] - print("Writing to csv") self.write_to_csv(os.path.join(kwargs["root"], kwargs["team_file"]), self.TEAM_ROWS, teams) self.write_to_csv( @@ -95,4 +93,3 @@ def is_novice_team(team): self.write_to_csv( os.path.join(kwargs["root"], kwargs["nov_debater_file"]), self.DEBATER_ROWS, nov_debaters) - print("Done!") diff --git a/mittab/apps/tab/management/commands/load_test.py b/mittab/apps/tab/management/commands/load_test.py deleted file mode 100644 index 9fc047d1a..000000000 --- a/mittab/apps/tab/management/commands/load_test.py +++ /dev/null @@ -1,138 +0,0 @@ -import re -from threading import Thread -import time - -from django.core.management.base import BaseCommand -import requests - -from mittab.apps.tab.models import Round, TabSettings -from mittab.apps.tab.management.commands import utils - - -class Command(BaseCommand): - help = "Load test the tournament, connecting via localhost and hitting the server" - - def add_arguments(self, parser): - parser.add_argument( - "--host", - dest="host", - help="The hostname of the server to hit", - nargs="?", - default="localhost:8000") - parser.add_argument( - "--connections", - dest="connections", - help="The number of concurrent connections to open", - nargs="?", - default=10, - type=int) - - def handle(self, *args, **options): - cur_round = TabSettings.get("cur_round") - 1 - host = options["host"] - - csrf_threads = [] - rounds = Round.objects.filter(round_number=cur_round, victor=Round.NONE) - for round_obj in rounds: - judge = round_obj.chair - csrf_threads.append(GetCsrfThread(host, judge.ballot_code, round_obj)) - - num_errors = 0 - while csrf_threads: - cur_csrf_threads = [] - for _ in range(min(len(csrf_threads), options["connections"])): - cur_csrf_threads.append(csrf_threads.pop()) - - for thr in cur_csrf_threads: - thr.start() - for thr in cur_csrf_threads: - thr.join() - - result_threads = [] - for thr in cur_csrf_threads: - num_errors += num_errors - csrf_token, num_errors = thr.result - if csrf_token is None: - print("no csrf token") - - result_thread = SubmitResultThread( - thr.host, - thr.ballot_code, - csrf_token, - thr.round_obj) - result_threads.append(result_thread) - - for thr in result_threads: - thr.start() - for thr in result_threads: - thr.join() - for thr in result_threads: - num_errors += thr.num_errors - print("Done with one batch! Sleeping!") - time.sleep(2) - - print("Done!") - print("Total errors: %s" % num_errors) - - -class SubmitResultThread(Thread): - MAX_ERRORS = 10 - - def __init__(self, host, ballot_code, csrf_token, round_obj): - super(SubmitResultThread, self).__init__() - self.host = host - self.ballot_code = ballot_code - self.csrf_token = csrf_token - self.round_obj = round_obj - self.num_errors = 0 - self.resp = None - - def run(self): - self.resp = self.get_resp() - - def get_resp(self): - if self.num_errors >= self.MAX_ERRORS: - return None - - result = utils.generate_random_results(self.round_obj, self.ballot_code) - result["csrfmiddlewaretoken"] = self.csrf_token - - resp = requests.post("http://%s/e_ballots/%s/" % (self.host, self.ballot_code), - result, - cookies={"csrftoken": self.csrf_token}) - if resp.status_code > 299: - self.num_errors += 1 - return self.get_resp() - else: - return resp.text - - -class GetCsrfThread(Thread): - REGEX = "name=\"csrfmiddlewaretoken\" value=\"([^\"]+)\"" - MAX_ERRORS = 10 - - def __init__(self, host, ballot_code, round_obj): - super(GetCsrfThread, self).__init__() - self.num_errors = 0 - self.host = host - self.ballot_code = ballot_code - self.round_obj = round_obj - self.result = (None, None) - - def run(self): - resp = self.get_resp() - if resp is None: - self.result = (None, self.num_errors) - else: - csrf = re.search(self.REGEX, resp).group(1) - self.result = (csrf, self.num_errors) - - def get_resp(self): - if self.num_errors >= self.MAX_ERRORS: - return None - resp = requests.get("http://%s/e_ballots/%s" % (self.host, self.ballot_code)) - if resp.status_code > 299: - self.num_errors += 1 - return self.get_resp() - else: - return resp.text diff --git a/mittab/apps/tab/pairing_views.py b/mittab/apps/tab/pairing_views.py index 2a79024b1..5eb9fdbf2 100644 --- a/mittab/apps/tab/pairing_views.py +++ b/mittab/apps/tab/pairing_views.py @@ -1,6 +1,7 @@ import random import time import datetime +import logging from django.shortcuts import render from django.http import HttpResponse, JsonResponse @@ -21,6 +22,9 @@ import mittab.libs.backup as backup +logger = logging.getLogger('mittab') + + @permission_required("tab.tab_settings.can_change", login_url="/403/") def pair_round(request): cache_logic.clear_cache() @@ -120,7 +124,7 @@ def view_backup(request, filename): @permission_required("tab.tab_settings.can_change", login_url="/403/") def download_backup(request, key): - print("Trying to download {}".format(key)) + logger.info(f"Trying to download {key}") data = backup.get_backup_content(key) response = HttpResponse(data, content_type="text/plain") response["Content-Disposition"] = "attachment; filename=%s" % key @@ -409,11 +413,10 @@ def pretty_pair(request, printable=False): for present_team in Team.objects.filter(checked_in=True): if present_team not in paired_teams: if present_team not in byes: - print("got error for", present_team) + logger.error(f"got error for {present_team}") errors.append(present_team) pairing_exists = TabSettings.get("pairing_released", 0) == 1 - printable = printable return render(request, "pairing/pairing_display.html", locals()) @@ -591,7 +594,6 @@ def enter_multiple_results(request, round_id, num_entered): if all_good: final_scores, final_winner = score_panel( result, "discard_minority" in request.POST) - print(final_scores) for (debater, role, speaks, ranks) in final_scores: RoundStats.objects.create(debater=debater, round=round_obj, diff --git a/mittab/settings.py b/mittab/settings.py index d045d0698..dec8d4c89 100644 --- a/mittab/settings.py +++ b/mittab/settings.py @@ -130,20 +130,40 @@ } } -if os.environ.get("MITTAB_LOG_QUERIES"): - LOGGING = { - "version": 1, - "handlers": { - "console": { - "class": "logging.StreamHandler", - }, +LOGGING = { + 'version': 1, + 'disable_existing_loggers': False, + 'formatters': { + 'verbose': { + 'format': '{levelname} {asctime} {module} {process:d} {thread:d} {message}', + 'style': '{', }, - "loggers": { - "django.db.backends": { - "level": "DEBUG", - }, + 'simple': { + 'format': '{levelname} {message}', + 'style': '{', }, - "root": { - "handlers": ["console"], - } - } + }, + 'handlers': { + 'console': { + 'class': 'logging.StreamHandler', + 'formatter': 'verbose', + }, + }, + 'loggers': { + 'django': { + 'handlers': ['console'], + 'level': os.environ.get('DJANGO_LOG_LEVEL', 'INFO'), + 'propagate': True, + }, + 'mittab': { + 'handlers': ['console'], + 'level': os.environ.get('MITTAB_LOG_LEVEL', 'INFO'), + 'propagate': True, + }, + 'django.db.backends': { + 'handlers': ['console'], + 'level': 'INFO', + 'propagate': False, + }, + }, +}