Caso de sucesso no uso do Moodle - Área do Direito

Monitorização da utilização do Moodle

por Jose' Coelho -
Número de respostas: 5

É sempre um problema saber o que está a acontecer na plataforma, principalmente quando há muitos acessos. A informação dos relatórios do Moodle pouco ajuda, dado que não condensa a informação de forma a poder ser visivel. Fiz umas queries SQL à base de dados, e disponibilizo-as aqui, todas com um output condensado (30 linhas ou menos). Atenção que algumas das queries são pesadas (as mais pesadas, na configuração actual da UAb levam 30 segundos).

Para correr as queries é necessário entrar no Moodle na conta de administrador. Depois basta seguir os seguintes passos:
Administração do Sítio / Servidor / Gestão de base de dados / (clicar numa tabela, pode ser logo a primeira) adodb_logsql / SQL / (copy/paste do comando que se quiser para a caixa de texto) / Executa.

Contagens do site de:
- Páginas Vistas
- Mensagens em fóruns
- Caracteres em fóruns
- Utilizadores IP
- Utilizadores Registados
- Módulo / Acção
Periodo:
- último dia (cada hora)
- últimos 7 dias (cada dia)
- últimos 31 dias (cada dia)
- últimos 360 dias (cada mês de 30 dias)

Contagens por Utilizador de:
- Páginas Vistas
- Mensagens em fóruns
- Caracteres em fóruns
Periodo:
- nos últimos 7 dias (histograma 1-9; 10-99; 100-999; ...)
- nos últimos 30 dias (histograma 1-9; 10-99; 100-999; ...)


### PaginasVistasDia

SELECT ANO,MES,DIA,HORA, Count( * ) AS "Paginas Vistas"
FROM (
SELECT hour( FROM_UNIXTIME( time ) ) AS HORA, day(FROM_UNIXTIME( time )) As DIA,
month(FROM_UNIXTIME( time )) AS MES, year(FROM_UNIXTIME( time )) As Ano
FROM mdl_log
WHERE time > UNIX_TIMESTAMP( SUBDATE( CURDATE(  ) , 1 ) )
) AS HORAS
GROUP BY ANO,MES,DIA,HORA
ORDER BY ANO,MES,DIA,HORA

### PaginasVistasSemana

SELECT ANO,MES,DIA, Count( * ) AS "Paginas Vistas"
FROM (
SELECT day(FROM_UNIXTIME( time )) As DIA,
month(FROM_UNIXTIME( time )) AS MES, year(FROM_UNIXTIME( time )) As Ano
FROM mdl_log
WHERE time > UNIX_TIMESTAMP( SUBDATE( CURDATE(  ) , 7 ) )
) AS HORAS
GROUP BY ANO,MES,DIA
ORDER BY ANO,MES,DIA


### PaginasVistasMes

SELECT ANO,MES,DIA, Count( * ) AS "Paginas Vistas"
FROM (
SELECT day(FROM_UNIXTIME( time )) As DIA,
month(FROM_UNIXTIME( time )) AS MES, year(FROM_UNIXTIME( time )) As Ano
FROM mdl_log
WHERE time > UNIX_TIMESTAMP( SUBDATE( CURDATE(  ) , 31 ) )
) AS HORAS
GROUP BY ANO,MES,DIA
ORDER BY ANO,MES,DIA

### PaginasVistasAno

SELECT ANO,MES, Count( * ) AS "Paginas Vistas"
FROM (
SELECT month(FROM_UNIXTIME( time )) AS MES, year(FROM_UNIXTIME( time )) As Ano
FROM mdl_log
WHERE time > UNIX_TIMESTAMP( SUBDATE( CURDATE(  ) , 365 ) )
) AS HORAS
GROUP BY ANO,MES
ORDER BY ANO,MES


### MensagensForumDia

