diff --git a/indefero/scripts/calculateforgecron.php b/indefero/scripts/calculateforgecron.php new file mode 100644 index 0000000..0ac5683 --- /dev/null +++ b/indefero/scripts/calculateforgecron.php @@ -0,0 +1,109 @@ +setModel((object) array('_model'=>'IDF_Forge', 'id'=> 1)); + $res = array(); + $res['repositories'] = 0; + foreach (Pluf::factory('IDF_Project')->getList() as $prj) { + $size = $prj->getRepositorySize($force); + if ($size != -1) { + $res['repositories'] += $size; + } + } + $last_eval = $conf->getVal('downloads_size_check_date', 0); + if (Pluf::f('idf_no_size_check', false) or + (!$force and $last_eval > time()-172800)) { + $res['downloads'] = $conf->getVal('downloads_size', 0); + } else { + $conf->setVal('downloads_size_check_date', time()); + $total = 0; + foreach(Pluf::factory("IDF_Upload")->getList() as $issuefile) + { + $total += $issuefile->filesize; + } + $res['downloads'] = $total; + $conf->setVal('downloads_size', $res['downloads']); + } + $last_eval = $conf->getVal('attachments_size_check_date', 0); + if (Pluf::f('idf_no_size_check', false) or + (!$force and $last_eval > time()-172800)) { + $res['attachments'] = $conf->getVal('attachments_size', 0); + } else { + $total = 0; + foreach(Pluf::factory("IDF_IssueFile")->getList() as $issuefile) + { + $total += $issuefile->filesize; + } + $res['attachments'] = $total; + $conf->setVal('attachments_size_check_date', time()); + $conf->setVal('attachments_size', $res['attachments']); + } + $last_eval = $conf->getVal('database_size_check_date', 0); + if (Pluf::f('idf_no_size_check', false) or + (!$force and $last_eval > time()-172800)) { + $res['database'] = $conf->getVal('database_size', 0); + } else { + $conf->setVal('database_size_check_date', time()); + $res['database'] = IDF_Views_Admin_getForgeDbSize(); + $conf->setVal('database_size', $res['database']); + } + $res['total'] = $res['repositories'] + $res['downloads'] + $res['attachments'] + $res['database']; + return $res; +} + +/** + * Get the database size as given by the database. + * + * @return int Database size + */ +function IDF_Views_Admin_getForgeDbSize() +{ + $db = Pluf::db(); + if (Pluf::f('db_engine') == 'SQLite') { + return filesize(Pluf::f('db_database')); + } + switch (Pluf::f('db_engine')) { + case 'PostgreSQL': + $sql = 'SELECT relname, pg_total_relation_size(CAST(relname AS +TEXT)) AS size FROM pg_class AS pgc, pg_namespace AS pgn + WHERE pg_table_is_visible(pgc.oid) IS TRUE AND relkind = \'r\' + AND pgc.relnamespace = pgn.oid + AND pgn.nspname NOT IN (\'information_schema\', \'pg_catalog\')'; + break; + case 'MySQL': + default: + $sql = 'SHOW TABLE STATUS FROM `'.Pluf::f('db_database').'`'; + break; + } + $rs = $db->select($sql); + $total = 0; + switch (Pluf::f('db_engine')) { + case 'PostgreSQL': + foreach ($rs as $table) { + $total += $table['size']; + } + break; + case 'MySQL': + default: + foreach ($rs as $table) { + $total += $table['Data_length'] + $table['Index_length']; + } + break; + } + return $total; +} + +require dirname(__FILE__).'/../src/IDF/conf/path.php'; +require 'Pluf.php'; +Pluf::start(dirname(__FILE__).'/../src/IDF/conf/idf.php'); + +Pluf_Dispatcher::loadControllers(Pluf::f('idf_views')); + +IDF_Views_Admin_getForgeSize(true); \ No newline at end of file diff --git a/indefero/src/IDF/Views/Admin.php b/indefero/src/IDF/Views/Admin.php index 30ed598..895904d 100644 --- a/indefero/src/IDF/Views/Admin.php +++ b/indefero/src/IDF/Views/Admin.php @@ -628,14 +628,16 @@ function IDF_Views_Admin_getForgeSize($force=false) } $last_eval = $conf->getVal('downloads_size_check_date', 0); if (Pluf::f('idf_no_size_check', false) or - (!$force and $last_eval > time()-172800)) { + (!$force and $last_eval > time()-172800)) { $res['downloads'] = $conf->getVal('downloads_size', 0); } else { $conf->setVal('downloads_size_check_date', time()); - $cmd = Pluf::f('idf_exec_cmd_prefix', '').'du -sk ' - .escapeshellarg(Pluf::f('upload_path')); - $out = explode(' ', shell_exec($cmd), 2); - $res['downloads'] = $out[0]*1024; + $total = 0; + foreach(Pluf::factory("IDF_Upload")->getList() as $issuefile) + { + $total += $issuefile->filesize; + } + $res['downloads'] = $total; $conf->setVal('downloads_size', $res['downloads']); } $last_eval = $conf->getVal('attachments_size_check_date', 0); @@ -643,11 +645,13 @@ function IDF_Views_Admin_getForgeSize($force=false) (!$force and $last_eval > time()-172800)) { $res['attachments'] = $conf->getVal('attachments_size', 0); } else { + $total = 0; + foreach(Pluf::factory("IDF_IssueFile")->getList() as $issuefile) + { + $total += $issuefile->filesize; + } + $res['attachments'] = $total; $conf->setVal('attachments_size_check_date', time()); - $cmd = Pluf::f('idf_exec_cmd_prefix', '').'du -sk ' - .escapeshellarg(Pluf::f('upload_path')); - $out = explode(' ', shell_exec($cmd), 2); - $res['attachments'] = $out[0]*1024; $conf->setVal('attachments_size', $res['attachments']); } $last_eval = $conf->getVal('database_size_check_date', 0);