B22: прикладное логирование vector.* + администрирование в доках (по образцу РВС)
- backend/logging_setup.py: setup_logging() (stdout INFO + файл /tmp/vector/vector.log,
ротация 5×2 МБ, VectorLOGLEVEL/VectorLOGFILE/VectorLOGDIR), get_logger('vector.*')
- события: vector.analyze (матрасчёт с длительностью), vector.auth (login_ok/failed/
lockout), vector.audit (каждая запись), vector.contour (ok/failed/rejected),
vector.operations (operation_complete), vector.geocode (успех/timeout/ошибка)
- существующие логгеры переведены в namespace vector.* (geo, geo.osm, rules, water, admin)
- README §13а: таблица наблюдаемых событий + правила (без ПДн/секретов)
- SETUP_GUIDE: §15 RPO/RTO + backup≠restore, §16 grep по vector.*, §17 диагностика
по цепочкам (БД, 500, fallback-зоны, вход), §17а чек-лист передачи проекта
- DEPLOY.md: вместо устаревшего дубля — ссылка на актуальные доки + шпаргалка стенда
- тесты: 239 passed
This commit is contained in:
@@ -11,15 +11,19 @@ Nominatim Usage Policy: User-Agent обязателен, ≤1 rps — прокс
|
||||
- Пункт ПЕРВЫМ словом.
|
||||
"""
|
||||
import os
|
||||
import logging
|
||||
from typing import List, Optional
|
||||
|
||||
import httpx
|
||||
from fastapi import APIRouter, HTTPException, Query
|
||||
from pydantic import BaseModel
|
||||
|
||||
from backend.logging_setup import get_logger
|
||||
from backend.routers.auth import require_roles
|
||||
from fastapi import Depends
|
||||
|
||||
log = get_logger('geocode')
|
||||
|
||||
router = APIRouter(prefix='/api/v1/geocode', tags=['geocode'])
|
||||
|
||||
NOMINATIM_URL = 'https://nominatim.openstreetmap.org/search'
|
||||
@@ -59,10 +63,14 @@ async def geocode(
|
||||
resp.raise_for_status()
|
||||
data = resp.json()
|
||||
except httpx.TimeoutException:
|
||||
log.warning('geocode timeout q=%s', q.strip()[:100])
|
||||
raise HTTPException(status_code=504, detail='Сервис геокодирования не ответил')
|
||||
except Exception as e:
|
||||
log.warning('geocode error q=%s: %s', q.strip()[:100], e)
|
||||
raise HTTPException(status_code=502, detail=f'Ошибка геокодирования: {e}')
|
||||
|
||||
log.info('geocode q=%s результатов=%d', q.strip()[:100], len(data))
|
||||
|
||||
return {'results': [
|
||||
GeocodeResult(
|
||||
lat=float(item['lat']),
|
||||
|
||||
Reference in New Issue
Block a user