Current time: 12-12-2017, 04:35 PM Hello There, Guest! (LoginRegister)

Post Reply 
 
Thread Rating:
  • 1 Vote(s) - 5 Average
  • 1
  • 2
  • 3
  • 4
  • 5
settings -> archive_days=3
04-10-2017, 05:54 PM
Post: #1
settings -> archive_days=3
Hi,
I need to understand:

I have configured my settings.ini in this way:

Code:
archive_dir=/store/archive/

archive_days=3

cron_archive=1

I expected to find only the last 3 days in:
/store/webpagetest/results/17/04

and the previous days in:
/store/archive/results/17/04

but is not so.

my goal is to keep the data of the last N archive_days and discarding the oldest in order to maintain the disk usage.
archive_days is the same value that I use to keep data in my summary db table for displaying graphics .... by click on the point on the graph you can see the WebPagetest page for the single test id.

Thanks for your help
Find all posts by this user
Quote this message in a reply
05-03-2017, 01:19 AM
Post: #2
RE: settings -> archive_days=3
Hi, now I tell you how I resolved:
I did a simple php script that run daily in crontab and deletes the oldest results/subdirectories of a number of days taken from db,
I take the script below for those who would think it useful
  • I left all the "echo" for displaying the operation on a page but they can be deleted
  • Be careful with the "IP_autorizzato" function

crontab configuration may be the following:
5 0 * * * wget -qO- http://myurl/tools/myscript.php &> /dev/null > /dev/null 2>&1

Comments and suggestions are welcome

PHP Code:
date_default_timezone_set ('UTC');


class 
data_calc {

    public 
$dbh;
    public 
$realtime_days;

    public 
$ultima_data = array();
    public 
$oggi = array();

    function 
__construct() {
        if (
is_file('../common/dbconn.ini')) {
            
$dbini_array=parse_ini_file('../common/dbconn.ini'true);
            
            
$dbdefault=$dbini_array['default']['dbactive'];
            
$dbhost=$dbini_array[$dbdefault]['host'];
            
$dbname=$dbini_array[$dbdefault]['dbname'];
            
$dbuser=$dbini_array[$dbdefault]['user'];
            
$dbpassword=$dbini_array[$dbdefault]['password'];
            
            
$this->dbh = new PDO("pgsql: dbname=".$dbname."; host=".$dbhost."; port=5432"$dbuser$dbpassword);

            
$query $this->dbh->prepare("
                select value as realtime_days from webpagetest.settings where setting='realtime_days'
            "
);

            
$query->execute();

            
$result $query->fetchAll();

            
$this->realtime_days $result[0]['realtime_days'];

            
$this->delete_failed_buffer();
            
        } else {
            throw new 
Exception('errore apertura dbconn.ini');
        }

        
$this->oggi = new DateTime();
        
$this->ultima_data = new DateTime();
        
$this->ultima_data->sub(new DateInterval('P'.$this->realtime_days.'D'));

        echo 
$this->oggi->format('y-m-d').'<br>';
        echo 
$this->ultima_data->format('y-m-d').'<br>';        
        
    }

    function 
delete_failed_buffer() {

        
$query $this->dbh->prepare("
          delete from webpagetest.result_failed_buffer WHERE created_at::date < current_date -
          (select value from webpagetest.settings where setting='realtime_days')::INTEGER 
        "
);
        
        
$query->execute();
    
    }    


    function 
if_dir_giorno_old($anno_dir$mese_dir$giorno_dir) {
        
$data_x = new DateTime();
        
$data_x->setDate(intval($anno_dir)+2000,intval($mese_dir),intval($giorno_dir));
        
        if (
$data_x $this->ultima_data) {
            return 
true;
        } else {
            return 
false;
        }
    }

    function 
if_dir_mese_old($anno_dir$mese_dir) {
        
$data_x = new DateTime();

        if (
intval($mese_dir)==12) {
            
$m=1;
            
$a=intval($anno_dir)+1+2000;
        } else {
            
$m=intval($mese_dir)+1;
            
$a=intval($anno_dir)+2000;
        }

        
$data_x->setDate($a,$m,01);
        
date_sub($data_x,date_interval_create_from_date_string("1 day"));

        echo 
$data_x->format('Y-m-d').' ';
        
        if (
$data_x $this->ultima_data) {
            return 
true;
        } else {
            return 
false;
        }
    }

    function 
if_dir_anno_old($anno_dir) {
        
$data_x = new DateTime();
        
$data_x->setDate(intval($anno_dir)+2000+1,01,01);
        
date_sub($data_x,date_interval_create_from_date_string("1 day"));

        echo 
$data_x->format('Y-m-d').' ';
        
        if (
$data_x $this->ultima_data) {
            return 
true;
        } else {
            return 
false;
        }
    }    

}


