Files
ProxMenux/web/messages/pt/docs/monitor/notifications.json
T

536 lines
45 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"meta": {
"title": "Notificações Proxmox — Telegram, Discord, E-mail, Gotify, Pushover, Apprise | ProxMenux Monitor",
"description": "Envie notificações Proxmox VE por Telegram, Discord, email, Gotify, Pushover e cerca de 80 serviços Apprise. O Monitor reúne eventos de saúde, registo do sistema e webhook PVE, com deduplicação, intervalos entre envios, resumos, reescrita IA opcional e histórico.",
"ogTitle": "Notificações Proxmox — Telegram, Discord, e-mail, Gotify, Pushover, Apprise",
"ogDescription": "Alertas Proxmox VE nos seis canais, com serviços adicionais Apprise, deduplicação, intervalos entre envios, agregação e reescrita IA opcional.",
"twitterTitle": "Notificações Proxmox | ProxMenux Monitor",
"twitterDescription": "Envie alertas Proxmox VE para Telegram, Discord, Email, Gotify, Pushover e ~80 serviços extras via Apprise."
},
"header": {
"title": "Notificações",
"description": "Distribui os eventos recolhidos pelo Monitor pelos canais configurados: Telegram, Discord, email, Gotify, Pushover e cerca de 80 serviços via Apprise. Inclui deduplicação, intervalos entre envios, agregação de eventos próximos, filtros por evento e canal, reescrita IA opcional e histórico consultável.",
"section": "ProxMenux Monitor"
},
"intro": {
"title": "De onde vêm as mensagens",
"body": "As notificações usam os eventos já produzidos pelo <link>Health Monitor</link>, monitores do registo e tarefas Proxmox, webhook PVE, verificações periódicas e scripts ProxMenux. Não fazem uma análise separada: os eventos passam pelo mesmo processo de envio aos canais configurados."
},
"howItWorks": {
"heading": "Como funciona",
"intro": "Coletores independentes produzem eventos estruturados. O processo de envio decide se os envia e em que formato; pode reescrevê-los com um LLM e distribui-os pelos canais configurados.",
"arrowLabel": "evento",
"caption": "Cada tentativa efetiva de envio, bem-sucedida ou falhada, fica no histórico SQLite. Um grupo agregado surge como uma entrada; os eventos suprimidos pelo intervalo entre envios não são registados.",
"nodes": {
"sourcesLabel": "Fontes",
"sourcesDetail": "Health Monitor\nMonitor do registo\nMonitor de tarefas\nWebhook PVE\nVerificações periódicas\nEventos internos",
"dispatchLabel": "Processo de envio",
"dispatchDetail": "Agregação de eventos próximos\nVerificações de assinatura/intervalo\nLimites de frequência por grupo\nControlos por canal",
"aiLabel": "Reescrita com IA (opcional)",
"aiDetail": "OpenAI / Anthropic\nGemini / Groq\nOpenRouter / Ollama\n(desativada por predefinição)",
"channelsLabel": "Canais",
"channelsDetail": "Telegram\nDiscord\nE-mail (SMTP)\nGotify\nPushover\nApprise (~80 serviços)"
}
},
"enabling": {
"heading": "Habilitando o painel",
"intro": "Numa instalação nova, o cartão Notificações nas Definições mostra <em>Desativadas</em> e o botão <em>Ativar notificações</em>. Até o premir não envia mensagens nem altera a configuração PVE.",
"disabledAlt": "Cartão Notificações desativado com botão para ativar",
"disabledCaption": "O primeiro estado — um clique para habilitar.",
"stepsIntro": "Pressionar o botão faz três coisas em sequência:",
"steps": [
"Passa ao estado <em>Ativas</em> e mostra o formulário dos canais.",
"Regista o destino webhook em <code>/etc/pve/notifications.cfg</code>. Sem HTTPS usa <code>POST http://127.0.0.1:8008/api/notifications/webhook</code>; com HTTPS usa o listener HTTP local separado na porta 8009. As notificações PVE entram assim no processo do Monitor. Veja <pvelink>Integração webhook PVE</pvelink>.",
"Inicia o thread de envio em segundo plano, que lê a fila e processa os eventos."
],
"activeAlt": "Notificações ativas: separadores dos canais, nome apresentado e secção expansível de reescrita IA",
"activeCaption": "Estado ativo: separadores Telegram, Gotify, Discord, email, Pushover e Apprise, nome apresentado, categorias por canal e secção <em>Avançadas: melhoria IA</em>."
},
"sources": {
"heading": "Fontes de eventos",
"intro": "Seis tipos de fontes alimentam as notificações: coletores em segundo plano, recetor webhook e eventos internos do processo. Produzem objetos <code>NotificationEvent</code> estruturados.",
"headerCollector": "Coletor",
"headerWatches": "O que monitoriza",
"headerEvents": "Eventos típicos",
"rows": [
{
"collector": "Monitor de Saúde",
"watches": "Dez categorias, cada 5 minutos",
"events": "<code>new_error</code>, <code>error_resolved</code>, <code>error_escalated</code>, <code>health_degraded</code>, <code>health_persistent</code>."
},
{
"collector": "Monitor do registo do sistema",
"watches": "Segue <code>journalctl --follow</code> e reconhece falhas de autenticação SSH/web, bloqueios Fail2Ban se a jail estiver instalada, erros de E/S, OOM e eventos smartd.",
"events": "<code>auth_fail</code>, <code>ip_block</code>, <code>oom_kill</code>, <code>disk_io_error</code>, <code>service_fail</code>."
},
{
"collector": "Monitor de tarefas",
"watches": "Consulta <code>/var/log/pve/tasks/index</code> para encontrar novos UPID e acompanha os respetivos ficheiros de registo.",
"events": "<code>backup_start</code>, <code>backup_complete</code>, <code>backup_warning</code>, <code>backup_fail</code>, <code>migration_*</code>, <code>snapshot_complete</code>."
},
{
"collector": "Webhook Proxmox",
"watches": "Recebe <code>POST /api/notifications/webhook</code>. Versões PVE com destinos webhook podem encaminhar notificações após a configuração; veja <pvelink>abaixo</pvelink>.",
"events": "Qualquer coisa que PVE emite – incluindo eventos que o Monitor perderia (HA, replicação, vzdump da GUI)."
},
{
"collector": "Colector de sondagem",
"watches": "Comparações periódicas: nós do cluster disponíveis, validade de certificados, atribuição GPU e atualizações PVE/ProxMenux.",
"events": "<code>node_disconnect</code>, <code>node_reconnect</code>, <code>pve_update</code>, <code>proxmenux_update</code>, <code>gpu_mode_switch</code>, <code>pci_passthrough_conflict</code>."
},
{
"collector": "Emissores em processo",
"watches": "Chamadas diretas de ProxMenux scripts e do próprio Monitor (<code>notification_manager.emit_event(...)</code>).",
"events": "<code>system_startup</code>, <code>system_shutdown</code>, <code>system_reboot</code>, <code>ai_model_migrated</code>, eventos de teste personalizados."
}
],
"after1": "Cada evento tem <code>event_type</code> estável, <code>severity</code> (<code>INFO</code>, <code>WARNING</code>, <code>CRITICAL</code>), <code>category</code> para emojis e filtros e dados <code>data</code> para o modelo, como <code>vmid</code>, <code>device</code>, <code>source_ip</code> e <code>reason</code>.",
"after2": "O modelo de cada <code>event_type</code> em <code>notification_templates.py</code> produz o texto enviado. A reescrita IA opcional usa esse texto. A página <ailink>Assistente IA</ailink> explica a relação entre modelo e reescrita."
},
"channels": {
"heading": "Configuração dos canais",
"intro": "Atualmente são suportados seis canais: Telegram, Discord, Gotify, Email (SMTP), Pushover e Apprise. Os cinco primeiros são integrações nativas com seus próprios campos de configuração. Apprise é um hub genérico que adiciona em torno de 80 serviços adicionais (ntfy, Matrix, Slack, Teams, Pushbullet, AWS SNS, Mattermost...) através de um único campo URL. Todos eles estão documentados passo a passo abaixo.",
"credsTitle": "Onde ficam guardadas as credenciais",
"credsBody": "Tokens, chaves, webhook URLs e senhas SMTP são armazenados localmente no banco de dados SQLite do Monitor em <code>/usr/local/share/proxmenux/</code>. Valores sensíveis são protegidos e mascarados na interface. Eles nunca saem do anfitrião, exceto para chegar aos seus respectivos serviços. Um backup desse diretório é suficiente para recuperar os canais configurados."
},
"telegram": {
"heading": "Telegram",
"intro": "Precisa de um <strong>token do bot</strong>, reutilizável entre conversas, e um <strong>ID da conversa</strong>, que identifica conversa privada, grupo ou supergrupo. O guia integrado explica os passos; seguem os formatos de destino.",
"guideAlt": "Guia de Configuração de Bots Telegram com quatro seções numeradas: Criar um Bot com BotFather, Obter o Token Bot, Obter o ID de Chat e Para Grupos ou Canais",
"guideCaption": "O link <em>+ guia de configuração</em> no separador Telegram abre a janela com quatro passos para configurar o canal.",
"step1Title": "1 · Criar um bot com BotFather",
"step1Items": [
"Abra o Telegram e inicie uma conversa com o <a>@BotFather</a> (aquele com o tique azul de verificação – as cópias são comuns).",
"Enviar <code>/newbot</code>.",
"Escolha um nome de exibição (por exemplo: <em>ProxMenux Lab</em>). Pode ser mudado mais tarde.",
"Escolha um nome de utilizador único no Telegram que termine em <code>bot</code>, por exemplo <em>proxmenux_lab_bot</em>.",
"O BotFather responde com o token, por exemplo <code>123456789:ABCdef…</code>. Trate-o como uma palavra-passe."
],
"step2Title": "2 · Obter o ID do Chat",
"step2Intro": "O ID da conversa indica <em>onde</em> o bot envia. O formato depende do destino.",
"privateLabel": "Conversa privada (você recebe os alertas em sua própria conta):",
"privateItems": [
"Inicie uma conversa com seu novo bot e envie qualquer mensagem (por exemplo: <code>/start</code>).",
"Abra uma conversa com <a1>@userinfobot</a1> (ou <a2>@myidbot</a2>) e envie <code>/start</code>. Ele responde com o seu ID de usuário numérico — que é o ID do Chat. É um número positivo."
],
"privateAlt": "Formulário Telegram com token oculto, ID da conversa positivo e ID do tópico opcional vazio",
"privateCaption": "Conversa privada com o bot — Chat ID é um número positivo (seu ID de usuário pessoal).",
"groupLabel": "Grupo ou supergrupo com tópicos:",
"groupItems": [
"Adicione o bot ao grupo como membro (e torne-o administrador se o grupo exigir que ele publique).",
"Envie qualquer mensagem no grupo.",
"Abra <code>https://api.telegram.org/bot&lt;YOUR_TOKEN&gt;/getUpdates</code> em um navegador. Procure <code>chat.id</code> na resposta JSON — para grupos é um número negativo, para supergrupos começa com <code>-100</code>.",
"Nos supergrupos com <em>Tópicos</em>, anote também o <code>message_thread_id</code> do destino e coloque-o no campo opcional <em>ID do tópico</em>."
],
"groupAlt": "Formulário Telegram para supergrupo: token oculto, ID da conversa negativo com prefixo -100 e ID do tópico 3",
"groupCaption": "Supergrupo: o ID da conversa começa por <code>-100…</code>; <em>ID do tópico</em> seleciona uma conversa específica.",
"step3Title": "3 · Salvar e testar",
"step3Body": "Introduza token e ID da conversa, guarde e prima <em>Enviar teste</em>. Se não chegar, consulte o histórico: token inválido, bot ausente do grupo ou bloqueado, etc."
},
"discord": {
"heading": "Discord",
"intro": "Os canais Discord aceitam mensagens recebidas através de um <em>Webhook URL</em> ligado a um único canal. O Monitor precisa dessa URL e nada mais.",
"items": [
"No Discord abra o servidor e vá a <em>Definições do servidor → Integrações → Webhooks</em>.",
"Prima <em>Novo webhook</em>, atribua um nome como <em>ProxMenux</em> e escolha o canal. O avatar é opcional.",
"Prima <em>Copiar URL do webhook</em>: o formato é <code>https://discord.com/api/webhooks/&lt;id&gt;/&lt;token&gt;</code>.",
"Colar no campo de URL Webhook da aba Discord no painel Notificações e salvar."
],
"imageAlt": "Forma de canal Discord com campo de URL Webhook começando com https://discord.com/api/webhooks/",
"imageCaption": "Discord: copie o URL em <em>Definições do servidor → Integrações → Webhooks</em>."
},
"gotify": {
"heading": "Gotify",
"intro": "Gotify é um servidor de notificações push alojado por si. Precisa do URL e de um <em>token da aplicação</em> gerado na interface de administração.",
"items": [
"Se você ainda não tiver uma instância Gotify, instale uma — veja o guia de instalação <a>oficial</a>.",
"Entre no Gotify como administrador, abra <em>Aplicações</em> → <em>Criar aplicação</em>, dê-lhe o nome <em>ProxMenux</em> e copie o token.",
"Na aba Gotify do painel Notificações, defina <em>Server URL</em> para o URL base de sua instância (por exemplo. <code>https://gotify.example.com</code>) e colar o App Token.",
"Guarde e prima <em>Enviar teste</em>."
],
"imageAlt": "Formulário de canal Gotify com campo URL do servidor definido para https://gotify.example.com e um campo Token App com placeholder A_valid_gotify_token",
"imageCaption": "Gotify — URL do servidor da sua instância self-hosted mais o Token App da interface de administração Gotify."
},
"email": {
"heading": "Correio eletrónico (SMTP)",
"intro": "Para email precisa de servidor SMTP, porta, modo TLS, eventuais credenciais, endereço do remetente e pelo menos um destinatário.",
"imageAlt": "Formulário email: servidor SMTP, porta, TLS, utilizador, palavra-passe, remetente, destinatários separados por vírgulas e prefixo do assunto",
"imageCaption": "Configure servidor SMTP, porta e TLS, eventuais credenciais, remetente, destinatários separados por vírgulas e prefixo do assunto para filtrar alertas.",
"appNote": "O Monitor usa autenticação SMTP por palavra-passe. Gmail pode exigir uma <strong>palavra-passe de aplicação</strong>. Na Microsoft depende do serviço e política do tenant: essa credencial não contorna o bloqueio da autenticação Basic. Verifique o método permitido.",
"gmailTitle": "Senha do aplicativo do Gmail",
"gmailIntro": "As palavras-passe de aplicação Gmail exigem <strong>verificação em dois passos</strong> ativa. Sem isso, a página <em>Palavras-passe de aplicações</em> não está disponível.",
"gmailItems": [
"Abra <a>myaccount.google.com/security</a> e ative <em>Verificação em dois passos</em>.",
"Vá para <a>myaccount.google.com/apppasswords</a>.",
"Introduza um nome, por exemplo <em>ProxMenux</em>, prima <em>Criar</em> e copie a palavra-passe de 16 caracteres.",
"Defina <em>Servidor</em> <code>smtp.gmail.com</code>, <em>Porta</em> <code>587</code>, <em>Modo TLS</em> <code>STARTTLS</code>, <em>Utilizador</em> com o endereço Gmail e <em>Palavra-passe</em> com os 16 caracteres gerados."
],
"outlookTitle": "Senha do aplicativo Microsoft / Outlook",
"outlookIntro": "Microsoft exige <strong>verificação em dois passos</strong> para palavras-passe de aplicação, mas isso não garante compatibilidade SMTP. Se o serviço ou tenant exigir OAuth2, o cliente SMTP do Monitor baseado em palavra-passe não consegue autenticar-se. Use um relay com a autenticação exigida a montante.",
"outlookItems": [
"Abra o <a>account.microsoft.com/security</a> e habilite a verificação em duas etapas.",
"Se disponível, abra <em>Opções de segurança avançadas</em> → <em>Palavras-passe de aplicações</em> → <em>Criar nova palavra-passe de aplicação</em>. A sua existência não prova que o serviço aceite SMTP por palavra-passe.",
"Se Microsoft gerar uma palavra-passe de aplicação, copie-a e verifique se o serviço SMTP a aceita.",
"Só se o seu fornecedor permitir SMTP por palavra-passe, preencha os parâmetros aprovados: <em>Host SMTP</em> <code>smtp.office365.com</code> para Exchange Online, <em>Porta</em> <code>587</code>, <em>Modo TLS</em> <code>STARTTLS</code>, <em>Utilizador</em> com o endereço da caixa de correio e <em>Palavra-passe</em> com a credencial SMTP permitida. O Outlook.com pessoal tem definições e requisitos de autenticação diferentes; não presuma que estas credenciais funcionem."
],
"relayTitle": "Relay SMTP gerido por si",
"relayBody": "Pode usar um relay SMTP sob o seu controlo, como Postfix, que trate da autenticação a montante. Configure credenciais e TLS do Monitor conforme o relay: usar um relay local não desativa por si só a encriptação."
},
"pushover": {
"heading": "Pushover",
"intro": "Pushover é um serviço de push móvel com aplicativos oficiais para iOS, Android e navegadores de desktop. O canal ProxMenux dedicado fala diretamente com o <a>Pushover API</a>, então não é necessário nenhum URL Apprise.",
"stepsTitle": "Configurar",
"steps": [
"Crie uma conta <a>Pushover</a>, instale o aplicativo oficial nos dispositivos que devem receber alertas e iniciar sessão.",
"Copie a <em>chave de utilizador</em> do painel Pushover. Use uma chave de grupo se várias pessoas ou dispositivos precisarem do mesmo alerta.",
"Abra <a>Criar aplicação/token API</a>, crie <em>ProxMenux</em> e copie o token API de 30 caracteres.",
"Em <em>Definições → Notificações → Pushover</em> introduza chave de utilizador/grupo e token API. Dispositivo e som são opcionais.",
"Guarde e prima <em>Enviar teste</em>. Verifique a receção na aplicação Pushover."
],
"priorityTitle": "Correspondência de prioridades",
"priorityBody": "Normalmente usa prioridade Pushover 0. Com <strong>Alta prioridade para alertas críticos</strong>, eventos CRITICAL usam 1 e ultrapassam o silêncio configurado pelo utilizador no Pushover. Não usa prioridade de emergência 2, que exigiria repetições e confirmação de receção.",
"secretTitle": "Proteger ambos os valores",
"secretBody": "A chave de utilizador/grupo e o token API autorizam ambos os envios. O ProxMenux protege-os e oculta-os na interface; não os publique em capturas ou registos de suporte."
},
"apprise": {
"heading": "Apprise: acesso a cerca de 80 serviços",
"intro": "Apprise é uma biblioteca de código aberto que integra cerca de 80 serviços por URL. O canal permite chegar a ntfy, Matrix, Slack, Microsoft Teams, Mattermost, Pushbullet, AWS SNS, Pushsafer, Rocket.Chat, Signal API e outros sem integração ProxMenux dedicada. Também suporta Pushover, cuja configuração nativa é mais simples para um único destino.",
"listIntro": "A lista completa de serviços suportados e o formato exato de URL para cada um está disponível na documentação oficial Apprise:",
"listItems": [
"<a>Documentação dos serviços Apprise</a>: índice completo dos serviços suportados.",
"<a>Noções básicas dos URL</a>: estrutura dos URL Apprise."
],
"stepsTitle": "Passos",
"steps": [
"Escolha o serviço na <a>wiki Apprise</a> e copie o seu modelo URL. A página indica esquema (<code>ntfy://</code>, <code>matrix://</code>, <code>pover://</code>, <code>slack://</code>…), tokens, canais e nomes de anfitrião necessários.",
"Preencha os placeholders com suas próprias credenciais. Por exemplo, um tópico ntfy.sh se parece com <code>ntfy://ntfy.sh/my-topic</code>; uma URL Pushover parece com <code>pover://user@token</code>; uma URL Matrix parece com <code>matrix://user:pass@host:port/#room</code>.",
"Colar o URL final no campo <em>Apprise URL</em> na aba Apprise do painel Notificações e salvar.",
"Prima <em>Enviar teste</em> para verificar ligação e credenciais."
],
"deliveredTitle": "O que é entregue",
"deliveredBody": "Apprise recebe título, texto e gravidade (info/success/warning/failure), convertida no formato do serviço: ícone, prioridade ou cor. Formatação e reescrita IA ocorrem antes do envio, como nos outros canais.",
"fanoutTitle": "Um URL por canal Apprise",
"fanoutBody": "O Monitor aceita um URL Apprise. Para distribuir por vários serviços, como ntfy.sh e Matrix, pode usar um <a>servidor API Apprise</a> com configuração por etiquetas: o Monitor chama o endpoint e o servidor distribui pelos destinos da etiqueta."
},
"rich": {
"heading": "Mensagens formatadas, categorias e filtros por canal",
"intro": "Cada canal oferece <em>Mensagens formatadas</em>, onze <em>Categorias de notificação</em> expansíveis com opções por evento e <em>Enviar teste</em> no fim.",
"imageAlt": "Categorias de notificação com formatação, grupos VM/CT, cópias de segurança, recursos, armazenamento, rede, segurança, cluster, serviços, Health Monitor e atualizações, contadores e botão de teste",
"imageCaption": "A seta indica <em>Mensagens formatadas</em> do canal. Abaixo ficam onze categorias com opções por evento e <em>Enviar teste</em>.",
"richTitle": "Mensagens formatadas",
"richIntro": "Com <em>Mensagens formatadas</em>, o título inclui o emoji da categoria e o texto usa a formatação do canal, como HTML Telegram ou bloco Discord com cor da gravidade. Ao desativar envia o mesmo conteúdo em texto simples.",
"plainHeader": "Texto simples: formatação desativada",
"richHeader": "Formatado: formatação ativa",
"richOutro": "A opção é independente por canal: por exemplo email simples e Telegram/Discord formatados. Canais sem formatação em linha, como email simples e Gotify, recebem texto de qualquer modo.",
"togglesTitle": "Categorias por evento",
"togglesIntro": "Cada canal controla categorias e eventos individualmente. Desativar uma categoria suprime os seus eventos nesse canal; as opções individuais aplicam-se nas categorias ativas. Não existe um filtro global principal de eventos no processo de envio.",
"togglesItems": [
"<strong>Categoria por canal.</strong> Desativar VM/CT suprime <code>vm_start</code> e eventos relacionados nesse canal. As preferências ficam em <code>&lt;channel&gt;.events.&lt;group&gt;</code>.",
"<strong>Evento por canal.</strong> Numa categoria ativa pode <em>enviar <code>backup_complete</code> para Discord mas não Telegram</em>. A preferência fica em <code>&lt;channel&gt;.event.&lt;event_type&gt;</code>."
],
"togglesOutro": "Cada categoria mostra eventos <em>ativos</em>/<em>totais</em> e uma opção para os ativar ou desativar em conjunto, como cópias <code>info</code> ou atualizações, sem expandir a secção."
},
"quiet": {
"heading": "Horário de silêncio",
"intro": "Nesta faixa horária do canal só passam imediatamente eventos <strong>CRITICAL</strong>. INFO, WARNING e ações são guardados e enviados num resumo no fim da faixa.",
"imageAlt": "Definições do canal: silêncio 22:00–07:00 com previsão da transição e resumo diário às 09:00; a nota sobre CRITICAL/WARNING refere-se ao resumo",
"imageCaption": "Horário de silêncio em cima e resumo diário em baixo, independentes por canal.",
"purposeTitle": "Para que serve",
"purposeItems": [
"<strong>Sem avisos de atualização às 03:00.</strong> O horário de silêncio adia notificações INFO, como cópias bem-sucedidas e atualizações.",
"<strong>As urgências continuam imediatas.</strong> Só os eventos efetivamente CRITICAL ultrapassam o silêncio. O nome não basta: o monitor do registo emite bloqueios Fail2Ban e avisos de encerramento/reinício como INFO, pelo que podem aguardar.",
"<strong>As mensagens ficam guardadas.</strong> Os eventos adiados permanecem no buffer SQLite até ao fim da faixa."
],
"howTitle": "Como funciona",
"howItems": [
"<strong>Opção por canal.</strong> Telegram pode ficar silencioso 22:00–07:00 enquanto o email continua a enviar 24/7.",
"<strong>Hora inicial e final</strong> no fuso horário local: início incluído e fim excluído. Pode atravessar a meia-noite, por exemplo 22:00–07:00.",
"<strong>Pré-visualização em tempo real</strong>: mostra se a faixa está ativa e quando mudará de estado.",
"<strong>Durante a faixa:</strong> CRITICAL segue o envio normal. INFO e WARNING ficam no buffer persistente <code>quiet_pending</code> do SQLite.",
"<strong>Quando a janela fecha:</strong> uma única notificação agrupada é enviada com tudo o que se acumula — uma linha por evento buffered, em ordem cronológica. O buffer é limpo apenas após o canal confirmar a entrega, então uma parada transitória Telegram / SMTP não perde o contexto da noite.",
"<strong>Após reiniciar.</strong> O buffer permanece no disco. Se o Monitor regressar depois do fim da faixa, o ciclo seguinte recupera as entradas pendentes num resumo."
],
"criticalTitle": "Que eventos são CRITICAL",
"criticalBody": "A fonte define a gravidade de cada evento. Um evento de disco, encerramento ou segurança não é automaticamente CRITICAL. O monitor do registo emite ip_block, system_shutdown e system_reboot como INFO. O <link>Catálogo de eventos</link> lista os tipos; verifique a gravidade efetiva no evento recebido e no produtor."
},
"digest": {
"heading": "Resumo diário de eventos INFO",
"intro1": "O resumo diário é <strong>opcional</strong>: reúne eventos INFO elegíveis, como atualizações disponíveis, e envia-os às 09:00 ou à hora escolhida. Resultados de cópias/replicação e ações imediatas ficam excluídos. O horário de silêncio adia mensagens não críticas numa faixa diária.",
"intro2": "Fica abaixo do horário de silêncio no mesmo cartão do canal; veja <link>Horário de silêncio</link>. As duas funções são ativadas independentemente.",
"purposeTitle": "Para que serve",
"purposeItems": [
"<strong>Um resumo de manhã.</strong> Se verifica o anfitrião uma vez por dia, pode ler às 09:00 um único resumo em vez de 20 notificações separadas.",
"<strong>Separar informações e urgências.</strong> O resumo reúne eventos INFO elegíveis; CRITICAL e WARNING não aguardam pelo resumo."
],
"howTitle": "Como funciona",
"howItems": [
"<strong>Ativação por canal.</strong> Desativado por predefinição. Ative só nos canais onde pretende um resumo; os restantes mantêm envios imediatos.",
"<strong>Hora de envio</strong> no fuso local, inicialmente 09:00. Pode alterá-la; o processo envia até cerca de 60 segundos após o minuto definido.",
"<strong>No resumo:</strong> eventos genéricos elegíveis de nível <strong>INFO</strong>. Por exemplo, <em>atualizações de aplicações</em>, <em>atualizações Tailscale</em>, <em>atualizações de otimizações ProxMenux</em> e <em>atualizações de segurança APT</em>. Resultados de cópias e outros eventos de ações excluídas continuam imediatos.",
"<strong>O que nunca é atrasado:</strong>",
"<strong>Persistência.</strong> Os eventos permanecem em SQLite, na tabela <code>digest_pending</code>, até à hora escolhida e sobrevivem aos reinícios do Monitor.",
"<strong>Sem eventos, sem resumo.</strong> Não envia mensagens vazias quando não existem eventos INFO a resumir."
],
"neverDelayedSub": [
"<strong>CRITICAL</strong> eventos sempre passam imediatamente.",
"<strong>WARNING</strong> eventos sempre passam imediatamente.",
"Início, paragem, encerramento, reinício e falhas VM/CT, início e resultados de cópias, resultados de replicação e encerramento/reinício do anfitrião não entram no resumo, mesmo como INFO. O horário de silêncio pode ainda adiar os não críticos."
],
"comboTitle": "Combinar horário de silêncio e resumo diário",
"comboBody": "Pode ativar <em>ambos</em>: silêncio 22:00–07:00 e resumo 09:00. Os eventos não críticos durante o silêncio saem no resumo das 07:00; INFO elegíveis fora da faixa entram no diário. CRITICAL ultrapassa ambos; WARNING ultrapassa o resumo mas aguarda no silêncio. Escolha uma <em>faixa de silêncio</em>, um <em>resumo a hora fixa</em> ou ambos."
},
"displayName": {
"heading": "Nome apresentado",
"intro": "O <em>nome apresentado</em> identifica o anfitrião de origem. Surge nas mensagens formatadas, por exemplo <code>🏠 home-lab</code>, e no prefixo do assunto email.",
"imageAlt": "Mostrar o campo Nome com o valor amd mostrado como exemplo, etiqueta Nome mostrado nas notificações - edite para personalizar ou deixe em branco para usar o nome da máquina do sistema",
"imageCaption": "Deixe o campo vazio para usar o nome do anfitrião ou introduza uma etiqueta personalizada.",
"outro": "Se o campo estiver vazio, o Monitor cai de volta para o nome da máquina do sistema. A substituição é mais útil quando você executa vários hosts ProxMenux que enviam para o mesmo chat ou caixa de entrada Telegram — uma etiqueta mais amigável (<em>home-lab</em>, <em>office-pve</em>) é mais fácil de ler do que <code>pve01.lan</code> ou <code>pmx-prod-01</code>."
},
"dispatch": {
"heading": "Processo de envio",
"intro": "A tabela descreve três mecanismos relacionados. O fluxo real começa pela agregação de eventos próximos, depois verificações de envio/intervalo, limites por grupo, formatação e controlos por canal.",
"headerStage": "Etapa",
"headerWhat": "O que ele faz",
"headerTunable": "Configurável?",
"rows": [
{
"stage": "Deduplicação por assinatura",
"what": "Calcula uma assinatura do evento (<code>event_type + key fields from data</code>). Assinaturas idênticas num intervalo curto são consideradas duplicados.",
"tunable": "Não — lógica interna do expedidor."
},
{
"stage": "Intervalo entre envios",
"what": "Após envio bem-sucedido suprime repetições e guarda o estado em <code>notification_last_sent</code>. Valores base: 86 400 s para <code>CRITICAL</code>, <code>WARNING</code>, <code>INFO</code>, <code>resources</code> e <code>updates</code>. Exceções: 5 s para ações VM/CT e encerramento/reinício do anfitrião, 10 s para resultados de cópias/replicação, 1 800–3 600 s para várias categorias de saúde. Definições explícitas por evento/grupo prevalecem.",
"tunable": "Apenas através da API de definições: uma chave <code>cooldown.&lt;event_type&gt;</code> ou <code>cooldown.&lt;group&gt;</code> substitui os valores predefinidos; não existe nenhum controlo na interface."
},
{
"stage": "Agregação de eventos próximos",
"what": "Vários eventos do mesmo tipo num intervalo curto, como tentativas SSH repetidas, são reunidos numa mensagem <code>burst_*</code> com contagem e exemplo.",
"tunable": "Não: janela e limiar estão definidos no código por tipo de evento."
}
],
"calloutTitle": "Os envios ocorrem em segundo plano",
"calloutBody": "Um thread dedicado processa os envios. O pedido HTTP que produz o evento termina ao colocá-lo na fila, sem aguardar Telegram, SMTP ou webhook. O resultado de cada envio fica no histórico."
},
"aiRewrite": {
"heading": "Reescrita IA opcional",
"body1": "Eventos elegíveis podem ser reescritos por um LLM. Resultados de cópias (backup_complete e backup_fail) ficam excluídos. IA está desativada por predefinição e, quando ativa, trabalha no thread de envio. Se a chamada falhar ou expirar, usa o texto original do modelo.",
"body2": "Seis fornecedores: OpenAI, Anthropic, Google Gemini, Groq, OpenRouter e Ollama. Cada canal escolhe detalhe (<code>brief</code>, <code>standard</code>, <code>detailed</code>), idioma, modo do prompt (<code>default</code>/<code>custom</code>) e prompt personalizado. Veja <link>Assistente IA</link> para configuração e exemplos.",
"privacyTitle": "Nota de privacidade",
"privacyBody": "Os pedidos IA podem incluir título, gravidade, texto, prompt e contexto: nomes de anfitrião, IP, utilizadores, erros e linhas do registo. Seguem para o endpoint escolhido. Ollama só permanece local com servidor e modelo ambos locais; servidores remotos ou modelos cloud enviam dados para fora do anfitrião. Para os manter na rede, desative a reescrita ou use endpoint e modelo locais controlados."
},
"pveWebhook": {
"heading": "Integração PVE webhook",
"intro1": "Proxmox dispõe de <em>destinos</em> sendmail, Gotify, SMTP e webhook quando suportado. Ativar notificações do Monitor regista um destino <code>webhook</code>. Eventos PVE, como HA, replicação e relatórios de cópias da interface, podem assim usar o mesmo processo de envio.",
"intro2": "O alvo é visível da GUI Proxmox no <em>Datacenter → Notificações → Alvos de Notificação</em>:",
"imageAlt": "Webhook Proxmox com destino proxmenux-webhook, método POST, URL local 8008 e modelo JSON com escape dos valores e campos json",
"imageCaption": "O alvo webhook do lado PVE como o Proxmox vê-lo (a GUI está no locale configurado da máquina — espanhol neste exemplo). Os mesmos campos aplicam-se em qualquer idioma.",
"registeredIntro": "O que é registrado:",
"registeredItems": [
"<strong>Método e URL.</strong> <code>POST http://127.0.0.1:8008/api/notifications/webhook</code> sem HTTPS do Monitor. Com HTTPS usa o listener HTTP local separado na porta 8009. Ambos permanecem no mesmo anfitrião.",
"<strong>Modelo do corpo.</strong> Usa os auxiliares Handlebars do PVE. O PVE guarda-o codificado em base64; o conteúdo JSON é:",
"<strong>Matcher.</strong> Um bloco <code>matcher: proxmenux-matcher</code> companheiro com <code>mode all</code> para que cada notificação PVE atinja o alvo.",
"<strong>Configuração privada.</strong> A configuração escreve o bloco correspondente <code>webhook: proxmenux-webhook</code> em <code>/etc/pve/priv/notifications.cfg</code> com uma entrada <code>secret</code> chamada X-Webhook-Secret, codificada em base64. O bloco público do destino contém apenas o modelo do corpo, o método e o URL. O bloco privado não é um esboço vazio."
],
"securityTitle": "Como o receptor está seguro",
"securityIntro": "O receptor webhook em <code>POST /api/notifications/webhook</code> aplica diferentes camadas de segurança, dependendo de onde o pedido vem:",
"securityItems": [
"<strong>Fontes locais (<code>127.0.0.1</code>/<code>::1</code>).</strong> Aplica limites de frequência, omitindo verificações remotas de segredo, data/hora e repetições. Endereços atribuídos às interfaces do anfitrião também são locais. O destino PVE automático usa loopback.",
"<strong>Pedidos remotos.</strong> Além dos limites verifica o segredo <code>X-Webhook-Secret</code>, data/hora em <code>X-ProxMenux-Timestamp</code> ou JSON, repetições e eventual lista IP. O segredo fica em SQLite e é copiado em base64 para <code>/etc/pve/priv/notifications.cfg</code> para o cabeçalho PVE."
],
"practiceTitle": "Na prática",
"practiceBody": "PVE usa <code>http://127.0.0.1:8008</code> sem HTTPS, ou HTTP 8009 com HTTPS do Monitor. Para chamar <code>https://&lt;monitor-host&gt;:&lt;port&gt;/api/notifications/webhook</code> externamente, envie <code>X-Webhook-Secret</code> e data/hora atual e cumpra verificações IP e de repetições. Só o segredo não basta.",
"actionsIntro": "O Monitor gerencia este alvo através de três ações na aba Configurações:",
"actionsItems": [
"<strong>Setup</strong> — é executado automaticamente quando você ativa as notificações. Cria a entrada em <code>/etc/pve/notifications.cfg</code>. O arquivo é escrito apenas quando seu conteúdo tem que mudar, e uma cópia do anterior é mantida em <code>/usr/local/share/proxmenux/backups/pve-notifications/</code> (o mais novo três). Nada é escrito enquanto o <code>/etc/pve</code> não está montado: um Monitor que começa durante um reinício do <code>pve-cluster</code> registra a entrada uma vez que está de volta.",
"<strong>Limpeza</strong>: remove a entrada e mantém a cópia anterior.",
"<strong>Ler configuração</strong>: mostra destinos e regras PVE atuais para verificar o percurso efetivo quando existem vários envios configurados."
],
"clusterTitle": "Nós de agrupamento",
"clusterBody": "<code>/etc/pve/</code> é partilhado no cluster, incluindo URL e segredo. Cada nó chama o seu <em>próprio</em> listener: <code>127.0.0.1:8008</code> sem HTTPS ou HTTP 8009 com HTTPS. Execute o Monitor em cada nó relevante e mantenha o destino partilhado consistente com todos os listeners."
},
"catalogue": {
"heading": "Catálogo de eventos",
"intro": "Cerca de setenta tipos de eventos são agrupados em onze categorias de IU. O painel Notificações mostra uma seção colapsável por grupo com uma opção para cada evento dentro dele. Cada evento está ligado por padrão, a menos que explicitamente marcado de outra forma.",
"headerGroup": "Grupo",
"headerEvents": "Eventos",
"rows": [
{
"group": "VM/CT",
"events": "<code>vm_start</code>, <code>vm_start_warning</code>, <code>vm_stop</code>, <code>vm_shutdown</code>, <code>vm_fail</code>, <code>vm_restart</code>, mais o <code>ct_*</code> equivalentes, <code>migration_start</code>, <code>migration_complete</code>, <code>migration_warning</code>, <code>migration_fail</code>, <code>replication_complete</code>, <code>replication_fail</code>."
},
{
"group": "Cópias de segurança",
"events": "<code>backup_start</code>, <code>backup_complete</code>, <code>backup_warning</code>, <code>backup_fail</code>, <code>snapshot_complete</code>, <code>snapshot_fail</code>."
},
{
"group": "Recursos",
"events": "<code>cpu_high</code>, <code>ram_high</code>, <code>temp_high</code>, <code>load_high</code>."
},
{
"group": "Armazenamento",
"events": "<code>disk_space_low</code>, <code>disk_io_error</code>, <code>storage_unavailable</code>, <code>smart_test_complete</code>, <code>smart_test_failed</code>."
},
{
"group": "Rede",
"events": "<code>network_down</code>, <code>network_latency</code>."
},
{
"group": "Segurança",
"events": "<code>auth_fail</code>, <code>ip_block</code>, <code>firewall_issue</code>, <code>user_permission_change</code>."
},
{
"group": "Cluster",
"events": "<code>split_brain</code>, <code>node_disconnect</code>, <code>node_reconnect</code>."
},
{
"group": "Serviços",
"events": "<code>system_startup</code>, <code>system_shutdown</code>, <code>system_reboot</code>, <code>system_problem</code>, <code>service_fail</code>, <code>oom_kill</code>, <code>system_mail</code>."
},
{
"group": "Monitor de Saúde",
"events": "<code>new_error</code>, <code>error_resolved</code>, <code>error_escalated</code>, <code>health_degraded</code>, <code>health_persistent</code>, <code>health_issue_new</code>, <code>health_issue_resolved</code>."
},
{
"group": "Atualizações",
"events": "<code>update_summary</code>, <code>update_available</code>, <code>pve_update</code>, <code>update_complete</code>, <code>proxmenux_update</code>."
},
{
"group": "Hardware / GPU",
"events": "<code>gpu_mode_switch</code>, <code>gpu_passthrough_blocked</code>, <code>pci_passthrough_conflict</code>, <code>ai_model_migrated</code>."
}
],
"burstNote": "Eventos agregados <code>burst_*</code>, como <code>burst_auth_fail</code>, <code>burst_ip_block</code> e <code>burst_disk_io</code>, substituem vários eventos por um resumo. Não têm opções próprias: herdam o estado do evento de origem.",
"backupResults": {
"heading": "Resultados da cópia de segurança",
"intro": "A notificação descreve o resultado da cópia reportado pelo Proxmox. O resultado determina título, ícone das <em>Mensagens formatadas</em> e linha de estado no email.",
"headerIcon": "Icon",
"headerResult": "Resultado",
"headerWhen": "Quando",
"rows": [
{
"icon": "💾✅",
"result": "Backup concluído",
"when": "Todos os convidados terminaram e o relatório não contém avisos."
},
{
"icon": "💾⚠️",
"result": "Backup concluído com avisos",
"when": "Todos os convidados terminaram e o relatório contém pelo menos uma linha de aviso."
},
{
"icon": "💾❌",
"result": "Erro de cópia de segurança reportado",
"when": "Um convidado falhou ou o processo terminou com erro."
},
{
"icon": "💾❔",
"result": "Resultado da cópia de segurança não confirmado",
"when": "O relatório está incompleto ou não indica um resultado para cada hóspede."
}
],
"items": [
"<strong>O título identifica a tarefa.</strong> Inclui armazenamento e, com um só convidado, tipo, nome e ID. Se falhar identifica o convidado envolvido.",
"<strong>O corpo lista cada guest</strong> com seu próprio resultado, tamanho, duração e arquivo, seguido de uma linha com os totais do trabalho.",
"<strong>Avisos e erros surgem uma só vez.</strong> A causa principal fica primeiro. Acima de oito linhas, conta as restantes no fim; continuam no registo de tarefas Proxmox.",
"<strong>Se falhar antes do primeiro convidado</strong>, mostra o motivo reportado pelo Proxmox, como armazenamento inexistente.",
"<strong>Os resumos preservam o resultado.</strong> No resumo do horário de silêncio, a cópia mantém o seu ícone. Resultados de cópias não entram no resumo diário."
]
}
},
"history": {
"heading": "Histórico",
"body1": "Cada <em>tentativa</em> efetiva fica em <code>notification_history</code>: data <code>sent_at</code>, canal, evento, gravidade, título, texto, resultado <code>success</code> e eventual <code>error_message</code>. Um grupo agregado surge como uma linha <code>burst_*</code>. Eventos suprimidos pelo intervalo entre envios não geram tentativas nem entradas.",
"body2": "Definições → Notificações inclui a secção <em>Histórico de notificações</em>, inicialmente fechada, com os últimos 20 envios, resultado, canal, data, erro e resultado dos resumos. Não oferece eliminação: Auditoria e relatório lê o mesmo histórico para verificar os envios.",
"body3": "Os mesmos dados são expostos em <code>GET /api/notifications/history</code> com parâmetros de consulta opcional <code>limit</code>, <code>offset</code>, <code>severity</code> e <code>channel</code>, e podem ser limpos com <code>DELETE /api/notifications/history</code>."
},
"api": {
"heading": "Endpoints API",
"headerEndpoint": "Endpoint",
"headerMethod": "Método",
"headerUse": "Usar",
"rows": [
{
"endpoint": "/api/notifications/settings",
"method": "GET / POST",
"use": "Lê ou guarda configuração de canais, eventos, reescrita IA e nome apresentado."
},
{
"endpoint": "/api/notifications/test",
"method": "POST",
"use": "Enviar uma notificação de teste para um canal: <code>'{'\"channel\":\"telegram\"'}'</code>."
},
{
"endpoint": "/api/notifications/test-ai",
"method": "POST",
"use": "Redigir e reescrever um evento de exemplo sem o enviar."
},
{
"endpoint": "/api/notifications/provider-models",
"method": "POST",
"use": "Listar modelos disponíveis para o fornecedor de IA selecionado."
},
{
"endpoint": "/api/notifications/send",
"method": "POST",
"use": "Emitir um evento de fora (integrações personalizadas)."
},
{
"endpoint": "/api/notifications/history",
"method": "GET / DELETE",
"use": "Leia o histórico com filtros; limpe- o."
},
{
"endpoint": "/api/notifications/webhook",
"method": "POST",
"use": "Recebe notificações Proxmox. Endereços locais omitem os controlos remotos mas têm limites de frequência. Nos pedidos remotos verifica <code>X-Webhook-Secret</code>, data/hora em <code>X-ProxMenux-Timestamp</code> ou JSON, repetições e eventual lista IP."
},
{
"endpoint": "/api/notifications/proxmox/setup-webhook",
"method": "POST",
"use": "Registar o Monitor como alvo em <code>/etc/pve/notifications.cfg</code>."
},
{
"endpoint": "/api/notifications/proxmox/cleanup-webhook",
"method": "POST",
"use": "Remova o alvo Monitor da configuração de notificação do PVE."
},
{
"endpoint": "/api/notifications/proxmox/read-cfg",
"method": "GET",
"use": "Mostrar a configuração de notificação PVE atual como PVE vê."
}
]
},
"whereNext": {
"heading": "Leituras seguintes",
"items": [
{
"label": "Assistente de IA",
"href": "/docs/monitor/ai-assistant",
"tail": " — fornecedores, modelos, modos do prompt, idiomas e detalhe por canal."
},
{
"label": "Monitor de Saúde",
"href": "/docs/monitor/health-monitor",
"tail": " — o maior produtor único de eventos, com duração de supressão própria por categoria."
},
{
"label": "Arquitetura",
"href": "/docs/monitor/architecture",
"tailRich": " — lugar das tabelas SQLite <code>notification_last_sent</code>, <code>notification_history</code> e do thread de envio na arquitetura do Monitor."
},
{
"label": "Acesso e autenticação",
"href": "/docs/monitor/access-auth",
"tailRich": " — criação de tokens API para scripts que chamam <code>/api/notifications/send</code>."
},
{
"label": "Painel → Registos do Sistema",
"href": "/docs/monitor/dashboard/system-logs",
"tail": " — vista em tempo real do registo usado pelo respetivo monitor."
}
]
}
}