Unsupported PHP app for analysing and displaying stats for Team Fortress 2
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

bulkimport.php 2.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. #!/usr/bin/php -q
  2. <?PHP
  3. require_once(dirname(__FILE__) . '/config.php');
  4. require_once(dirname(__FILE__) . '/inc/database.php');
  5. require_once(dirname(__FILE__) . '/inc/game.php');
  6. require_once(dirname(__FILE__) . '/inc/updateranks.php');
  7. require_once(dirname(__FILE__) . '/inc/parser/parser.php');
  8. define('SCRIPT_HEAD1', 'bulkimport.php v0.1');
  9. define('SCRIPT_HEAD3', 'Imports log files in bulk');
  10. require(dirname(__FILE__) . '/inc/cliheader.php');
  11. $ranks = $erase = $noupdate = false;
  12. foreach ($argv as $arg) {
  13. if ($arg == '--erase') {
  14. $erase = true;
  15. } else if ($arg == '--ranks') {
  16. $ranks = true;
  17. } else if ($arg == '--noupdate') {
  18. $noupdate = true;
  19. }
  20. }
  21. mysql_query('UPDATE config SET config_value = \'true\' WHERE config_key = \'updating\'');
  22. if ($erase) {
  23. echo "*** Erasing previous data ... ";
  24. foreach (array('games', 'maps', 'players', 'roleperiods', 'sessions',
  25. 'kills', 'events', 'files', 'awardwinners', 'groups',
  26. 'groupmemberships') as $table) {
  27. mysql_query('TRUNCATE ' . $table);
  28. }
  29. echo "Done\n";
  30. }
  31. if (!$ranks && !$noupdate) {
  32. $sql = 'SELECT server_id, server_logdir FROM servers';
  33. $servers = mysql_query($sql);
  34. while ($server = mysql_fetch_assoc($servers)) {
  35. if ($server['server_logdir'] === null || empty($server['server_logdir'])) {
  36. // No log dir for this server
  37. continue;
  38. }
  39. foreach (glob($server['server_logdir'] . '/*') as $file) {
  40. $offset = $pos = 0;
  41. $sql = 'SELECT file_size, file_offset FROM files WHERE file_name = \'' . s($file) . '\'';
  42. $res = mysql_query($sql);
  43. if (mysql_num_rows($res) > 0) {
  44. $row = mysql_fetch_assoc($res);
  45. if ((int) $row['file_size'] == filesize($file)) {
  46. continue;
  47. } else {
  48. $offset = (int) $row['file_offset'];
  49. }
  50. }
  51. Game::setServer($server['server_id']);
  52. echo "Reading $file...\n";
  53. $fh = fopen($file, 'r');
  54. fseek($fh, $offset);
  55. $line = null;
  56. while (!feof($fh)) {
  57. if ($line != null) {
  58. Parser::parseLine($line);
  59. }
  60. $pos = ftell($fh);
  61. $line = fgets($fh);
  62. }
  63. if ($offset > 0) {
  64. $sql = 'UPDATE files SET file_size = ' . filesize($file) . ', file_offset = ' . $pos . ' WHERE file_name = \'' . s($file) . '\'';
  65. mysql_query($sql);
  66. } else {
  67. $sql = 'INSERT INTO files (file_size, file_offset, file_name) VALUES (' . filesize($file) . ', ' . $pos . ', \'' . s($file) . '\')';
  68. mysql_query($sql);
  69. }
  70. fclose($fh);
  71. }
  72. }
  73. }
  74. if (!$noupdate) {
  75. mysql_query('UPDATE groups SET group_score = (SELECT SUM(player_score) FROM groupmemberships NATURAL JOIN players WHERE groupmemberships.group_id = groups.group_id GROUP BY groupmemberships.group_id), group_members = (SELECT COUNT(*) FROM groupmemberships NATURAL JOIN players WHERE groupmemberships.group_id = groups.group_id GROUP BY groupmemberships.group_id)');
  76. updateRanks();
  77. }
  78. mysql_query('UPDATE config SET config_value = \'false\' WHERE config_key = \'updating\'');
  79. ?>