diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..f1f9892 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,10 @@ +venv/ +__pycache__/ +*.pyc +*.pyo +.git/ +.gitignore +.claude/ +*.md +.env +*.sqlite3 diff --git a/API.md b/API.md new file mode 100644 index 0000000..52a1c20 --- /dev/null +++ b/API.md @@ -0,0 +1,171 @@ +# API документация eng_bot_metrics + +## Базовый URL + +``` +http://localhost:8000 +``` + +--- + +## Эндпоинты + +### 1. Дашборд статистики + +``` +GET / +``` + +**Описание:** Главная страница с визуальной статистикой кликов. + +**Отображает:** +- Общее количество переходов в бота и канал +- Статистика за сегодня +- Статистика за последнюю неделю +- График переходов за последние 30 дней +- Последние 20 событий + +**Ответ:** HTML страница + +--- + +### 2. Трекинг перехода в бота + +``` +POST /api/track/bot/ +``` + +**Описание:** Записывает событие перехода пользователя в Telegram бота. + +**Метод:** `POST` + +**Заголовки:** +``` +Content-Type: application/json +``` + +**Тело запроса:** Не требуется (можно отправить пустой POST) + +**Автоматически сохраняет:** +- IP адрес пользователя +- User-Agent браузера +- Referrer (откуда пришёл пользователь) +- Временная метка + +**Успешный ответ:** +```json +{ + "status": "ok", + "event": "bot" +} +``` + +**Пример использования (JavaScript):** +```javascript +fetch('/api/track/bot/', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + } +}); +``` + +**Пример использования (curl):** +```bash +curl -X POST http://localhost:8000/api/track/bot/ +``` + +--- + +### 3. Трекинг перехода в канал + +``` +POST /api/track/channel/ +``` + +**Описание:** Записывает событие перехода пользователя в Telegram канал. + +**Метод:** `POST` + +**Заголовки:** +``` +Content-Type: application/json +``` + +**Тело запроса:** Не требуется (можно отправить пустой POST) + +**Автоматически сохраняет:** +- IP адрес пользователя +- User-Agent браузера +- Referrer (откуда пришёл пользователь) +- Временная метка + +**Успешный ответ:** +```json +{ + "status": "ok", + "event": "channel" +} +``` + +**Пример использования (JavaScript):** +```javascript +fetch('/api/track/channel/', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + } +}); +``` + +**Пример использования (curl):** +```bash +curl -X POST http://localhost:8000/api/track/channel/ +``` + +--- + +### 4. Админ-панель Django + +``` +GET /admin/ +``` + +**Описание:** Стандартная админ-панель Django для управления данными. + +**Требует:** Авторизация суперпользователя + +**Создание суперпользователя:** +```bash +./deploy.sh createsuperuser +``` + +--- + +## Пример интеграции на лендинге + +```html +Перейти в бота +Перейти в канал + + +``` + +--- + +## Сводная таблица + +| URL | Метод | Описание | +|-----|-------|----------| +| `/` | GET | Дашборд со статистикой | +| `/api/track/bot/` | POST | Трекинг клика по боту | +| `/api/track/channel/` | POST | Трекинг клика по каналу | +| `/admin/` | GET | Админ-панель Django | diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..77efc84 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,20 @@ +FROM python:3.12-slim + +ENV PYTHONDONTWRITEBYTECODE=1 +ENV PYTHONUNBUFFERED=1 + +WORKDIR /app + +RUN apt-get update && apt-get install -y --no-install-recommends \ + && rm -rf /var/lib/apt/lists/* + +COPY requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt + +COPY . . + +RUN python manage.py collectstatic --noinput 2>/dev/null || true + +EXPOSE 8000 + +CMD ["gunicorn", "--bind", "0.0.0.0:8000", "eng_bot_metrics.wsgi:application"] diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..e4dec2d --- /dev/null +++ b/requirements.txt @@ -0,0 +1,4 @@ +Django==6.0 +asgiref==3.11.0 +sqlparse==0.5.4 +gunicorn==23.0.0