Files
clei-flow/app/main.py
2026-04-26 17:45:35 +00:00

78 lines
2.1 KiB
Python
Executable File

import asyncio
import logging
import sys
from nicegui import ui, app
from ui import layout, dashboard, settings, manual_tools
from database import init_db
from core.bot import TelegramManager
from core.watcher import DirectoryWatcher
from core.state import state
# Inicializa Banco
init_db()
# Instâncias Globais
bot = TelegramManager()
watcher = DirectoryWatcher(bot)
# --- CONFIGURAÇÃO DE LOG REATIVA ---
class NiceGuiLogHandler(logging.Handler):
def emit(self, record):
try:
msg = self.format(record)
# Enviamos para o estado que o Dashboard lê
state.log(msg)
except Exception:
pass
async def startup():
# CONFIGURAR LOGS AQUI (Depois que o servidor iniciou)
root_logger = logging.getLogger()
# Adiciona o handler que manda para o Dashboard
ui_handler = NiceGuiLogHandler()
ui_handler.setFormatter(logging.Formatter('%(message)s'))
root_logger.addHandler(ui_handler)
logging.info("🚀 Dashboard conectado aos logs do sistema.")
# Inicia os serviços
asyncio.create_task(watcher.start())
asyncio.create_task(delayed_bot_start())
async def delayed_bot_start():
logging.info("⏳ Aguardando rede estabilizar (5s)...")
await asyncio.sleep(5)
await bot.start()
async def shutdown():
await bot.stop()
app.on_startup(startup)
app.on_shutdown(shutdown)
# --- ROTAS (Permanecem iguais) ---
@ui.page('/')
def index_page():
ui.colors(primary='#5898d4', secondary='#263238')
ui.page_title('Clei-Flow')
layout.create_interface()
dashboard.show()
@ui.page('/settings')
def settings_page():
ui.colors(primary='#5898d4', secondary='#263238')
ui.page_title('Configurações')
layout.create_interface()
settings.show()
@ui.page('/explorer')
def explorer_page():
ui.colors(primary='#5898d4', secondary='#263238')
ui.page_title('Explorador')
layout.create_interface()
manual_tools.show()
if __name__ in {"__main__", "__mp_main__"}:
# reload=False é essencial em Docker para evitar processos duplicados
ui.run(title='Clei-Flow', port=8080, storage_secret='clei-secret', reload=False)