class 
cleaner {
    
    public 
$auth_ip;
    public 
$root_dir '/store/webpagetest/doc_root/results';
    public 
$calc_data;

    
    function 
__construct() {
        if (
is_file('clockrun.ini')) {
            
$clockrun_ini_array=parse_ini_file('clockrun.ini'true);
            
$this->auth_ip=$clockrun_ini_array['auth_ip'];

            
$this->calc_data = new data_calc();
                    
        } else {
            throw new 
Exception('errore apertura clockrun.ini');
        }
    }
    

    function 
IP_autorizzato() {
        
        
$ip=$_SERVER['REMOTE_ADDR'];
        if (
$ip==$this->auth_ip) {
            return 
true;
        } else {
            return 
false;
        }
    }


    function 
delete_dir_giorno ($anno$mese$giorno) {
        echo 
'delete dir:'.$anno.'/'.$mese.'/'.$giorno.'<br>';
        echo 
shell_exec('nohup rm -rf '.$this->root_dir.'/'.$anno.'/'.$mese.'/'.$giorno.' >/dev/null 2>&1 &').'<br>';
    }

    function 
scan_dir_giorni($anno$mese) {
        echo 
'scan dir: '.$anno.'/'.$mese.'<br>';
        
$giorni scandir($this->root_dir.'/'.$anno.'/'.$mese);
        foreach (
$giorni as $giorno) {
            if (
strlen($giorno)==2) {
                if (
$giorno<>'..') {
                    echo 
'&nbsp;&nbsp;&nbsp;&nbsp;'.$giorno.' - ';
                    if (
$this->calc_data->if_dir_giorno_old($anno$mese$giorno)) {
                        
$this->delete_dir_giorno($anno$mese$giorno);
                    } else {
                        echo 
'ok<br>';
                    }
                } else {
                    echo 
'..<br>';
                }
            } else {
                echo 
$giorno.'<br>';
            }
        }
    }

    function 
delete_dir_mese($anno,$mese) {
        echo 
'delete dir:'.$anno.'/'.$mese.'<br>';
        echo 
shell_exec('nohup rm -rf '.$this->root_dir.'/'.$anno.'/'.$mese.' >/dev/null 2>&1 &').'<br>';
    }

    function 
scan_dir_mesi($anno) {
        echo 
'scan dir: '.$anno.'<br>';
        
$mesi scandir($this->root_dir.'/'.$anno);
        foreach (
$mesi as $mese) {
            if (
strlen($mese)==2) {
                if (
$mese<>'..') {
                    echo 
'&nbsp;&nbsp;'.$mese.' - ';
                    if (
$this->calc_data->if_dir_mese_old($anno$mese)) {
                        
$this->delete_dir_mese($anno,$mese);
                    } else {
                        
$this->scan_dir_giorni($anno,$mese);
                    }
                } else {
                    echo 
'..<br>';
                }
            } else {
                echo 
$mese.'<br>';
            }
        }
    }

    function 
delete_dir_anno($anno) {
        echo 
'delete dir:'.$anno.'<br>';
        echo 
shell_exec('nohup rm -rf '.$this->root_dir.'/'.$anno.' >/dev/null 2>&1 &').'<br>';

    }

    function 
scan_dir_anni() {
        echo 
'scan dir: /RESULTS<br>';
        
$anni scandir($this->root_dir);
            foreach(
$anni as $anno) {
                if (
strlen($anno)==2) {
                    if (
$anno<>'..') {
                        echo 
$anno.' - ';
                        if (
$this->calc_data->if_dir_anno_old($anno)) {
                            
$this->delete_dir_anno($anno);
                        } else {
                            
$this->scan_dir_mesi($anno);
                        }
                    } else {
                        echo 
'..<br>';
                    }
                } else {
                    echo 
$anno.'<br>';
                }
            }
    }

    function 
scan_dir_video() {
        echo 
'scan dir: /RESULTS/VIDEO<br>';
        
$this->root_dir=$this->root_dir.'/video';
        
$anni scandir($this->root_dir);
            foreach(
$anni as $anno) {
                if (
strlen($anno)==2) {
                    if (
$anno<>'..') {
                        echo 
$anno.' - ';
                        if (
$this->calc_data->if_dir_anno_old($anno)) {
                            
$this->delete_dir_anno($anno);
                        } else {
                            
$this->scan_dir_mesi($anno);
                        }
                    } else {
                        echo 
'..<br>';
                    }
                } else {
                    echo 
$anno.'<br>';
                }
            }
    }

    function 
free_disk_space() {
        
$this->scan_dir_anni();
        
$this->scan_dir_video();
    }

}
?>

<html>
<head>
<style type="text/css">
body {
    font-family: "Courier New", Courier, "Lucida Sans Typewriter", "Lucida Typewriter", monospace;
    padding-left:50px;
    font-size:12px;
}
</style>
</head>
<body>

<?php
try {
    
$clear = new cleaner// legge clockrun.ini + connect db
    
if ($clear->IP_autorizzato()) {
        
$clear->free_disk_space();
    } else {
        echo 
'cancellazione disco non autorizzata da questo ip: '.$_SERVER['REMOTE_ADDR'];
    }
} catch (
Exception $e) {
    
$r=fopen('spazio_disco.log','a+');
    
$ErrMsg 'Errore: '.$e->getMessage()."\n";
    
fwrite($r,$ErrMsg);
    
fclose($r);
}
unset(
$clear);
?>
</body>
</html> 
Find all posts by this user
Quote this message in a reply
Post Reply 


Forum Jump:


User(s) browsing this thread: 1 Guest(s)