Added caching of the database, attachments and uploaded files to avoid calculating them each time.
This commit is contained in:
		@@ -366,12 +366,12 @@ class IDF_Project extends Pluf_Model
 | 
			
		||||
    public function getRepositorySize($force=false)
 | 
			
		||||
    {
 | 
			
		||||
        $last_eval = $this->getConf()->getVal('repository_size_check_date', 0);
 | 
			
		||||
        if (!$force and $last_eval > time()-86400) {
 | 
			
		||||
        if (!$force and $last_eval > time()-172800) {
 | 
			
		||||
            return $this->getConf()->getVal('repository_size', -1);
 | 
			
		||||
        }
 | 
			
		||||
        $this->getConf()->setVal('repository_size_check_date', time());
 | 
			
		||||
        $scm = IDF_Scm::get($this);
 | 
			
		||||
        $this->getConf()->setVal('repository_size', $scm->getRepositorySize());
 | 
			
		||||
        $this->getConf()->setVal('repository_size_check_date', time());
 | 
			
		||||
        return $this->getConf()->getVal('repository_size', -1);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -344,25 +344,48 @@ function IDF_Views_Admin_projectSize($field, $project)
 | 
			
		||||
 *
 | 
			
		||||
 * @return array Associative array with the size of each element
 | 
			
		||||
 */
 | 
			
		||||
function IDF_Views_Admin_getForgeSize()
 | 
			
		||||
function IDF_Views_Admin_getForgeSize($force=false)
 | 
			
		||||
{
 | 
			
		||||
    $conf = new IDF_Gconf();
 | 
			
		||||
    $conf->setModel((object) array('_model'=>'IDF_Forge', 'id'=> 1));
 | 
			
		||||
    $res = array();
 | 
			
		||||
    $res['repositories'] = 0;
 | 
			
		||||
    foreach (Pluf::factory('IDF_Project')->getList() as $prj) {
 | 
			
		||||
        $size = $prj->getRepositorySize();
 | 
			
		||||
        $size = $prj->getRepositorySize($force);
 | 
			
		||||
        if ($size != -1) {
 | 
			
		||||
            $res['repositories'] += $size;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    $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;
 | 
			
		||||
    $cmd = Pluf::f('idf_exec_cmd_prefix', '').'du -sk '
 | 
			
		||||
        .escapeshellarg(Pluf::f('upload_issue_path'));
 | 
			
		||||
    $out = explode(' ', shell_exec($cmd), 2);
 | 
			
		||||
    $res['attachments'] = $out[0]*1024;
 | 
			
		||||
    $res['database'] = IDF_Views_Admin_getForgeDbSize();
 | 
			
		||||
    $last_eval = $conf->getVal('downloads_size_check_date', 0);
 | 
			
		||||
    if (!$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;
 | 
			
		||||
        $conf->setVal('downloads_size', $res['downloads']);
 | 
			
		||||
    }
 | 
			
		||||
    $last_eval = $conf->getVal('attachments_size_check_date', 0);
 | 
			
		||||
    if (!$force and $last_eval > time()-172800) {
 | 
			
		||||
        $res['attachments'] = $conf->getVal('attachments_size', 0);
 | 
			
		||||
    } else {
 | 
			
		||||
        $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);
 | 
			
		||||
    if (!$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;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user