MIGRATION: Перевод speedtests на PostgreSQL и исправление SQLite в web/app.py

This commit is contained in:
Admin 2026-06-26 21:19:19 +04:00
parent 2be7aea46e
commit 6dc882fa19
4 changed files with 56 additions and 49 deletions

View file

@ -1,12 +1,18 @@
# Использование легкого образа Python
FROM python:3.12-slim
# Установка рабочей директории
WORKDIR /app
# Установка системных зависимостей (если понадобятся для каких-то либ)
RUN apt-get update && apt-get install -y \ ffmpeg
sqlite3 \
# Установка системных зависимостей для ffmpeg, weasyprint (pango/cairo) и LibreOffice
RUN apt-get update && apt-get install -y \
ffmpeg \
libreoffice \
libpango-1.0-0 \
libpangocairo-1.0-0 \
libgdk-pixbuf-2.0-0 \
libffi-dev \
shared-mime-info \
fonts-dejavu \
&& rm -rf /var/lib/apt/lists/*
# Копирование requirements и установка зависимостей

View file

@ -812,3 +812,20 @@ class Artifact(Base):
def __repr__(self):
return f"<Artifact {self.filename} ({self.file_type})>"
class Speedtest(Base):
"""Результаты замеров скорости интернета"""
__tablename__ = 'speedtests'
id = Column(Integer, primary_key=True, autoincrement=True)
timestamp = Column(DateTime, default=datetime.utcnow)
download = Column(Float, nullable=True)
upload = Column(Float, nullable=True)
ping = Column(Float, nullable=True)
server_name = Column(String(255), nullable=True)
result_url = Column(String(255), nullable=True)
def __repr__(self):
return f"<Speedtest #{self.id} DL={self.download} UP={self.upload} Server={self.server_name}>"

View file

@ -3,50 +3,37 @@ version: '3.8'
services:
domovoy-bot:
build: .
container_name: lkm37-core
restart: unless-stopped
env_file:
- .env
container_name: domovoy-bot
network_mode: "host"
restart: always
environment:
- PYTHONPATH=/app:/app/services
volumes:
# Монтируем базу данных и важные данные для сохранения
- ./database:/app/database
- ./logs:/app/logs
- ./data:/app/data
- ./exports:/app/exports
- ./backups:/app/backups
- ./web:/app/web
- ./services/email_auditor/exported_emails:/app/services/email_auditor/exported_emails
network_mode: host
environment:
- TZ=Europe/Moscow
- PYTHONUNBUFFERED=1
- ./data:/app/data
- /home/matrixhasyou/domovoy_google_creds.json:/home/matrixhasyou/domovoy_google_creds.json:ro
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
email_auditor:
build:
context: ./services/email_auditor
dockerfile: Dockerfile
container_name: email-auditor
restart: unless-stopped
env_file:
- .env
domovoy-web:
build: .
container_name: domovoy-web
command: python -m uvicorn web.app:app --host 0.0.0.0 --port 8000
network_mode: "host"
restart: always
environment:
- PYTHONPATH=/app:/app/services
volumes:
- ./database:/app/database
- ./services/email_auditor/exported_emails:/app/exported_emails
network_mode: host
environment:
- TZ=Europe/Moscow
- PYTHONUNBUFFERED=1
- ./logs:/app/logs
- ./exports:/app/exports
- ./data:/app/data
- /home/matrixhasyou/domovoy_google_creds.json:/home/matrixhasyou/domovoy_google_creds.json:ro
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
networks:
default:
name: lkm37-net

View file

@ -41,7 +41,7 @@ from database.models import (
User, Message as DBMessage, Poll, Ad, PaymentReminder, Schedule,
VerificationRequest, Service, Announcement, Event, ScheduledPost,
Broadcast, BroadcastRead, Digest, InitiativeGroup, EmailAudit, EmailExportLog,
ProfileHistory, Achievement, Thank, SpyLog, Artifact
ProfileHistory, Achievement, Thank, SpyLog, Artifact, Speedtest
)
# ===== ЧАСОВОЙ ПОЯС УЛЬЯНОВСК (UTC+4) =====
@ -730,21 +730,18 @@ async def api_emails_sync_ai(username: str = Depends(get_current_admin)):
@app.get("/infra", response_class=HTMLResponse)
async def get_infra_page(request: Request, username: str = Depends(get_current_admin)):
import sqlite3
conn = sqlite3.connect("/home/matrixhasyou/domovoy_bot/database/domovoy.db")
cursor = conn.cursor()
cursor.execute("SELECT timestamp, download, upload, ping, server_name FROM speedtests ORDER BY timestamp DESC LIMIT 10")
rows = cursor.fetchall()
conn.close()
async with AsyncSessionLocal() as session:
stmt = select(Speedtest).order_by(Speedtest.timestamp.desc()).limit(10)
rows = (await session.execute(stmt)).scalars().all()
speedtests = []
for r in rows:
speedtests.append({
"timestamp": r[0],
"download": r[1],
"upload": r[2],
"ping": r[3],
"server_name": r[4]
"timestamp": fmt_local(r.timestamp),
"download": r.download,
"upload": r.upload,
"ping": r.ping,
"server_name": r.server_name
})
return templates.TemplateResponse("infra.html", {"request": request, "username": username, "speedtests": speedtests})