Ver Mensaje Individual
  #1 (permalink)  
Antiguo 31/10/2005, 15:43
Shockly
 
Fecha de Ingreso: agosto-2005
Mensajes: 109
Antigüedad: 19 años, 2 meses
Puntos: 0
Mi script de Server Status

Código PHP:
<?php
//
//  Version 1.0.0, Junio 2005, kernel AT elpombo DOT com
//
//---------------------------------------------------------------------------------------------------
//  definiciones

    
error_reportingE_ALL ^ (E_NOTICE E_WARNING) );
    
ignore_user_abort);
    @
set_time_limit);

    
define'MAGIC_BEG''__ki78FEm__' );
    
define'MAGIC_END''__G3uuFT9__' );
    
    
define'ABORT_SCRIPT''ABORT_SCRIPT' );
    
define'SCRIPT_RUNNING''SCRIPT_RUNNING' );
    
    
define'GET_TIMEOUT'30 );

    
define'LOG_CADA', (24*60*60) );                        //  nuevo log cada 24 horas
    
//---------------------------------------------------------------------------------------------------
//  funciones


    
function split_campos$todos ) {
        global    
$num_campos$primer_campo$segundo_campo$siguientes_campos$ultimo_campo;
        
        
$beg strpos($todosMAGIC_BEG);
        if (
$beg === false) {
            return 
false;
        }
        
$end strpos($todosMAGIC_END);
        if (
$end === false) {
            return 
false;
        }

        list( 
$primer_campo$campos ) = my_splitsubstr$todos$beg+12 , ($end-$beg)-13 ) );
        
$num_campos count$campos ) + 1;
        if( 
$num_campos ) {
            
$segundo_campo $campos[0];
            
$ultimo_campo $campos[count$campos ) - 1];
        } else {
            
$segundo_campo "";
            
$ultimo_campo "";
        }
        
$siguientes_campos implode','$campos );
        return 
true;
    }


    function 
my_split$todos ) {
        
$loscampos explode','$todos );
        
$primero array_shift$loscampos );
        return array( 
$primero$loscampos );
    }


    function 
micro_time() {
        
$temp explode(" "microtime());
        return 
bcadd($temp[0], $temp[1], 6);
    }
    
    
    
//  desde el server a GMT_local (España == +1)
    
function GetTZOffset$GMT_local ) {
      
$Offset date("O"0);
 
      
$Parity $Offset ? -1;
      
$Offset $Parity $Offset;
      
$Offset = ($Offset - ($Offset 100))/100*60 $Offset 100;
        
$TZOffset $Parity $Offset;
        
$TZOffset = (- ($TZOffset*60)) + ($GMT_local 3600);
        return 
$TZOffset;
    }


    function 
Get_HTTP$url$ua_string$cookie_string$get_timeout ) {
        global    
$resp_sevr$response$errno$errstr;

        
$response        "";
        
$resp_sevr    =  0;             # no errors
        
$s_Complete parse_url($url);
        
$s_Host       $s_Complete["host"];
        
$s_Port       80;
        
$s_URI        $s_Complete["path"];
        
$fp = @fsockopen($s_Host$s_Port$errno$errstr10);
        if ( 
$fp ) {
            
$request  "GET $s_URI HTTP/1.1\r\n";
            
$request .= "Host: $s_Host\r\n";
            
$request .= "Accept: */*\r\n";
            
$request .= "Accept-Language: es\r\n";
            
$request .= "Connection: Close\r\n";
            
$request .= "User-Agent: $ua_string\r\n";
            
$request .= "Cookie: $cookie_string\r\n";
            
$request .= "\r\n";
            
fputs($fp$request);
            
$query_timeout 4;
            
stream_set_blocking$fpFALSE );
            
stream_set_timeout$fp$query_timeout ); 
            
$loop_time time();
            
$status socket_get_status$fp );
        while( !
feof($fp) && !$status['timed_out'] ) {
                
$newtext = @fread$fp10000 );
                
$length strlen$newtext );
                
$response .= $newtext;
                
$diff time() - $loop_time;
                if( 
$diff $get_timeout ) {
                    
$resp_sevr 2;    # error
                    
break;
                }
                
$status socket_get_status$fp );
            }
            
fclose$fp );        
        }
        else {
            
$resp_sevr 1;            # error
        
}
        return 
