WikiStats
From PeacockWiki
(Difference between revisions)
Revision as of 11:28, 11 July 2006
WikiStats is some php code designed to keep stats on a Mediawiki site.
Currently it is a dirty hack to gather information from lyricwiki.org, but hopefully it will develop into a suite to generate detailed stats from a MediaWiki database.
Contents |
[edit]
Details
- Date 11 July 2006
[edit]
Features
- Gathers and records data at a pre-defined interval
- generates useful stats based on recorded historical data
[edit]
Usage
To use these scripts, ensure they are installed correctly, and point your browser at the path at which the scripts are installed.
[edit]
Installation
These scripts run on a standard apache/php server.
[edit]
Requirements
- Apache server running PHP
- Cron daemon
[edit]
Procedure
Copy files index.php update.php and .htaccess to a directory under htdocs on your apache server. Set up a cron job to run update.php at a pre-defined interval. Ensure the command is run in the same as update.php. An example of a bash script to do this is:
cd $(dirname $0) php update.php
[edit]
Source Code
[edit]
update.php
<?php
$statline="";
function freaderror($errorno, $errmsg, $filename, $linenum, $vars)
{
global $statline;
$statline='ERR:'.$errmsg;
}
set_error_handler('freaderror');
$statspage=fopen('http://lyricwiki.org/Special:Statistics?action=raw', 'r');
if($statspage!=false)
$statline=fread($statspage, 1024);
restore_error_handler();
$logfile=fopen('log.txt', 'a');
#date_default_timezone_set('UTC');
fwrite($logfile, date('Y-m-d H:i:s')."\t".addslashes($statline));
?>
[edit]
index.php
<html>
<head>
<title>LyricWiki.org Stats</title>
<meta http-equiv="Refresh" content="900;URL=">
</head>
<body>
<?php
$logfile=fopen('log.txt', 'r');
$logfile=trim(fread($logfile, filesize('log.txt')));
$logfilelines=split("\n", $logfile);
$logfile=array();
foreach($logfilelines as $id=>$data)
{
$data=split("\t", trim($data));
$data2=array('date' => str_replace(' ', ' ', $data[0]));
if(key_exists('daily', $_GET) AND (strpos($data2['date'], '24:00:')===FALSE))
continue;
if(strpos($data[1], 'ERR:')!==FALSE)
{
$data2['error']=$data[1];
$logfile[$id]=$data2;
continue;
}
$data=split(';', $data[1]);
foreach($data as $key=>$data)
{
$data=split('=', $data);
$data2[$data[0]]=$data[1];
}
$logfile[$id]=$data2;
}
$diff=array('total'=>0, 'good'=>0, 'views'=>0, 'edits'=>0, 'users'=>0, 'admins'=>0, 'images'=>0);
foreach($logfile as $id=>$data)
{
if(key_exists('error', $data))
continue;
$logfile[$id]['PercentAdmins']=number_format($data['admins']/$data['users']*100, 2).'%';
$logfile[$id]['EditsPerView']=number_format($data['edits']/$data['views'], 4);
$logfile[$id]['EditsPerPage']=number_format($data['edits']/$data['total'], 4);
foreach($diff as $diffid=>$diffval)
{
$logfile[$id]['diff'.$diffid]=$data[$diffid]-$diffval;
$diff[$diffid]=$logfile[$id][$diffid];
}
}
#var_dump($logfile);
$fields=array(
'date',
'total',
'difftotal',
'good',
'diffgood',
'views',
'diffviews',
'edits',
'diffedits',
'users',
'diffusers',
'admins',
'diffadmins',
'images',
'diffimages',
'PercentAdmins',
'EditsPerView',
'EditsPerPage'
);
?>
<table border=1 style="font-size:12px;">
<?php
function header_row()
{
global $fields;
echo '<tr>';
foreach($fields as $field)
{
echo '<td>'.$field.'</td>';
}
echo "</tr>\n";
}
$rowno=0;
foreach($logfile as $data)
{
if(($rowno++ % 24)==0)
header_row();
echo "<tr>";
foreach($fields as $field)
{
if(key_exists('error', $data))
{
if($field=='total')
echo '<td colspan='.(count($fields)-1).'>'.$data['error'].'</td>';
if($field=='date')
echo '<td>'.$data[$field].'</td>';
}
else
echo '<td>'.$data[$field].'</td>';
}
echo "</tr>\n";
}
?>
</table>
</body>
</html>
[edit]
.htaccess
<Files .htaccess> order deny,allow deny from all </Files> <Files update.php> order deny,allow deny from all </Files> <Files log.txt> order deny,allow deny from all </Files>