SELECT ANO,MES,DIA,HORA, Count( * ) AS "Mensagens em Foruns"
FROM (
SELECT hour( FROM_UNIXTIME( modified ) ) AS HORA, day(FROM_UNIXTIME( modified )) As DIA,

month(FROM_UNIXTIME( modified )) AS MES, year(FROM_UNIXTIME( modified )) As Ano
FROM mdl_forum_posts
WHERE modified > UNIX_TIMESTAMP( SUBDATE( CURDATE(  ) , 1 ) )
) AS HORAS
GROUP BY ANO,MES,DIA,HORA
ORDER BY ANO,MES,DIA,HORA

### MensagensForumSemana

SELECT ANO,MES,DIA, Count( * ) AS "Mensagens em Foruns"
FROM (
SELECT day(FROM_UNIXTIME( modified )) As DIA,
month(FROM_UNIXTIME( modified )) AS MES, year(FROM_UNIXTIME( modified )) As Ano
FROM mdl_forum_posts
WHERE modified > UNIX_TIMESTAMP( SUBDATE( CURDATE(  ) , 7 ) )
) AS HORAS
GROUP BY ANO,MES,DIA
ORDER BY ANO,MES,DIA

### MensagensForumMes

SELECT ANO,MES,DIA, Count( * ) AS "Mensagens em Foruns"
FROM (
SELECT day(FROM_UNIXTIME( modified )) As DIA,
month(FROM_UNIXTIME( modified )) AS MES, year(FROM_UNIXTIME( modified )) As Ano
FROM mdl_forum_posts
WHERE modified > UNIX_TIMESTAMP( SUBDATE( CURDATE(  ) , 31 ) )
) AS HORAS
GROUP BY ANO,MES,DIA
ORDER BY ANO,MES,DIA

### MensagensForumAno

SELECT ANO,MES, Count( * ) AS "Mensagens em Foruns"
FROM (
SELECT
month(FROM_UNIXTIME( modified )) AS MES, year(FROM_UNIXTIME( modified )) As Ano
FROM mdl_forum_posts
WHERE modified > UNIX_TIMESTAMP( SUBDATE( CURDATE(  ) , 365 ) )
) AS HORAS
GROUP BY ANO,MES
ORDER BY ANO,MES


### CaracteresForumDia

SELECT ANO,MES,DIA,HORA, SUM( Caracteres ) AS "Caracteres em Foruns"
FROM (
SELECT char_length( message ) As Caracteres, hour( FROM_UNIXTIME( modified ) ) AS HORA,
day(FROM_UNIXTIME( modified )) As DIA, month(FROM_UNIXTIME( modified )) AS MES,
year(FROM_UNIXTIME( modified )) As Ano
FROM mdl_forum_posts
WHERE modified > UNIX_TIMESTAMP( SUBDATE( CURDATE(  ) , 1 ) )
) AS HORAS
GROUP BY ANO,MES,DIA,HORA
ORDER BY ANO,MES,DIA,HORA

### CaracteresForumSemana

SELECT ANO,MES,DIA, SUM( Caracteres ) AS "Caracteres em Foruns"
FROM (
SELECT char_length( message ) As Caracteres, 
day(FROM_UNIXTIME( modified )) As DIA, month(FROM_UNIXTIME( modified )) AS MES,
year(FROM_UNIXTIME( modified )) As Ano
FROM mdl_forum_posts
WHERE modified > UNIX_TIMESTAMP( SUBDATE( CURDATE(  ) , 7 ) )
) AS HORAS
GROUP BY ANO,MES,DIA
ORDER BY ANO,MES,DIA

### CaracteresForumMes

SELECT ANO,MES,DIA, SUM( Caracteres ) AS "Caracteres em Foruns"
FROM (
SELECT char_length( message ) As Caracteres, 
day(FROM_UNIXTIME( modified )) As DIA, month(FROM_UNIXTIME( modified )) AS MES,
year(FROM_UNIXTIME( modified )) As Ano
FROM mdl_forum_posts
WHERE modified > UNIX_TIMESTAMP( SUBDATE( CURDATE(  ) , 31 ) )
) AS HORAS
GROUP BY ANO,MES,DIA
ORDER BY ANO,MES,DIA

### CaracteresForumAno

SELECT ANO,MES, SUM( Caracteres ) AS "Caracteres em Foruns"
FROM (
SELECT char_length( message ) As Caracteres, month(FROM_UNIXTIME( modified )) AS MES,
year(FROM_UNIXTIME( modified )) As Ano
FROM mdl_forum_posts
WHERE modified > UNIX_TIMESTAMP( SUBDATE( CURDATE(  ) , 365 ) )
) AS HORAS
GROUP BY ANO,MES
ORDER BY ANO,MES


### UtilizadoresIPDia

SELECT ANO,MES,DIA,HORA, Count( * ) AS "Utilizadores IP"
FROM (
SELECT hour( FROM_UNIXTIME( time ) ) AS HORA, day(FROM_UNIXTIME( time )) As DIA,
month(FROM_UNIXTIME( time )) AS MES, year(FROM_UNIXTIME( time )) As ANO, IP
FROM mdl_log
WHERE time > UNIX_TIMESTAMP( SUBDATE( CURDATE(  ) , 1 ) )
GROUP BY ANO,MES,DIA,HORA,IP
) AS HORAS
GROUP BY ANO,MES,DIA,HORA
ORDER BY ANO,MES,DIA,HORA

### UtilizadoresIPSemana

SELECT ANO,MES,DIA, Count( * ) AS "Utilizadores IP"
FROM (
SELECT day(FROM_UNIXTIME( time )) As DIA,
month(FROM_UNIXTIME( time )) AS MES, year(FROM_UNIXTIME( time )) As ANO, IP
FROM mdl_log
WHERE time > UNIX_TIMESTAMP( SUBDATE( CURDATE(  ) , 7 ) )
GROUP BY ANO,MES,DIA,IP
) AS HORAS
GROUP BY ANO,MES,DIA
ORDER BY ANO,MES,DIA

### UtilizadoresIPMes

SELECT ANO,MES,DIA, Count( * ) AS "Utilizadores IP"
FROM (
SELECT day(FROM_UNIXTIME( time )) As DIA,
month(FROM_UNIXTIME( time )) AS MES, year(FROM_UNIXTIME( time )) As ANO, IP
FROM mdl_log
WHERE time > UNIX_TIMESTAMP( SUBDATE( CURDATE(  ) , 31 ) )
GROUP BY ANO,MES,DIA,IP
) AS HORAS
GROUP BY ANO,MES,DIA
ORDER BY ANO,MES,DIA

### UtilizadoresIPAno

SELECT ANO,MES, Count( * ) AS "Utilizadores IP"
FROM (
SELECT month(FROM_UNIXTIME( time )) AS MES, year(FROM_UNIXTIME( time )) As ANO, IP
FROM mdl_log
WHERE time > UNIX_TIMESTAMP( SUBDATE( CURDATE(  ) , 365 ) )
GROUP BY ANO,MES,IP
) AS HORAS
GROUP BY ANO,MES
ORDER BY ANO,MES


### UtilizadoresRegistadosDia

SELECT ANO,MES,DIA,HORA, Count( * ) AS "Utilizadores Registados"
FROM (
SELECT hour( FROM_UNIXTIME( time ) ) AS HORA, day(FROM_UNIXTIME( time )) As DIA,
month(FROM_UNIXTIME( time )) AS MES, year(FROM_UNIXTIME( time )) As ANO, userid
FROM mdl_log
WHERE time > UNIX_TIMESTAMP( SUBDATE( CURDATE(  ) , 1 ) )
GROUP BY ANO,MES,DIA,HORA,userid
) AS HORAS
GROUP BY ANO,MES,DIA,HORA
ORDER BY ANO,MES,DIA,HORA


### UtilizadoresRegistadosSemana