$resp_sevr;
    }


    function 
Crea_el_log_e_initz_variables() {
        global    
$fn_log$hay_log;
        global    
$rounds$outages$downloaded$start_time;
        global    
$cnt_RUNNING$cnt_OUTAGE_Unable$cnt_OUTAGE_GET_Timeout$cnt_OUTAGE_MySQL;

        
// Crea el log
        
$tz time() + GetTZOffset'+1' );      // +1 porque ES es GMT+1
        
$fn            strftime"%d.%m.%Y.%H.%M.%S"$tz );
        
$fn_log    $fn ".txt";
        for(;;) {
            if( !
file_exists$fn_log ) )
                break;
            
$fn .= $fn "1";
            
$fn_log $fn ".txt";
        }
        
$f_id fopen$fn_log"w" );
        if( !
$f_id )
            
$hay_log false;
        else {
            
$hay_log true;
    
            
$str "Site Monitor";
            echo 
$str "<br>";
            
fwrite$f_id$str "\r\n" );
            
$str "Host: http://domain.com/foro/index.php";
            echo 
$str "<br>";
            
fwrite$f_id$str "\r\n" );
            
$str "Check Period: 1 minute";
            echo 
$str "<br>";
            
fwrite$f_id$str "\r\n" );
            
$str "";
            echo 
$str "<br>";
            
fwrite$f_id$str "\r\n" );
            
$tz time() + GetTZOffset'+1' );      // +1 porque ES es GMT+1;
            
$str "START " strftime"%d/%m/%Y %H:%M:%S"$tz );
            echo 
$str "<br>";
            
fwrite$f_id$str "\r\n" );
    
            
fclose$f_id );
        }

        
$rounds         0;
        
$outages        0;
        
$downloaded 0;
        
$cnt_RUNNING++;
        
$cnt_OUTAGE_Unable++;
        
$cnt_OUTAGE_GET_Timeout++;
        
$cnt_OUTAGE_MySQL++;
        
$start_time time();
    }


    function 
Close_log() {
        global    
$fn_log$hay_log;
        global    
$rounds$outages$downloaded$start_time;
        global    
$cnt_RUNNING$cnt_OUTAGE_Unable$cnt_OUTAGE_GET_Timeout$cnt_OUTAGE_MySQL;

        
$monitor_time time() - $start_time;
        
$monitor_time str_pad((floor($monitor_time/86400)),2,"0",STR_PAD_LEFT)."/"
        
.str_pad(floor(($monitor_time-(floor($monitor_time/86400)*86400))/3600),2,"0",STR_PAD_LEFT).":"
        
.str_pad(floor(($monitor_time-(floor($monitor_time/3600)*3600))/60),2,"0",STR_PAD_LEFT).":"
        
.str_pad(floor($monitor_time-(floor($monitor_time/60))*60),2,"0",STR_PAD_LEFT);
        
$tz time() + GetTZOffset'+1' );      // +1 porque ES es GMT+1;
        
$log_str  "STOP " strftime"%d/%m/%Y %H:%M:%S"$tz ) . " (" $monitor_time ")\r\n";

        if( 
$hay_log ) {
            
$f_id fopen$fn_log"a" );
            
fwrite$f_id$log_str );
            
fclose$f_id );
        }
        if( 
connection_status()== ) {
            echo 
"$log_str<br><br><br>";
            
ob_flush();
            
flush();
        }
    }


//------------------------------------------------------------------------------------------
//  main


    
if( file_existsSCRIPT_RUNNING ) )
        exit;                                                            
//  ignora la re-entrada
    
else
        
mkdirSCRIPT_RUNNING0775 );

    if( 
file_existsABORT_SCRIPT ) )
        exit;                                                            
//  ignora la re-entrada

    
Crea_el_log_e_initz_variables();
    
    for(;;) {                                                        
//  funciona en bucle infinito
        
$t1 micro_time();
        
$rounds++;
    
        
$url "http://domain.com/index.php";
        
$ua_string "Site Monitor (round: " $rounds " outages: " $outages ")";
        
$cookie_string "bblastvisit=0000000000; bbpassword=00000000000000000000000000000000; bbuserid=00000; bblastactivity=0000000000";
        
Get_HTTP$url$ua_string$cookie_stringGET_TIMEOUT );
    
        
$t2 micro_time();
        
