FJFrigo · Manutenção · Usuários › 5-Usuários Online · 445 e 6-Transações Abertas · 446

Usuários Online e Transações Abertas

Duas telas de diagnóstico. A 445 mostra quem está no sistema, quem está bloqueado e quem está travado por tentativas de senha; a 446 mostra as transações do banco paradas há mais de 10 segundos e deixa o master encerrar uma. Cada regra traz a mensagem exata, quando dispara e o confronto com o sistema antigo.

Tabelas: usuario_log, usuario, grupo_usuario, filial · information_schema.innodb_trx e PROCESSLIST Programas antigos: menu445.prg, menu446.prg

Bloqueia

Não executa. statuscode 400 com a frase abaixo, que a tela mostra como está.

Aviso

Passa, mas com um comportamento que surpreende quem está conferindo — ou é conferido só na tela.

Só leitura, quase

A 445 não grava nada. A 446 só tem uma ação — encerrar a conexão — e ela é do master.

A

Usuários Online (445)

UsuarioOnlineService

Uma linha por usuário em usuario_log (a tabela guarda só o último login de cada um): nome, status, bloqueado, travado por tentativas, login, última atividade, logout, grupo, tipo do grupo e filial ("Todas" quando o usuário não tem filial única). Ordena Online primeiro. Botões: filtro de status e Atualizar.

Aviso

Off-line

QuandoQualquer um dos três: a última atividade é igual ao login (logou e não fez nada), a última atividade tem mais de 45 minutos, ou o logout é posterior à última atividade. Os demais saem "Online", com a linha em laranja.

Sistema antigoO mesmo cálculo (menu445.prg:211).

AtençãoNo sistema novo a última atividade só anda com interação de gente (clique ou tecla); aba esquecida aberta fica Off-line depois de 45 minutos.

Todos
Aviso

até 24/09/2026 14:35

QuandoColuna "travado por tentativas": o login está travado por senhas erradas (5 falhas em 15 minutos travam a conta por 15 minutos). A linha sai em vermelho, como a de usuário bloqueado no cadastro.

AtençãoA trava vive na memória do servidor, por banco + login: reiniciar o backend a apaga, e em mais de uma instância cada uma tem a sua. A trava por IP (50 falhas) não aparece aqui.

Sistema antigoNão existe.

Todos
Aviso

(sem mensagem) — usuário excluído do cadastro não aparece

QuandoLinha de usuario_log cujo usuário não existe mais. O sistema antigo junta por LEFT JOIN e mostra a linha sem nome (76 de 3.236 no central em 24/09/2026).

Todos
Aviso

(sem mensagem) — usuário que nunca entrou não aparece

QuandoSem linha em usuario_log, o usuário não é listado — nem como Off-line. Para ver o cadastro inteiro, use a 443.

Todos
Aviso

Bloqueados / Não bloqueados

QuandoFiltro só da tela, sobre a lista já carregada: "Bloqueados" junta o bloqueio do cadastro (usuario.bloqueado = 'T') e a trava por tentativas.

Todos
B

Transações Abertas (446)

TransacaoAbertaService

Lista as transações InnoDB com a conexão parada há mais de 10 segundos: thread, tempo, estado da transação e da operação, estado da conexão, a consulta, o host e o banco. Mais antigas primeiro; 60 segundos ou mais em vermelho, o resto em laranja. O botão Matar manda KILL <thread>, que encerra a conexão inteira — o que ela tinha feito na transação é desfeito pelo banco.

Bloqueia

Só usuário master pode encerrar uma conexão do banco.

QuandoClicar em Matar sem ser master (usuario.master). O botão aparece para todos; a recusa vem do servidor.

Sistema antigoO Kill é liberado pela permissão de "incluir" da opção (menu446.prg:228).

Todos
Aviso

Conexões do banco deste tenant, paradas há mais de 10 segundos.

QuandoA lista só traz conexões do banco da sessão (ps.db = DATABASE()). Conexão sem banco escolhido, ou de outro banco no mesmo servidor, não aparece.

Sistema antigoLista o servidor inteiro, sem filtro de banco (menu446.prg:130).

Todos
Aviso

Encerrar a conexão 1461863? A transação aberta nela será desfeita.

QuandoPergunta da tela antes de mandar o Matar. "Cancelar" não faz nada. No sistema antigo o kill executa direto (menu446.prg:250).

AtençãoA conexão pode ser a de um usuário no meio de uma gravação (que vai falhar e ser desfeita) ou do próprio backend. Conferir host e consulta antes.

Todos
Aviso

A conexão 1461863 não existe mais.

QuandoA thread terminou sozinha entre a listagem e o clique. Atualize a lista.

Todos
Bloqueia

A conexão 1461863 não é do banco desta sessão - não pode ser encerrada daqui.

QuandoO servidor confere no processlist, antes do KILL, que a conexão é do banco da sessão (db = DATABASE()) — o mesmo recorte da lista. Sem isso um master chamando a API direto encerraria a conexão de outro tenant do mesmo servidor.

Todos
Bloqueia

A conexão 1461863 é a desta própria consulta.

QuandoO id pedido é a conexão que o servidor está usando para atender o pedido.

Todos
C

Permissões

Quem pode passar

Ver as duas telas é de quem tem as opções 445 e 446 no menu (Acesso dos Grupos, 444). O único corte no servidor é o Matar da 446, só para usuario.master — o mesmo desenho da Config. Globais (41): ver é livre, agir é do master. Não há regra nomeada a conceder.

D

Como o erro chega na tela

Para o QA reproduzir e reportar

Recusa de regra: HTTP 200 com statuscode 400 e a frase, mostrada acima da grade. Erro inesperado (ex.: thread inexistente) traz o código de ocorrência de 8 caracteres — copie-o no chamado.

E

Regras chumbadas no código

Esperadas — não abrir como defeito

Os 45 minutos do "Off-line" (445) e os 10 segundos de corte da 446 estão na consulta, como no sistema antigo. Os limites da trava de senha (5 falhas, janela e bloqueio de 15 minutos, 50 por IP) são configuração do backend (app.login.tentativas.*).

F

Diferenças e decisões pendentes

O que muda em relação ao sistema antigo
PontoSituação
445 — usuário excluídofora da lista (JOIN interno); o sistema antigo mostra a linha sem nome
445 — trava por tentativascoluna nova; não existe no sistema antigo
446 — alcancesó o banco da sessão; o sistema antigo lista o servidor inteiro
446 — quem matasó o master; no sistema antigo, a permissão de incluir da opção
446 — KILL por ido servidor confere que a conexão é do banco da sessão antes do KILL (corrigido em 24/09/2026)
446 — confirmaçãoa tela pergunta antes de matar; o sistema antigo executa direto

Nenhuma regra bate com essa busca. Tente um trecho menor da mensagem, ou limpe os filtros.