SELECT ANO,MES,DIA, Count( * ) AS "Utilizadores Registados"
FROM (
SELECT day(FROM_UNIXTIME( time )) As DIA,
month(FROM_UNIXTIME( time )) AS MES, year(FROM_UNIXTIME( time )) As ANO, userid
FROM mdl_log
WHERE time > UNIX_TIMESTAMP( SUBDATE( CURDATE(  ) , 7 ) )
GROUP BY ANO,MES,DIA,userid
) AS HORAS
GROUP BY ANO,MES,DIA
ORDER BY ANO,MES,DIA

### UtilizadoresRegistadosMes

SELECT ANO,MES,DIA, Count( * ) AS "Utilizadores Registados"
FROM (
SELECT day(FROM_UNIXTIME( time )) As DIA,
month(FROM_UNIXTIME( time )) AS MES, year(FROM_UNIXTIME( time )) As ANO, userid
FROM mdl_log
WHERE time > UNIX_TIMESTAMP( SUBDATE( CURDATE(  ) , 31 ) )
GROUP BY ANO,MES,DIA,userid
) AS HORAS
GROUP BY ANO,MES,DIA
ORDER BY ANO,MES,DIA

### UtilizadoresRegistadosAno

SELECT ANO,MES, Count( * ) AS "Utilizadores Registados"
FROM (
SELECT month(FROM_UNIXTIME( time )) AS MES, year(FROM_UNIXTIME( time )) As ANO, userid
FROM mdl_log
WHERE time > UNIX_TIMESTAMP( SUBDATE( CURDATE(  ) , 365 ) )
GROUP BY ANO,MES,userid
) AS HORAS
GROUP BY ANO,MES
ORDER BY ANO,MES

 
### ModuleActionDia

SELECT day(FROM_UNIXTIME( time )) As DIA,
month(FROM_UNIXTIME( time )) AS MES, year(FROM_UNIXTIME( time )) As ANO, module, Count(*) As Acessos
FROM mdl_log
WHERE time > UNIX_TIMESTAMP( SUBDATE( CURDATE(  ) , 1 ) )
GROUP BY ANO,MES,DIA,module
ORDER BY ANO,MES,DIA,Acessos DESC


### ModuleActionSemana

SELECT module, Count(*) As Acessos
FROM mdl_log
WHERE time > UNIX_TIMESTAMP( SUBDATE( CURDATE(  ) , 7 ) )
GROUP BY module
ORDER BY Acessos DESC

### ModuleActionMes

SELECT module, Count(*) As Acessos
FROM mdl_log
WHERE time > UNIX_TIMESTAMP( SUBDATE( CURDATE(  ) , 31 ) )
GROUP BY module
ORDER BY Acessos DESC

### ModuleActionAno

SELECT module, Count(*) As Acessos
FROM mdl_log
WHERE time > UNIX_TIMESTAMP( SUBDATE( CURDATE(  ) , 365 ) )
GROUP BY module
ORDER BY Acessos DESC


### PaginasVistasPorUtilizadorSemana

SELECT SUBDATE( CURDATE(  ) , 7 ) AS DE, CURDATE() AS A, PaginasVistas AS "Páginas Vistas", Count(*) As "Número de utilizadores"
FROM
(SELECT userid, POW( 10, TRUNCATE( LOG10( Count(*) ) , 0 ) ) AS PaginasVistas
FROM mdl_log WHERE  time > UNIX_TIMESTAMP( SUBDATE( CURDATE(  ) , 7 ) )
GROUP BY userid) AS TABELAAUXILIAR
GROUP BY PaginasVistas
ORDER BY PaginasVistas DESC

### PaginasVistasPorUtilizadorMes

SELECT SUBDATE( CURDATE(  ) , 30 ) AS DE, CURDATE() AS A, PaginasVistas AS "Páginas Vistas", Count(*) As "Número de utilizadores"
FROM
(SELECT userid, POW( 10, TRUNCATE( LOG10( Count(*) ) , 0 ) ) AS PaginasVistas
FROM mdl_log WHERE  time > UNIX_TIMESTAMP( SUBDATE( CURDATE(  ) , 30 ) )
GROUP BY userid) AS TABELAAUXILIAR
GROUP BY PaginasVistas
ORDER BY PaginasVistas DESC


