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
|
FROM python:3.12-slim
|
||||||
|
|
||||||
# Установка рабочей директории
|
# Установка рабочей директории
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
# Установка системных зависимостей (если понадобятся для каких-то либ)
|
# Установка системных зависимостей для ffmpeg, weasyprint (pango/cairo) и LibreOffice
|
||||||
RUN apt-get update && apt-get install -y \ ffmpeg
|
RUN apt-get update && apt-get install -y \
|
||||||
sqlite3 \
|
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/*
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
# Копирование requirements и установка зависимостей
|
# Копирование requirements и установка зависимостей
|
||||||
|
|
|
||||||
|
|
@ -812,3 +812,20 @@ class Artifact(Base):
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return f"<Artifact {self.filename} ({self.file_type})>"
|
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:
|
services:
|
||||||
domovoy-bot:
|
domovoy-bot:
|
||||||
build: .
|
build: .
|
||||||
container_name: lkm37-core
|
container_name: domovoy-bot
|
||||||
restart: unless-stopped
|
network_mode: "host"
|
||||||
env_file:
|
restart: always
|
||||||
- .env
|
environment:
|
||||||
|
- PYTHONPATH=/app:/app/services
|
||||||
volumes:
|
volumes:
|
||||||
# Монтируем базу данных и важные данные для сохранения
|
|
||||||
- ./database:/app/database
|
|
||||||
- ./logs:/app/logs
|
- ./logs:/app/logs
|
||||||
- ./data:/app/data
|
|
||||||
- ./exports:/app/exports
|
- ./exports:/app/exports
|
||||||
- ./backups:/app/backups
|
- ./data:/app/data
|
||||||
- ./web:/app/web
|
- /home/matrixhasyou/domovoy_google_creds.json:/home/matrixhasyou/domovoy_google_creds.json:ro
|
||||||
- ./services/email_auditor/exported_emails:/app/services/email_auditor/exported_emails
|
|
||||||
network_mode: host
|
|
||||||
environment:
|
|
||||||
- TZ=Europe/Moscow
|
|
||||||
- PYTHONUNBUFFERED=1
|
|
||||||
logging:
|
logging:
|
||||||
driver: "json-file"
|
driver: "json-file"
|
||||||
options:
|
options:
|
||||||
max-size: "10m"
|
max-size: "10m"
|
||||||
max-file: "3"
|
max-file: "3"
|
||||||
|
|
||||||
email_auditor:
|
domovoy-web:
|
||||||
build:
|
build: .
|
||||||
context: ./services/email_auditor
|
container_name: domovoy-web
|
||||||
dockerfile: Dockerfile
|
command: python -m uvicorn web.app:app --host 0.0.0.0 --port 8000
|
||||||
container_name: email-auditor
|
network_mode: "host"
|
||||||
restart: unless-stopped
|
restart: always
|
||||||
env_file:
|
environment:
|
||||||
- .env
|
- PYTHONPATH=/app:/app/services
|
||||||
volumes:
|
volumes:
|
||||||
- ./database:/app/database
|
- ./logs:/app/logs
|
||||||
- ./services/email_auditor/exported_emails:/app/exported_emails
|
- ./exports:/app/exports
|
||||||
network_mode: host
|
- ./data:/app/data
|
||||||
environment:
|
- /home/matrixhasyou/domovoy_google_creds.json:/home/matrixhasyou/domovoy_google_creds.json:ro
|
||||||
- TZ=Europe/Moscow
|
|
||||||
- PYTHONUNBUFFERED=1
|
|
||||||
logging:
|
logging:
|
||||||
driver: "json-file"
|
driver: "json-file"
|
||||||
options:
|
options:
|
||||||
max-size: "10m"
|
max-size: "10m"
|
||||||
max-file: "3"
|
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,
|
User, Message as DBMessage, Poll, Ad, PaymentReminder, Schedule,
|
||||||
VerificationRequest, Service, Announcement, Event, ScheduledPost,
|
VerificationRequest, Service, Announcement, Event, ScheduledPost,
|
||||||
Broadcast, BroadcastRead, Digest, InitiativeGroup, EmailAudit, EmailExportLog,
|
Broadcast, BroadcastRead, Digest, InitiativeGroup, EmailAudit, EmailExportLog,
|
||||||
ProfileHistory, Achievement, Thank, SpyLog, Artifact
|
ProfileHistory, Achievement, Thank, SpyLog, Artifact, Speedtest
|
||||||
)
|
)
|
||||||
|
|
||||||
# ===== ЧАСОВОЙ ПОЯС УЛЬЯНОВСК (UTC+4) =====
|
# ===== ЧАСОВОЙ ПОЯС УЛЬЯНОВСК (UTC+4) =====
|
||||||
|
|
@ -730,21 +730,18 @@ async def api_emails_sync_ai(username: str = Depends(get_current_admin)):
|
||||||
|
|
||||||
@app.get("/infra", response_class=HTMLResponse)
|
@app.get("/infra", response_class=HTMLResponse)
|
||||||
async def get_infra_page(request: Request, username: str = Depends(get_current_admin)):
|
async def get_infra_page(request: Request, username: str = Depends(get_current_admin)):
|
||||||
import sqlite3
|
async with AsyncSessionLocal() as session:
|
||||||
conn = sqlite3.connect("/home/matrixhasyou/domovoy_bot/database/domovoy.db")
|
stmt = select(Speedtest).order_by(Speedtest.timestamp.desc()).limit(10)
|
||||||
cursor = conn.cursor()
|
rows = (await session.execute(stmt)).scalars().all()
|
||||||
cursor.execute("SELECT timestamp, download, upload, ping, server_name FROM speedtests ORDER BY timestamp DESC LIMIT 10")
|
|
||||||
rows = cursor.fetchall()
|
|
||||||
conn.close()
|
|
||||||
|
|
||||||
speedtests = []
|
speedtests = []
|
||||||
for r in rows:
|
for r in rows:
|
||||||
speedtests.append({
|
speedtests.append({
|
||||||
"timestamp": r[0],
|
"timestamp": fmt_local(r.timestamp),
|
||||||
"download": r[1],
|
"download": r.download,
|
||||||
"upload": r[2],
|
"upload": r.upload,
|
||||||
"ping": r[3],
|
"ping": r.ping,
|
||||||
"server_name": r[4]
|
"server_name": r.server_name
|
||||||
})
|
})
|
||||||
|
|
||||||
return templates.TemplateResponse("infra.html", {"request": request, "username": username, "speedtests": speedtests})
|
return templates.TemplateResponse("infra.html", {"request": request, "username": username, "speedtests": speedtests})
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue