2025-11-04 23:11:41 +01:00
|
|
|
|
```bash
|
|
|
|
|
|
aigw-project/
|
|
|
|
|
|
└── src/
|
|
|
|
|
|
└── tenera_etl/ # следует использовать своё название
|
|
|
|
|
|
├── api/
|
|
|
|
|
|
│ ├── v1/
|
|
|
|
|
|
│ │ ├── __init__.py
|
|
|
|
|
|
│ │ ├── router.py
|
|
|
|
|
|
│ │ ├── schemas.py # pydantic models
|
|
|
|
|
|
│ │ ├── service.py
|
|
|
|
|
|
│ │ ├── models.py # db models, data classes, named tuples
|
|
|
|
|
|
│ │ ├── exceptions.py
|
|
|
|
|
|
│ │ └── utils.py
|
|
|
|
|
|
│ ├── __init__.py
|
|
|
|
|
|
│ ├── middleware.py
|
|
|
|
|
|
│ ├── os_router.py # роутер для health и status endpoints
|
|
|
|
|
|
│ ├── metric_router.py # !BETA! роутер для оценки сервиса
|
|
|
|
|
|
│ └── schemas.py # валидация endpoint-ов из os_router и metric_router
|
|
|
|
|
|
├── interfaces/ # интерфейсы для подключения к внешним AC
|
|
|
|
|
|
├── logger/
|
|
|
|
|
|
│ ├── __init__.py
|
|
|
|
|
|
│ ├── context_vars.py # управление контекстом запросов для логирования
|
|
|
|
|
|
│ ├── logger.py # реализация логгера
|
|
|
|
|
|
│ ├── models.py # модели логов, метрик, событий аудита
|
|
|
|
|
|
│ ├── utils.py # функции + маскирование args
|
|
|
|
|
|
│ └── uvicorn_logging_config.py # конфигурация логирования uvicorn
|
|
|
|
|
|
├── __main__.py
|
|
|
|
|
|
├── base.py
|
|
|
|
|
|
├── config.py # global configs
|
|
|
|
|
|
├── exceptions.py # global exceptions
|
|
|
|
|
|
└── context.py
|
|
|
|
|
|
|
|
|
|
|
|
├── tests/
|
|
|
|
|
|
│ └── integration_tests/
|
|
|
|
|
|
│ ├── fixtures/
|
|
|
|
|
|
│ │ └── fixture_*.py
|
|
|
|
|
|
│ ├── conftest.py
|
|
|
|
|
|
│ ├── gigachat_interface/ # тесты интерфейсов (на GigaController)
|
|
|
|
|
|
│ │ └── test_gptchat_*.py
|
|
|
|
|
|
│ └── v1_api/
|
|
|
|
|
|
│ ├── constants.py
|
|
|
|
|
|
│ ├── test_service.py # тесты бизнес-логики
|
|
|
|
|
|
│ └── test_service_*.py
|
|
|
|
|
|
|
|
|
|
|
|
├── app.sh # запуск в OpenShift, содержит tool.poetry.scripts
|
|
|
|
|
|
├── Dockerfile # основной Dockerfile
|
|
|
|
|
|
├── Dockerfile-k8s # локальный Docker
|
|
|
|
|
|
├── pyproject.toml
|
|
|
|
|
|
├── poetry.lock
|
|
|
|
|
|
├── .env # переменные окружения
|
|
|
|
|
|
└── .gitignore
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 📁 Назначение ключевых файлов
|
|
|
|
|
|
|
|
|
|
|
|
### `src/tenera_etl/`
|
|
|
|
|
|
|
|
|
|
|
|
| Файл | Назначение |
|
|
|
|
|
|
|--------------------------|------------|
|
|
|
|
|
|
| `__main__.py` | Точка входа. Запускает FastAPI-приложение. |
|
|
|
|
|
|
| `config.py` | Загрузка и обработка переменных окружения. |
|
|
|
|
|
|
| `base.py` | Базовые классы и типы, переиспользуемые в проекте. |
|
2025-11-05 14:01:37 +01:00
|
|
|
|
| `context.py` | Реализация паттерна `AppContext` - единая точка доступа к зависимостям. |
|
2025-11-04 23:11:41 +01:00
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
### `src/tenera_etl/logger/`
|
|
|
|
|
|
|
|
|
|
|
|
| Файл | Назначение |
|
|
|
|
|
|
|------------------------------|------------|
|
|
|
|
|
|
| `context_vars.py` | Контекстные переменные для логирования (`Request-ID` и др.). ⚠️ Не редактировать.|
|
|
|
|
|
|
| `logger.py` | Основной логгер приложения. ⚠️ Не редактировать. |
|
|
|
|
|
|
| `models.py` | Модели логов, метрик, аудита. ⚠️ Не редактировать. |
|
|
|
|
|
|
| `utils.py` | Утилиты логгера, включая маскирование данных. |
|
|
|
|
|
|
| `uvicorn_logging_config.py` | Конфигурация логгирования `uvicorn`. |
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
### `src/tenera_etl/api/`
|
|
|
|
|
|
|
|
|
|
|
|
| Файл | Назначение |
|
|
|
|
|
|
|--------------------|------------|
|
2025-11-05 14:01:37 +01:00
|
|
|
|
| `__init__.py` | Конфигуратор FastAPI - регистрация версий и роутов. |
|
2025-11-04 23:11:41 +01:00
|
|
|
|
| `os_router.py` | Инфраструктурные endpoint'ы (`/health`, `/status`). ⚠️ Не редактировать. |
|
|
|
|
|
|
| `metric_router.py` | Метрики (BETA). ⚠️ Не редактировать. |
|
|
|
|
|
|
| `schemas.py` | Схемы (Pydantic) для `os_router` и `metric_router`. ⚠️ Не редактировать. |
|
|
|
|
|
|
| `middleware.py` | Мидлвар для логирования входящих и исходящих запросов. ⚠️ Не редактировать. |
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
### `src/tenera_etl/api/v1/`
|
|
|
|
|
|
|
|
|
|
|
|
| Файл | Назначение |
|
|
|
|
|
|
|------------------|------------|
|
|
|
|
|
|
| `router.py` | Основные endpoint'ы бизнес-логики (`v1`). |
|
|
|
|
|
|
| `schemas.py` | Pydantic-схемы запросов и ответов. |
|
|
|
|
|
|
| `models.py` | Модели данных (DB, классы, namedtuples). |
|
|
|
|
|
|
| `service.py` | Реализация бизнес-логики. |
|
|
|
|
|
|
| `utils.py` | Утилиты и вспомогательные функции. |
|
|
|
|
|
|
| `exceptions.py` | Исключения (`RestNotFound`, `InvalidUserData`, и др.). |
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
### `src/tenera_etl/interfaces/`
|
|
|
|
|
|
|
|
|
|
|
|
| Файл / Папка | Назначение |
|
|
|
|
|
|
|--------------|------------|
|
|
|
|
|
|
| *всё содержимое* | Интерфейсы взаимодействия с внешними системами (АС и пр.). |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Пример логирования в коде:
|
|
|
|
|
|
|
|
|
|
|
|
```python
|
|
|
|
|
|
from tenera_etl.logger import logger
|
|
|
|
|
|
|
|
|
|
|
|
logger.info("End processing user registration request")
|
|
|
|
|
|
```
|
2025-11-05 14:01:37 +01:00
|
|
|
|
⚠️ Не передавайте в logger.info(...) ничего, кроме строки - она будет записана в поле message.
|
2025-11-04 23:11:41 +01:00
|
|
|
|
|
|
|
|
|
|
Маскирование чувствительных данных
|
|
|
|
|
|
|
|
|
|
|
|
В файле logger/utils.py реализовано маскирование:
|
|
|
|
|
|
|
|
|
|
|
|
все поля, содержащие ключевые слова вроде password, token, secret, будут скрыты;
|
|
|
|
|
|
|
|
|
|
|
|
работает автоматически, но вы можете конфигурировать список слов и правила.
|
|
|
|
|
|
|
2025-11-05 14:01:37 +01:00
|
|
|
|
Перед добавлением кастомной маскировки - ознакомьтесь с документацией, чтобы избежать утечки данных.
|