### MensagensEmForunsPorUtilizadorSemana

SELECT SUBDATE( CURDATE(  ) , 7 ) AS DE, CURDATE() AS A, MensagensForum AS "Mensagens em Forum", Count( * ) AS "Número de utilizadores"
FROM
(
SELECT POW( 10, TRUNCATE( LOG10( Count(*) ) , 0 ) ) AS MensagensForum
FROM mdl_forum_posts
WHERE modified > UNIX_TIMESTAMP( SUBDATE( CURDATE(  ) , 7 ) )
GROUP BY userid
) AS TABELAAUXILIAR
GROUP BY MensagensForum
ORDER BY MensagensForum DESC

### MensagensEmForunsPorUtilizadorMes

SELECT SUBDATE( CURDATE(  ) , 30 ) AS DE, CURDATE(  ) AS A, MensagensForum AS "Mensagens em Forum", Count( * ) AS "Número de utilizadores"
FROM
(
SELECT POW( 10, TRUNCATE( LOG10( Count(*) ) , 0 ) ) AS MensagensForum
FROM mdl_forum_posts
WHERE modified > UNIX_TIMESTAMP( SUBDATE( CURDATE(  ) , 30 ) )
GROUP BY userid
) AS TABELAAUXILIAR
GROUP BY MensagensForum
ORDER BY MensagensForum DESC 

### MensagensEmForunsPorUtilizadorAno

SELECT SUBDATE( CURDATE(  ) , 365 ) AS DE, CURDATE(  ) AS A, MensagensForum AS "Mensagens em Forum", Count( * ) AS "Número de utilizadores"
FROM
(
SELECT POW( 10, TRUNCATE( LOG10( Count(*) ) , 0 ) ) AS MensagensForum
FROM mdl_forum_posts
WHERE modified > UNIX_TIMESTAMP( SUBDATE( CURDATE(  ) , 365 ) )
GROUP BY userid
) AS TABELAAUXILIAR
GROUP BY MensagensForum
ORDER BY MensagensForum DESC 

### CaracteresEmForunsPorUtilizadorSemana

SELECT SUBDATE( CURDATE(  ) , 7 ) AS DE, CURDATE() AS A, CaracteresForum AS "Caracteres em Forum", Count( * ) AS "Número de utilizadores"
FROM
(
SELECT POW( 10, TRUNCATE( LOG10( sum( char_length( message ) ) ) , 0 ) ) AS CaracteresForum
FROM mdl_forum_posts
WHERE modified > UNIX_TIMESTAMP( SUBDATE( CURDATE(  ) , 7 ) )
GROUP BY userid
) AS TABELAAUXILIAR
GROUP BY CaracteresForum
ORDER BY CaracteresForum DESC

### CaracteresEmForunsPorUtilizadorMes

SELECT SUBDATE( CURDATE(  ) , 30 ) AS DE, CURDATE() AS A, CaracteresForum AS "Caracteres em Forum", Count( * ) AS "Número de utilizadores"
FROM
(
SELECT POW( 10, TRUNCATE( LOG10( sum( char_length( message ) ) ) , 0 ) ) AS CaracteresForum
FROM mdl_forum_posts
WHERE modified > UNIX_TIMESTAMP( SUBDATE( CURDATE(  ) , 30 ) )
GROUP BY userid
) AS TABELAAUXILIAR
GROUP BY CaracteresForum
ORDER BY CaracteresForum DESC

### CaracteresEmForunsPorUtilizadorAno

SELECT SUBDATE( CURDATE(  ) , 365 ) AS DE, CURDATE() AS A, CaracteresForum AS "Caracteres em Forum", Count( * ) AS "Número de utilizadores"
FROM
(
SELECT POW( 10, TRUNCATE( LOG10( sum( char_length( message ) ) ) , 0 ) ) AS CaracteresForum
FROM mdl_forum_posts
WHERE modified > UNIX_TIMESTAMP( SUBDATE( CURDATE(  ) , 365 ) )
GROUP BY userid
) AS TABELAAUXILIAR
GROUP BY CaracteresForum
ORDER BY CaracteresForum DESC

