diff --git a/.forgejo/workflows/deploy.yml b/.forgejo/workflows/deploy.yml new file mode 100644 index 0000000..9279a0f --- /dev/null +++ b/.forgejo/workflows/deploy.yml @@ -0,0 +1,10 @@ +on: [push] +jobs: + test: + runs-on: docker + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: '3.11' + diff --git a/core/Dockerfile.dev b/core/Dockerfile.dev new file mode 100644 index 0000000..0364fb8 --- /dev/null +++ b/core/Dockerfile.dev @@ -0,0 +1,13 @@ +FROM python:3.11-bookworm +LABEL authors="lagertonne" + +ENV PYTHONUNBUFFERED 1 +RUN mkdir /code +WORKDIR /code +COPY requirements.dev.txt /code/ +COPY requirements.prod.txt /code/ +RUN apt update && apt install -y mariadb-client +RUN pip install -r requirements.dev.txt +RUN pip install -r requirements.prod.txt +RUN pip install mysqlclient +COPY . /code/ \ No newline at end of file diff --git a/core/core/metrics.py b/core/core/metrics.py new file mode 100644 index 0000000..47916be --- /dev/null +++ b/core/core/metrics.py @@ -0,0 +1,8 @@ +from prometheus_client import Counter, Gauge +from django_prometheus.middleware import ( + PrometheusAfterMiddleware, +) + +class AppMetricsAfterMiddleware(PrometheusAfterMiddleware): + def register_metric(self, metric_cls, name, documentation, labelnames=(), **kwargs): + return super().register_metric(metric_cls, name, documentation, labelnames=labelnames, **kwargs) \ No newline at end of file diff --git a/core/core/settings.py b/core/core/settings.py index db23180..124fcad 100644 --- a/core/core/settings.py +++ b/core/core/settings.py @@ -50,6 +50,7 @@ INSTALLED_APPS = [ 'django.contrib.messages', 'django.contrib.staticfiles', 'django_extensions', + 'django_prometheus', 'rest_framework', 'knox', 'drf_yasg', @@ -85,6 +86,7 @@ SWAGGER_SETTINGS = { } MIDDLEWARE = [ + 'django_prometheus.middleware.PrometheusBeforeMiddleware', 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', @@ -92,6 +94,7 @@ MIDDLEWARE = [ 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', + 'django_prometheus.middleware.PrometheusAfterMiddleware', ] ROOT_URLCONF = 'core.urls' @@ -210,4 +213,6 @@ CHANNEL_LAYERS = { } +PROMETHEUS_METRIC_NAMESPACE = 'c3lf' + TEST_RUNNER = 'core.test_runner.FastTestRunner' diff --git a/core/core/urls.py b/core/core/urls.py index b0161bb..e73f478 100644 --- a/core/core/urls.py +++ b/core/core/urls.py @@ -18,6 +18,7 @@ from django.contrib import admin from django.urls import path, include from .version import get_info +from .metrics import CustomMetrics urlpatterns = [ path('djangoadmin/', admin.site.urls), @@ -32,4 +33,5 @@ urlpatterns = [ path('api/2/', include('notify_sessions.api_v2')), path('api/2/', include('authentication.api_v2')), path('api/', get_info), + path('', include('django_prometheus.urls')), ] diff --git a/core/requirements.prod.txt b/core/requirements.prod.txt index 14bdc0f..ee69fe7 100644 --- a/core/requirements.prod.txt +++ b/core/requirements.prod.txt @@ -41,3 +41,5 @@ urllib3==2.1.0 uvicorn==0.24.0.post1 watchfiles==0.21.0 websockets==12.0 +django-prometheus==2.3.1 +prometheus_client==0.21.0 diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml new file mode 100644 index 0000000..23c2225 --- /dev/null +++ b/docker-compose.dev.yml @@ -0,0 +1,31 @@ +services: + core: + build: + context: ./core + dockerfile: Dockerfile.dev + command: python manage.py runserver 0.0.0.0:8000 + #environment: + # - DATABASE_URL + volumes: + - ./core:/code + ports: + - "8000:8000" + + frontend: + build: + context: ./web + dockerfile: Dockerfile.dev + command: npm run serve + volumes: + - ./web:/web:ro + - /web/node_modules + ports: + - "8080:8080" + + db: + image: mariadb + environment: + MARIADB_RANDOM_ROOT_PASSWORD: true + MARIADB_DATABASE: system3 + MARIADB_USER: system3 + MARIADB_PASSWORD: system3 \ No newline at end of file diff --git a/web/Dockerfile.dev b/web/Dockerfile.dev new file mode 100644 index 0000000..0a41d1a --- /dev/null +++ b/web/Dockerfile.dev @@ -0,0 +1,6 @@ +FROM docker.io/node:22 + +RUN mkdir /web +WORKDIR /web +COPY package.json /web/ +RUN npm install diff --git a/web/vue.config.js b/web/vue.config.js index 6a50fe3..007c1ff 100644 --- a/web/vue.config.js +++ b/web/vue.config.js @@ -7,25 +7,25 @@ module.exports = { "Access-Control-Allow-Headers": "*", "Access-Control-Allow-Methods": "*" }, - proxy: { - '^/media/2': { - target: 'https://staging.c3lf.de/', - changeOrigin: true - }, - '^/api/2': { - target: 'https://staging.c3lf.de/', - changeOrigin: true, - }, - '^/api/1': { - target: 'https://staging.c3lf.de/', - changeOrigin: true, - }, - '^/ws/2': { - target: 'http://127.0.0.1:8082/', - //changeOrigin: true, - ws: true, - logLevel: 'debug', - }, - } + //proxy: { + // '^/media/2': { + // target: 'https://staging.c3lf.de/', + // changeOrigin: true + // }, + // '^/api/2': { + // target: 'https://staging.c3lf.de/', + // changeOrigin: true, + // }, + // '^/api/1': { + // target: 'https://staging.c3lf.de/', + // changeOrigin: true, + // }, + // '^/ws/2': { + // target: 'http://127.0.0.1:8082/', + // //changeOrigin: true, + // ws: true, + // logLevel: 'debug', + // }, + //} } } \ No newline at end of file