You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ryzom-core/web/public_php/stats/stats.php

405 lines
14 KiB
PHP

<?php
// Ryzom Core - MMORPG Framework <http://ryzom.dev/>
// Copyright (C) 2010 Winch Gate Property Limited
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
include_once('../login/config.php');
// LOG database
$StatsDBHost = $DBHost;
$StatsDBUserName = $DBUserName;
$StatsDBPassword = $DBPassword;
$StatsDBName = "stats";
error_reporting(E_ERROR | E_PARSE);
set_error_handler('err_callback');
// global var
$link = NULL;
$page_max = 100;
$dev_ip="192.168.1.169"; //ip where sql error are displayed
$private_network = "/192\.168\.1\./i"; //ip where the cmd=log&msg=dump function works
$page_name = "stats.php";
//get the ip of the viewer
function getIp()
{
if (getenv("HTTP_CLIENT_IP"))
{
$ip = getenv("HTTP_CLIENT_IP");
}
elseif(getenv("HTTP_X_FORWARDED_FOR"))
{
$ip = getenv("HTTP_X_FORWARDED_FOR");
}
else
{
$ip = getenv("REMOTE_ADDR");
}
return $ip;
}
// if the player ip is the dev ip then the sql error is explain
function die2($debug_str)
{
global $private_network;
if ( preg_match($private_network, getIp()) )
{
die($debug_str);
}
else
{
die("GENERIC_ERROR");
}
}
// get head or post infos return default if no valuees
function getPost($value, $default=NULL)
{
if ( isSet($_GET[$value]) ) { return $_GET[$value]; }
if ( isSet($_POST[$value]) ) { return $_POST[$value]; }
return $default;
}
// log error in bdd
function debug($str)
{
global $StatsDBHost;
global $DBPort;
global $StatsDBUserName;
global $StatsDBPassword;
global $StatsDBName;
global $link;
$newConnection = 0;
if ($link == NULL)
{
$link = mysql_connect($StatsDBHost, $StatsDBUserName, $StatsDBPassword, NULL, $DBPort) or die2 (__FILE__. " " .__LINE__." Can't connect to database host:$StatsDBHost user:$StatsDBUserName");
$newConnection = 1;
mysql_select_db ($StatsDBName, $link) or die2 (__FILE__. " " .__LINE__." Can't access to the table dbname:$StatsDBName");
}
$str = str_replace("'", "", $str);
$str = str_replace( '"', "", $str);
$query= "INSERT INTO `log` ( `log` )"
. "VALUES ("
. "'$str'"
. ")";
$result = mysql_query ($query, $link) or die2 (__FILE__. " " .__LINE__." Can't execute the query: ".$query);
if ($newConnection == 1)
{
mysql_close($link);
$link = NULL;
}
}
function err_callback($errno, $errmsg, $filename, $linenum, $vars)
{
debug("$filename $linenum $errmsg");
}
// debug( getenv("QUERY_STRING") );
// extract the cmd
$cmd = getPost("cmd" ,"log");
if ($cmd == "")
{
echo "0:Missing cmd";
die2();
}
// check for 'clear password' tag
switch ($cmd)
{
// log <=> display php page
case "log":
$date = date('Y-m-d H:i:s', time());
$ip = getIp();
$log = getenv("QUERY_STRING");
$link = mysql_connect($StatsDBHost, $StatsDBUserName, $StatsDBPassword, NULL, $DBPort) or die2 (__FILE__. " " .__LINE__." Can't connect to database host:$StatsDBHost user:$StatsDBUserName");
mysql_select_db ($StatsDBName, $link) or die2 (__FILE__. " " .__LINE__." Can't access to the table dbname:$StatsDBName");
$msg = getPost("msg", "");
switch ($msg)
{
//display php infos
case "start_download":
$query = "SELECT max(`session_id`) as `res` from `sessions`";
$result = mysql_query ($query, $link) or die2 (__FILE__. " " .__LINE__." Can't execute the query: ".$query);
$session_id = 1000;
if( mysql_num_rows($result) != 0)
{
$row = mysql_fetch_array($result);
$session_id = $row["res"] + 1;
}
$now = date("Y-m-d H:i:s", time());
$server = getPost("server", "");
$application = getPost("application", "");
$version = getPost("version", "");
$lang = getPost("lang","");
$type = getPost("application", "");
$package = getPost("package", "");
$protocol = getPost("protocol", "");
$size_download =getPost("size_download", "");
$size_install = getPost("size_install", "");
$user_id = getPost("user_id", "0");
$previous_download = getPost("previous_download", "0");
$query= "INSERT INTO `sessions` ( `session_id`, `user_id` , `server`, `application`, `ip` , `lang`, `type`, `package`, `protocol`, `size_download`, `size_install`, `start_download`, `stop_download`, `previous_download` )"
. "VALUES ("
. "'$session_id', '$user_id' ,'$server', '$application', '$ip', '$lang', '$type', '$package', '$protocol', '$size_download', '$size_install', '$now', '$now', '$previous_download'"
. ")";
$result = mysql_query ($query, $link) or die2 (__FILE__. " " .__LINE__." Can't execute the query: ".$query);
$query= "UPDATE `install_users` set install_count = install_count + 1, state='DU_DL', last_install='$now' where user_id='$user_id';";
$result = mysql_query ($query, $link) or die2 (__FILE__. " " .__LINE__." Can't execute the query: ".$query);
echo "<session_id>".$session_id."</session_id>";
break;
case "stop_download":
$session_id =getPost("session_id", "0");
$now = date("Y-m-d H:i:s", time());
$query = "UPDATE `sessions` SET `stop_download` = '$now', `percent_download` ='100' WHERE `session_id` = '$session_id' LIMIT 1";
$result = mysql_query ($query, $link) or die2 (__FILE__. " " .__LINE__." Can't execute the query: ".$query);
$user_id = getPost("user_id", "0");
$query= "UPDATE `install_users` set state='DU_IN' where user_id='$user_id';";
$result = mysql_query ($query, $link) or die2 (__FILE__. " " .__LINE__." Can't execute the query: ".$query);
break;
// update the percent of download
case "update_download":
$session_id =getPost("session_id", "0");
$percent = getPost("percent", "0");
$now = date("Y-m-d H:i:s", time());
$query = "UPDATE `sessions` SET `percent_download` ='$percent', `stop_download` = '$now' WHERE `session_id` = '$session_id' LIMIT 1";
$result = mysql_query ($query, $link) or die2 (__FILE__. " " .__LINE__." Can't execute the query: ".$query);
break;
// update the percent of finish
case "update_install":
$now = date("Y-m-d H:i:s", time());
$session_id =getPost("session_id", "0");
$percent = getPost("percent", "0");
$query = "UPDATE `sessions` SET `percent_install` ='$percent', `stop_download` = '$now' WHERE `session_id` = '$session_id' LIMIT 1";
$result = mysql_query ($query, $link) or die2 (__FILE__. " " .__LINE__." Can't execute the query: ".$query);
break;
case "no_install":
$session_id = getPost("session_id", "0");
$now = date("Y-m-d H:i:s", time());
$query = "UPDATE `sessions` SET `size_download` = '0', `start_install` = '$now', `stop_install` = '$now', `percent_install` ='100' WHERE `session_id` = '$session_id' LIMIT 1";
echo $query;
$result = mysql_query ($query, $link) or die2 (__FILE__. " " .__LINE__." Can't execute the query: ".$query);
break;
// install is finished
case "stop_install":
$session_id = getPost("session_id", "0");
$now = date("Y-m-d H:i:s", time());
$query = "UPDATE `sessions` SET `stop_install` = '$now', `stop_download` = '$now', `percent_install` ='100' WHERE `session_id` = '$session_id' LIMIT 1";
echo $query;
$result = mysql_query ($query, $link) or die2 (__FILE__. " " .__LINE__." Can't execute the query: ".$query);
$user_id = getPost("user_id", "0");
$query= "UPDATE `install_users` set state='DU_FI' where user_id='$user_id';";
$result = mysql_query ($query, $link) or die2 (__FILE__. " " .__LINE__." Can't execute the query: ".$query);
break;
// addd user info to database
case "start_install":
$session_id = getPost("session_id", "");
$now = date("Y-m-d H:i:s", time());
$query = "UPDATE `sessions` SET `start_install` = '$now', `stop_download` = '$now' WHERE `session_id` = '$session_id' LIMIT 1";
$result = mysql_query ($query, $link) or die2 (__FILE__. " " .__LINE__." Can't execute the query: ".$query);
$user_id = getPost("user_id", "0");
$query= "UPDATE `install_users` set state='DU_IN' where user_id='$user_id';";
$result = mysql_query ($query, $link) or die2 (__FILE__. " " .__LINE__." Can't execute the query: ".$query);
break;
case "login_step_video_mode_setup":
$user_id = getPost("user_id", "0");
$query= "UPDATE `install_users` set state='DU_VMS' where user_id='$user_id';";
$result = mysql_query ($query, $link) or die2 (__FILE__. " " .__LINE__." Can't execute the query: ".$query);
break;
case "login_step_video_mode_setup_high_color":
$user_id = getPost("user_id", "0");
$query= "UPDATE `install_users` set state='DU_VMSHS' where user_id='$user_id';";
$result = mysql_query ($query, $link) or die2 (__FILE__. " " .__LINE__." Can't execute the query: ".$query);
break;
case "login_step_login_screen":
$user_id = getPost("user_id", "0");
$query= "UPDATE `install_users` set state='DU_AL' where user_id='$user_id';";
$result = mysql_query ($query, $link) or die2 (__FILE__. " " .__LINE__." Can't execute the query: ".$query);
break;
case "login_step_post_login":
$user_id = getPost("user_id", "0");
$query= "UPDATE `install_users` set state='DU_PL' where user_id='$user_id';";
$result = mysql_query ($query, $link) or die2 (__FILE__. " " .__LINE__." Can't execute the query: ".$query);
break;
case "login_step_character_selection":
$user_id = getPost("user_id", "0");
$query= "UPDATE `install_users` set state='DU_CS' where user_id='$user_id';";
$result = mysql_query ($query, $link) or die2 (__FILE__. " " .__LINE__." Can't execute the query: ".$query);
break;
case "login_step_game_entry":
$user_id = getPost("user_id", "0");
$query= "UPDATE `install_users` set state='DU_AG' where user_id='$user_id';";
$result = mysql_query ($query, $link) or die2 (__FILE__. " " .__LINE__." Can't execute the query: ".$query);
break;
case "login_step_game_exit":
$user_id = getPost("user_id", "0");
$play_time = getPost("play_time", "0");
// manualy estimate the duration of the previous session
{
$query = "SELECT `state` from install_users where `user_id` = '$user_id'";
$result = mysql_query ($query, $link) or die2 (__FILE__. " " .__LINE__." Can't execute the query: ".$query);
$state = "AG";
if( mysql_num_rows($result) > 0)
{
$row = mysql_fetch_array($result);
$state = $row["state"];
}
if ($state == "DU_P1")
{
$play_time = $play_time + 30 *60;
}
else if ($state == "DU_P2")
{
$play_time = $play_time + 60* 60;
}
else if ($state == "DU_P3")
{
$play_time = $play_time + 2*60* 60; // P3 will stat P3
}
}
if ($play_time > 2*60*60) // time played > 2 h
{
$query= "UPDATE `install_users` set state='DU_P3' where user_id='$user_id';";
$result = mysql_query ($query, $link) or die2 (__FILE__. " " .__LINE__." Can't execute the query: ".$query);
}
else if ($play_time > 60*60) // time played > 2 h
{
$query= "UPDATE `install_users` set state='DU_P2' where user_id='$user_id';";
$result = mysql_query ($query, $link) or die2 (__FILE__. " " .__LINE__." Can't execute the query: ".$query);
}
else if ($play_time > 30*60) // time played > 30 m
{
$query= "UPDATE `install_users` set state='DU_P1' where user_id='$user_id';";
$result = mysql_query ($query, $link) or die2 (__FILE__. " " .__LINE__." Can't execute the query: ".$query);
}
break;
// addd user info to database
case "init":
$query = "SELECT max(`user_id`) as max_id from `install_users`";
$result = mysql_query ($query, $link) or die2 (__FILE__. " " .__LINE__." Can't execute the query: ".$query);
$user_id = 1;
if( mysql_num_rows($result) != 0)
{
$row = mysql_fetch_array($result);
$user_id = $row["max_id"] + 1;
}
$install_id = getPost("install_id", "0");
$os = getPost("os", "Unknown");
$proc = getPost("proc", "Unknown");
$memory = getPost("memory", "Unknown");
$video_card = getPost("video_card", "Unknown");
$driver_version = getPost("driver_version", "Unknown");
$query = "INSERT INTO `install_users` SET `user_id` = '$user_id', `install_id`='$install_id', `os`='$os', `proc`='$proc', `memory`='$memory', `video_card`='$video_card', `driver_version`='$driver_version', `last_install`='".date('Y-m-d H:i:s', time()) . "', `first_install`=`last_install`";
$result = mysql_query ($query, $link) or die2 (__FILE__. " " .__LINE__." Can't execute the query: ".$query);
echo "<user_id>$user_id</user_id>";
break;
// first log if empyt user_id is return then must init
case "login":
$install_id = getPost("install_id", "0");
$query = "SELECT `user_id` from install_users where `install_id` = '$install_id'";
$result = mysql_query ($query, $link) or die2 (__FILE__. " " .__LINE__." Can't execute the query: ".$query);
if( mysql_num_rows($result) == 0)
{
echo "<user_id></user_id>";
break;
}
$row = mysql_fetch_array($result);
$user_id = $row["user_id"];
echo "<user_id>$user_id</user_id>";
break;
default:
echo "unknown command: $msg $log";
}
mysql_close($link);
unset($link);
break;
default:
echo "0:Unknown command";
die2();
}
?>