summaryrefslogblamecommitdiff
path: root/tools/upalyzer/analyze.php
blob: 57057ad5c661ad3289894d93f63ef78d229977a7 (plain) (tree)





















































































































                                                                               
                                                











                                            
<?php
/*  analyze.php
 *  Copyright 2007 Bjørn Lindeijer
 *
 *  This file is part of upalyzer.
 *
 *  upalyzer is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  any later version.
 *
 *  upalyzer 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 General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with upalyzer; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */
?>
<html>
<head><title>Update analysis</title></head>
<body>
<pre>
List of current updates:

<?php
$update_file = file('resources2.txt');
$updates = array();
$update_file_maxlen = 0;
$data_size = 0;
$data_uncompressed_size = 0;
$data_used_size = 0;

foreach ($update_file as $update_line)
{
  $splitted = split(' ', $update_line, 2);
  $file = $splitted[0];
  $update = array(
    'file' => $file,
    'adler32' => trim($splitted[1]),
    'filesize' => filesize($file));
  $update_file_maxlen = max($update_file_maxlen, strlen($file));

  $uncompressed_size = 0;
  $entries = array();
  $zip = zip_open($file);
  if ($zip) {
    while ($zip_entry = zip_read($zip)) {
      $uncompressed_size = $uncompressed_size + zip_entry_filesize($zip_entry);
      $entries[zip_entry_name($zip_entry)] = array(
        'name' => zip_entry_name($zip_entry),
        'size' => zip_entry_compressedsize($zip_entry));
    }
    zip_close($zip);
  }
  $update['entries'] = $entries;
  $update['uncompressed_size'] = $uncompressed_size;
  $updates[] = $update;

  $data_size += $update['filesize'];
  $data_uncompressed_size += $uncompressed_size;
}

function get_update_for_file($file)
{
  global $updates;

  for ($i = count($updates) - 1; $i >= 0; $i--) {
    $update = $updates[$i];
    if (array_key_exists($file, $update['entries'])) {
      return $update;
    }
  }
  return null;
}

foreach ($updates as &$update)
{
  $entry_count = count($update['entries']);
  $used_entry_count = 0;
  $used_entry_size = 0;

  foreach ($update['entries'] as $file => $entry) {
    $update_for_file = get_update_for_file($file);
    if (strcmp($update_for_file['file'], $update['file']) == 0) {
      $used_entry_count++;
      $used_entry_size += $entry['size'];
      $entry['used'] = true;
    }
  }

  $update['used_entry_count'] = $used_entry_count;
  $update['used_size'] = $used_entry_size;
  $update['used_percentage'] = $used_entry_size / $update['filesize'];

  $data_used_size += $update['used_size'];
}

foreach ($updates as &$update)
{
  echo $update['file'];
  echo str_repeat(' ', $update_file_maxlen - strlen($update['file']) + 2);
  echo $update['adler32'];
  printf("  %4d kb", $update['filesize'] / 1024);
  printf("  %4d kb", $update['uncompressed_size'] / 1024);
  printf("  %3d%% used (%d/%d files)", $update['used_percentage'] * 100,
                                       $update['used_entry_count'],
                                       count($update['entries']));
  echo "\n";
}

printf("\n");
printf("Amount of data: %4d kb\n", $data_size / 1024);
printf("Uncompressed:   %4d kb\n", $data_uncompressed_size / 1024);
printf("Obsoleted data: %4d kb (%d%%)\n",
    ($data_size - $data_used_size) / 1024,
    100 - ($data_used_size / $data_size) * 100);

/*
if ($dh = opendir('.')) {
  while (($file = readdir($dh)) !== false) {
  }
  closedir($dh);
}
*/
?>
</pre>
</body>
</html>