Enviar arquivos para "/"
This commit is contained in:
@@ -16,6 +16,10 @@ ENV STREAMLIT_SERVER_ADDRESS=0.0.0.0
|
||||
ENV STREAMLIT_SERVER_HEADLESS=true
|
||||
ENV STREAMLIT_BROWSER_GATHER_USAGE_STATS=false
|
||||
|
||||
# Timezone padrão (pode ser sobrescrito via variável de ambiente no Coolify)
|
||||
ENV TIMEZONE=America/Sao_Paulo
|
||||
ENV TZ=America/Sao_Paulo
|
||||
|
||||
# Instalar dependências do sistema
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
curl \
|
||||
|
||||
16
app.py
16
app.py
@@ -1,10 +1,16 @@
|
||||
import streamlit as st
|
||||
import pandas as pd
|
||||
import time
|
||||
import os
|
||||
from datetime import datetime
|
||||
import pytz
|
||||
from apscheduler.schedulers.background import BackgroundScheduler
|
||||
from monitor_logic import run_monitor_check, diagnose_n8n_webhook
|
||||
|
||||
# Carregar timezone da variável de ambiente (padrão: America/Sao_Paulo)
|
||||
TIMEZONE = os.getenv("TIMEZONE", "America/Sao_Paulo")
|
||||
tz = pytz.timezone(TIMEZONE)
|
||||
|
||||
# ===== Configuração da Página (DEVE ser a primeira chamada Streamlit!) =====
|
||||
st.set_page_config(
|
||||
page_title="Monitor Evolution API",
|
||||
@@ -62,7 +68,8 @@ if 'intervalo_horas' not in st.session_state:
|
||||
# ===== Função wrapper para o Scheduler gravar logs =====
|
||||
def scheduled_job():
|
||||
"""Executa verificação agendada (roda em background thread)."""
|
||||
print(f"[{datetime.now()}] Executando verificação agendada...")
|
||||
now = datetime.now(tz)
|
||||
print(f"[{now}] Executando verificação agendada...")
|
||||
status, messages, whatsapp_status, email_status = run_monitor_check()
|
||||
print(f"Status: {status} | WhatsApp: {whatsapp_status} | Email: {email_status}")
|
||||
print("\n".join(messages))
|
||||
@@ -70,7 +77,7 @@ def scheduled_job():
|
||||
# ===== Configurar o Agendador (Singleton via cache_resource) =====
|
||||
@st.cache_resource
|
||||
def init_scheduler(intervalo_horas):
|
||||
scheduler = BackgroundScheduler(timezone="America/Sao_Paulo")
|
||||
scheduler = BackgroundScheduler(timezone=TIMEZONE)
|
||||
# Job com intervalo configurável a partir de 00:00
|
||||
scheduler.add_job(
|
||||
scheduled_job,
|
||||
@@ -104,10 +111,11 @@ st.markdown("### Ações")
|
||||
if st.button("🚀 Executar Verificação Agora", type="primary"):
|
||||
with st.spinner('Verificando status dos serviços...'):
|
||||
status, messages, whatsapp_status, email_status = run_monitor_check()
|
||||
st.session_state['last_run'] = datetime.now().strftime("%H:%M:%S")
|
||||
now = datetime.now(tz)
|
||||
st.session_state['last_run'] = now.strftime("%H:%M:%S")
|
||||
|
||||
# Adicionar ao histórico de logs
|
||||
timestamp = datetime.now().strftime("%H:%M:%S")
|
||||
timestamp = now.strftime("%H:%M:%S")
|
||||
entry = {
|
||||
"Hora": timestamp,
|
||||
"Status": "✅ Sucesso" if status else "❌ Erro",
|
||||
|
||||
@@ -3,6 +3,7 @@ import requests
|
||||
import smtplib
|
||||
from email.mime.text import MIMEText
|
||||
from datetime import datetime
|
||||
import pytz
|
||||
from dotenv import load_dotenv
|
||||
|
||||
# Carregar variáveis de ambiente
|
||||
@@ -21,6 +22,14 @@ SMTP_EMAIL = os.getenv("SMTP_EMAIL")
|
||||
SMTP_PASSWORD = os.getenv("SMTP_PASSWORD")
|
||||
EMAIL_TO = os.getenv("EMAIL_TO")
|
||||
|
||||
# Timezone configurável via variável de ambiente
|
||||
TIMEZONE = os.getenv("TIMEZONE", "America/Sao_Paulo")
|
||||
tz = pytz.timezone(TIMEZONE)
|
||||
|
||||
def get_now():
|
||||
"""Retorna datetime atual com timezone configurado."""
|
||||
return datetime.now(tz)
|
||||
|
||||
def get_headers():
|
||||
return {
|
||||
"apikey": EVOLUTION_API_TOKEN,
|
||||
@@ -31,8 +40,9 @@ def get_headers():
|
||||
def send_email_error(error_details):
|
||||
"""Envia email de erro caso algo falhe."""
|
||||
try:
|
||||
now = get_now()
|
||||
subject = "🚨 ERRO - Monitor Evolution API"
|
||||
body = f"Falha no monitoramento.\nHorário: {datetime.now().strftime('%d/%m/%Y %H:%M:%S')}\n\nDetalhes do Erro:\n{error_details}"
|
||||
body = f"Falha no monitoramento.\nHorário: {now.strftime('%d/%m/%Y %H:%M:%S')}\n\nDetalhes do Erro:\n{error_details}"
|
||||
|
||||
msg = MIMEText(body)
|
||||
msg['Subject'] = subject
|
||||
@@ -62,7 +72,7 @@ def send_whatsapp_success():
|
||||
try:
|
||||
url = f"{EVOLUTION_API_URL}/message/sendText/{EVOLUTION_SENDER_INSTANCE}"
|
||||
|
||||
now = datetime.now()
|
||||
now = get_now()
|
||||
message_text = (
|
||||
f"✅ *MONITOR OK*\n\n"
|
||||
f"📅 Data: {now.strftime('%d/%m/%Y')}\n"
|
||||
@@ -238,7 +248,8 @@ def diagnose_n8n_webhook():
|
||||
"""Realiza um teste detalhado do Webhook N8N para diagnóstico."""
|
||||
try:
|
||||
url = N8N_WEBHOOK_URL
|
||||
payload = {"check": "diagnosis_ping", "timestamp": str(datetime.now())}
|
||||
now = get_now()
|
||||
payload = {"check": "diagnosis_ping", "timestamp": str(now)}
|
||||
|
||||
# Preparar log
|
||||
log = {
|
||||
|
||||
@@ -3,3 +3,4 @@ requests>=2.31.0
|
||||
python-dotenv>=1.0.0
|
||||
apscheduler>=3.10.0
|
||||
pandas>=2.0.0
|
||||
pytz>=2023.3
|
||||
|
||||
Reference in New Issue
Block a user