Em resposta a 'Jose' Coelho'

Re: Monitorização da utilização do Moodle

por Jose' Coelho -

Já agora, coloco aqui alguns dos resultados das queries, na UAb:

### PaginasVistasAno

ANO MES Paginas Vistas
2006 9 23100
2006 10 217310
2006 11 276922
2006 12 185059
2007 1 293923
2007 2 277790
2007 3 304297
2007 4 282409
2007 5 376841
2007 6 330690
2007 7 272308
2007 8 80823
2007 9 354967

### CaracteresForumAno

ANO MES Caracteres em Foruns
2006 9 350682
2006 10 4868048
2006 11 6082543
2006 12 2892568
2007 1 3864895
2007 2 4535779
2007 3 4922873
2007 4 3611078
2007 5 8849247
2007 6 5780357
2007 7 1973386
2007 8 139395
2007 9 3124046

### MensagensForumAno

ANO MES Mensagens em Foruns
2006 9 399
2006 10 3297
2006 11 5353
2006 12 3216
2007 1 4584
2007 2 5359
2007 3 5060
2007 4 3806
2007 5 7464
2007 6 5565
2007 7 2300
2007 8 275
2007 9 5333

### UtilizadoresRegistadosAno

ANO MES Utilizadores Registados
2006 9 171
2006 10 508
2006 11 614
2006 12 525
2007 1 744
2007 2 809
2007 3 1068
2007 4 972
2007 5 951
2007 6 1032
2007 7 1015
2007 8 930
2007 9 1762

### ModuleActionAno

module Acessos
forum 1260685
course 998859
user 471122
resource 219362
book 69366
assignment 48144
glossary 43033
login 26743
quiz 23220
upload 18560
message 17941
blog 14762
data 14245
chat 13689
lesson 11194
wiki 7534
choice 6020
library 5627
discussion 3225
label 2135
calendar 664
scorm 404
survey 126
workshop 32
hotpot 23
journal 2
lams 1

Em resposta a 'Jose' Coelho'

Re: Monitorização da utilização do Moodle

por nuno bastos -

Bons dias,

Gostaria de colocar uma questão, quando fala que para correr estas queries necessitamos de aceder à opção de Administração do Sítio > Servidor > Gestão de Base de dados ...

Aqui é que encontro o meu problema, pois não tenho essa opção... Essa opção vem instalada por defeito na plataforma ou é necessário instalar algum modulo adicional?

Ou por outro lado, só funciona/existe numa plataforma MOODLE expecífica?

Eu estou a utilizar para já a versão 1.7 do MOODLE.

Agradecia a sua resposta,

Cumprimentos,

Nuno A.

Em resposta a 'nuno bastos'

Re: Monitorização da utilização do Moodle

por Jose' Coelho -

Isso acontece porque não tem o phpMyAdmin. Instale o módulo: http://moodle.org/mod/data/view.php?d=13&rid=448

Isto assumindo que tem o MySQL, se tiver instalado outra base de dados, tem que aceder à base de dados pela via que deve conhecer, uma vez que o moodle está instalado.

Em resposta a 'Jose' Coelho'

Re: Monitorização da utilização do Moodle

por Rafael Mota -

José, você você poderia me dizer se essa consulta está correta ? Quero os ips dos utilizados nos últimos 90 dias, de todas as atividades e acessos.

 

SELECT ANO,MES, Count( * ) AS "IPs"
FROM (
SELECT month(FROM_UNIXTIME( time )) AS MES, year(FROM_UNIXTIME( time )) As ANO, IP
FROM mdl_log
WHERE time > UNIX_TIMESTAMP( SUBDATE( CURDATE(  ) , 90 ) )
GROUP BY ANO,MES,IP
) AS HORAS
GROUP BY ANO,MES,IP
ORDER BY ANO,MES