$this_round bcsub$t2$t1);
        
$downloaded += strlen($response);
    
        
$t_now time();
        
$monitor_time $t_now $start_time;
        
$monitor_time str_pad((floor($monitor_time/86400)),2,"0",STR_PAD_LEFT)."/"
        
.str_pad(floor(($monitor_time-(floor($monitor_time/86400)*86400))/3600),2,"0",STR_PAD_LEFT).":"
        
.str_pad(floor(($monitor_time-(floor($monitor_time/3600)*3600))/60),2,"0",STR_PAD_LEFT).":"
        
.str_pad(floor($monitor_time-(floor($monitor_time/60))*60),2,"0",STR_PAD_LEFT);
    
        
$server_load 0;
        
$fyh_round 0;
        if( !
$resp_sevr ) {
            if( !
split_campos$response ) ) {
                    
$resp_sevr 3;                                                    //  MySQL server has gone away
            
}
            else {
                
$server_load $segundo_campo /= 100;
                
$fyh_round $ultimo_campo;
            }
        }
        
        if( 
$resp_sevr ) {
            
$outages++;
        }
            
        
$log_str "$rounds, ";
        switch( 
$resp_sevr ) {
            case 
0:
                
$log_str .= "RUNNING, Server Running, ";
                
$cnt_RUNNING++;
                break;
            case 
1:
                
$log_str .= "OUTAGE, Unable to Connect, ";
                
$cnt_OUTAGE_Unable++;
                break;
            case 
2:
                
$log_str .= "OUTAGE, GET Timeout, ";
                
$cnt_OUTAGE_GET_Timeout++;
                break;
            case 
3:
                
$log_str .= "OUTAGE, MySQL server has gone away, ";
                
$cnt_OUTAGE_MySQL++;
                break;
            default:
                
$log_str .= "Oops, Oops, ";
        }
        if( 
$server_load ) {
            
$serv_load explode'.'$server_load );
            if( !
$serv_load[1] ) $serv_load[1] = "00";
            else if( 
$serv_load[1] < 10 $serv_load[1] *= 10;
        }
        else {
            
$serv_load[0] = "0";
            
$serv_load[1] = "00";
        }
        if( 
$fyh_round ) {
            
$tz $fyh_round GetTZOffset'+1' );      // +1 porque ES es GMT+1
            
$str_fyh_round strftime"%d/%m/%Y %H:%M:%S"$tz );
        }
        else {
            
$str_fyh_round "00/00/0000 00:00:00";
        }
        
$tz time() + GetTZOffset'+1' );      // +1 porque ES es GMT+1;
        
$tl            strftime"%d/%m/%Y %H:%M:%S"$tz );
        
$downtime = (( 100000 $outages ) / $rounds) / 1000;
        
$downtime bcsub$downtime0);
        
$uptime 100 $downtime;
        
$uptime bcsub$uptime0);
        
$kbdl $downloaded 1000;
        
$kbdl bcsub$kbdl0);
        
$thr bcsub$this_round0);
        
$log_str .= "$tl, $serv_load[0].$serv_load[1], $thr, $kbdl, $monitor_time, $outages, $uptime, $downtime";
        if( 
$hay_log ) {
            
$f_id fopen$fn_log"a" );
            
fwrite$f_id$log_str "\r\n" );
            
fclose$f_id );
        }
        
        if( 
connection_status()== ) {
            echo 
"$log_str<br>";
            
ob_flush();
            
flush();
        }
            
        if( 
file_existsABORT_SCRIPT ) ) {
            @
rmdirABORT_SCRIPT );
            @
rmdirSCRIPT_RUNNING );
            
Close_log();
            die();
        }
    
        if( (
time() - $start_time) >= LOG_CADA ) {
            
Close_log();
            
$t2 micro_time();
            
$this_round bcsub$t2$t1);
            if( 
$this_round 60 ) {
                
sleep60 $this_round );    //  cada minuto
            
}
            
Crea_el_log_e_initz_variables();
        }
        else {
            
$t2 micro_time();
            
$this_round bcsub$t2$t1);
            if( 
$this_round 60 ) {
                
sleep60 $this_round );    //  cada minuto
            
}
        }
    }

//---------------------------------------------------------------------------------------------------
//    END
?>