Unsupported scripts and control panel web app for a hosting company
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.

bandwidth.php 3.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. #!/usr/local/php-stable/bin/php -q
  2. <?PHP
  3. foreach ($argv as $v) {
  4. if ($v == '--force-update') {
  5. echo 'Forcing config update.'."\n";
  6. define('UPDATE', true);
  7. } elseif ($v == '--debug') {
  8. echo 'Debug mode enabled.'."\n";
  9. define('DEBUG', true);
  10. } elseif ($v == '--double-debug') {
  11. echo 'Double debug mode enabled.'."\n";
  12. define('DOUBLEDEBUG', true);
  13. }
  14. }
  15. chdir('/home/utd/control');
  16. require_once('lib/database.php');
  17. require_once('lib/common.php');
  18. require_once('lib/log.php');
  19. chdir('/home/utd/scripts');
  20. $sql = 'SELECT site_bandin, site_bandout, site_logpos';
  21. $sql .= ', site_id, user_id FROM sites';
  22. $res = mysql_query($sql);
  23. $users = array();
  24. while ($row = mysql_fetch_array($res)) {
  25. if (defined('DEBUG')) { echo "Checking site ".$row['site_id']."\n"; }
  26. $number = str_pad($row['site_id'], 3, '0', STR_PAD_LEFT);
  27. if (file_exists('/usr/local/apache/logs/'.$number.'-access_log')) {
  28. $access = fopen('/usr/local/apache/logs/'.$number.'-access_log','r');
  29. if (defined('DEBUG')) { echo 'Opening /usr/local/apache/logs/'.$number.'-access_log for reading.'."\n"; }
  30. fseek($access, (float)$row['site_logpos']);
  31. while (!feof($access)) {
  32. $line = trim(fgets($access));
  33. if (defined('DOUBLEDEBUG') && $line != '') { echo "Read: $line\n"; }
  34. if (preg_match('/^.* ([0-9]+) ([0-9]+)$/', $line, $matches)) {
  35. list( , $in, $out) = $matches;
  36. $row['site_bandin'] += (float)$in;
  37. $row['site_bandout'] += (float)$out;
  38. } elseif (trim($line) != '') {
  39. if (defined('DEBUG')) { echo "Unrecognised line: $line\n"; }
  40. }
  41. }
  42. $pos = ftell($access); fclose($access);
  43. } else {
  44. $pos = $row['site_logpos'];
  45. }
  46. if (!isset($users[($row['user_id'])])) { $users[($row['user_id'])] = 0; }
  47. $users[($row['user_id'])] += $row['site_bandin'] + $row['site_bandout'];
  48. if ($pos > 1024*1024*10) {
  49. logger::log('Archiving /usr/local/apache/logs/'.$number.'-access_log (>10M)', logger::information);
  50. $dir = '/usr/local/apache/logs/archived/'.$number;
  51. if (!is_dir($dir)) {
  52. mkdir($dir);
  53. chown($dir, 'admin');
  54. chmod($dir, 0700);
  55. }
  56. $count = count(glob($dir.'/*.log'))+1;
  57. $target = $dir.'/'.str_pad($count,5,'0',STR_PAD_LEFT).'.log';
  58. $pos = 0;
  59. rename('/usr/local/apache/logs/'.$number.'-access_log', $target);
  60. }
  61. $sql = 'UPDATE sites SET site_bandin = '.$row['site_bandin'];
  62. $sql .= ', site_bandout = '.$row['site_bandout'];
  63. $sql .= ', site_logpos = '.$pos.' WHERE site_id = ';
  64. $sql .= $row['site_id'];
  65. mysql_query($sql);
  66. }
  67. foreach ($users as $key => $val) {
  68. mysql_query('UPDATE users SET band_used = '.$val.' WHERE user_id = '.$key);
  69. if (defined('DEBUG')) { echo "User $key has used $val Bytes.\n"; }
  70. }
  71. $sql = "UPDATE sites SET site_curdocroot = site_docroot WHERE ";
  72. $sql .= "site_curdocroot = '/usr/local/apache/htdocs/bandquota'";
  73. mysql_query($sql);
  74. $sql = "UPDATE users AS u, sites AS s SET s.site_curdocroot = ";
  75. $sql .= "'/usr/local/apache/htdocs/bandquota' WHERE s.user_id = u.user_id AND ";
  76. $sql .= "u.band_used > u.band_total";
  77. mysql_query($sql);
  78. require('updateconf.php');
  79. ?>