MIGRATION: Перевод speedtests на PostgreSQL и исправление SQLite в web/app.py
This commit is contained in:
parent
2be7aea46e
commit
6dc882fa19
4 changed files with 56 additions and 49 deletions
14
Dockerfile
14
Dockerfile
|
|
@ -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 и установка зависимостей
|
||||
|
|
|
|||
|
|
@ -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}>"
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
21
web/app.py
21
web/app.py
|
|
@ -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})
|
||||
|
|
|
|||
Loading…
Reference in a new issue