ASP
Você está aqui: Home » ASP » Sistema Monitor
Sistema Monitor

SISTEMA MONITOR
Quantos são e quem são os usuários online?
Qual o tempo médio de navegação por usuário?
Quais são os horários de maior atividade?
Qual o máximo de usuários navegando simultaneamente?
Os procedimentos utilizados no Sistema Monitor aqui descrito não são necessariamente os melhores em código ou performance. São, no entanto, o que considerei (segundo meu próprio julgamento) ao alcance da maioria dos usuários. Aqueles que esperam apenas "código mastigado" dificilmente farão proveito desse artigo. Um outro detalhe importante é que estou fazendo uso do Global.asa. Mais tarde vou escrever uma adaptação para quem não pode utilizar global.asa (normalmente em hospedagem gratuita).
O primeiro ponto a ser abordado será a contagem, pura e simples, dos usuários ONLINE. Isso é possível através das "Subs" Session_OnStart e Session_OnEnd (no global.asa), conforme descrito abaixo.
Inicialmente você deverá ter definido uma variável Application no Application_OnStart
Sub Application_OnStart
Application("MaxCurrentVisit") = 0
Application("OnlineVisit") = 0
End Sub
SubSession_OnStart
Application("OnlineVisit") = Application("OnlineVisit") + 1
if Application("OnlineVisit") > Application("MaxCurrentVisit") then
Application("MaxCurrentVisit") = Application("OnlineVisit")
End if
End Sub
Sub Session_OnEnd
Application("OnlineVisit") = Application("OnlineVisit") - 1
End Sub
Session_OnStart é executada a cada vez que uma sessão é iniciada, o navegador é "instanciado". A Session_OnEnd é executada a cada encerramento de sessão, e isso pode ocorrer de 2 maneiras.
- a) Através de Session.Abandon. Se existe um botão "fim" e o desenvolvimento foi correto, haverá uma "chamada" a Session.abandon. O navegador será fechado, ou haverá redirecionamento para página padrão...
- b) Não ocorreu nenhum "request" nos últimos "n" minutos, sendo "n" o valor de Session.TimeOut. É muito utilizado por questões de segurança, e o valor padrão é 20 (minutos). Se o usuário simplesmente fechar o navegador (como normalmente acontece), a sessão expirará pelo tempo, e Session_OnEnd será executada.
Até aqui podemos saber, com uma pequena margem de erro (podemos até mesmo desconsiderar, uma vez que o s servidor precisa tratar a sessão até sua expiração) o número de usuários online, mas ainda não podemos saber QUEM são eles.
Esse é o segundo ponto, e para isso vamos utilizar uma tabela de um banco de dados, lembrando que não é necessariamente a melhor opção quanto à performance, mas sim quanto ao entendimento, à didática.
Vamos identificar o usuário pelo Session.SessionID, gerado a cada sessão. É um identificador único, podendo ser utilizado como chave primária, diferente do IP, que pode ser compartilhado. E ainda há a possibilidade, muito comum, de um mesmo usuário, em uma mesma máquina, abrir o mesmo site várias vezes. Por essa razão, não podemos utilizar o IP como identificador do usuário.
Essa tabela contará, para nosso simples exemplo, com um campo SessionID (numérico), e outro DtLastMov (Data&Hora).
Uma vez que o usuário faça o acesso à primeira página (e isso deve ser tratado, pois o usuário já tarimbado pode ir diretamente à página que deseja), seu SessionID deve ser inserido, juntamente com a Data & Hora. A cada novo request (mudança de página ou "submit" de formulário são casos típicos) o registro com seu SessionID deve ser atualizado com now().
Uma vez que Session_OnStart e Session_OnEnd nos informam o número de usuários online, se fizermos um select to tipo...
sql = "SELECT TOP " & Application(OnlineVisit) & " * FROM tabela ORDER BY DtLastMov DESC"
… saberemos exatamente QUEM está online! Um campo IP pode ser utilizado ou USER (para sites que cadastram usuários), ou mesmo a combinação de ambos. É possível saber quem são os usuários logados e quem são os visitantes.
Se somarmos n minutos, sendo n o valor de Session.TimeOut ao último movimento de cada usuário podemos ter o tempo que cada um ficou online.
Vamos ver como podemos trabalhar com soma e subtração em campo Data & Hora. Utilizaremos, inicialmente, a função now()
Now() + 1 = Data&hora atual + 1 dia
Now() + (1/24) = Data&hora atual + 1 hora
Now() + (1/24/60) = Data&Hora atual + 1 minuto
Com DateDiff("n", DataHora1, Datahora2) calculamos o intervalo, em minutos, de duas variáveis "datahora". É importante que os segundos serão desconsiderados. Por exemplo:
DateDiff("n",d1, d2) retornará 3.
Uma vez calculado o tempo individual, podemos obter facilmente a média (um pouco de matemática, não mais ASP), além de detalhes como horas de maior tráfego e o que mais o desenvolvedor achar por bem. É importante lembrarmos que o ASP é tão dinâmico quanto nós pudermos ser. A limitação é nossa própria criatividade e capacidade de analisar dados. O número máximo de visitantes já está sendo tratado em Application("MaxCurrentVisit"), no Global.asa, e para que o proposto acima funcione corretamente é necessário tratar cada movimento do usuário. A utilização do Global.asa e as duas variáveis Application são suficiente para saber quantos são os visitantes do momento. A implementação do QUEM tem um certo custo e é necessário que cada movimento do usuário seja rastreado. Você poderá, assim, tratar seus usuários cadastrados e visitantes...
Vimos com um bom nível de detalhamento a teoria para a criação de um sistema monitor. Qualquer esclarecimento maior, ou dúvida quanto à implementação, basta enviar-me um e-mail.
Elildo Mancebo Reis
elildo@aspecto.net
www.aspecto.net
Deixe seu comentário:
Outros artigos postados por este autor
- Action Script 2.0 ( Primeira Parte )
- Paginando registros com o Dreamweaver MX
- Mudando a cor dos Olhos
- Organizando projetos com a classe FastTemplate (parte 1)
- Como fazer uma panorâmica 360 graus com equipamentos caseiros
- A relação entre “complexidade” e “investimento” no planejamento de empresas
Artigos relacionados sobre ASP
- Trabalhando com Arrays
- Sessões em ASP.NET
- Sistema Monitor
- Livro de Visitas
- Eficiência e segurança com SQL parametrizado
- SEO para ASP.NET 4.0 - Melhorias para o Básico de SEO
Parceiros
Tecnoponta
BR-Linux.org
Criar WEB
Orçamento de Sites
Venda de Site
Imóvel no Litoral Paulista
Montagens de Sites
Templates de Sites
Desenvolvedor de Sites
Elaboração de Sites
Produção de Sites
Programador de Sites
Criadores de Sites
Artigos mais acessados
Desenho de Letras - Construindo fontes TTF
Enviando email em formato HTML em PHP
Criando um sistema de login
Cargos e salários na área de informática
Menu Circular em 3D
Como fazer e modificar calendários
10 dicas de Webdesign para salvar seu site
Action Script 2.0 ( Primeira Parte )
Fireworks VS Photoshop
Criando gráficos com a classe JPGraph (parte 1)
Conceitos de Programação e ActionScript
Criação de Menu Deslizante através do DreamWaver
Serviços
Desenvolvimento de Sites e Sistemas WEB
Otimização de Sites (SEO)
Loja Virtual com Sistema Pagseguro
Sistema de Compra Coletiva
Catálogo de Produtos
Parcerias e Soluções de Publicidade
Portifólio Grupo SOS Designers
Fale Conosco







