<?php
error_reporting
(E_ALL E_NOTICE);
//    session_start();
    
$depurar "";
    
$page_from $_SERVER['PHP_SELF'];
    if(
$_REQUEST['source'] == 'yes')
    {
        
show_source(__FILE__);
        exit();
    }

    
    
// CÓDIGO UTILIZADO PARA QUE EL SCRIPT SOLO SE EJECUTE UNA VEZ Y NO HAYA DOBLE EJECUCIÓN.
    // ESTE PROCEDIMIENTO LO VAMOS A MANTENER HASTA TANTO MEJOREMOS EL CÓDIGO Y PERMITAMOS ACTUALIZACIÓN
    // SIMULTANEA DE DATOS O BIEN FORKS DE PROCESOS.-
    
$depurar TRUE;
    
$start TRUE;
    if(
$start == TRUE)
    {
        exit();
    }
    
//$state = file_get_contents('/tmp/doStats.sta');
    
$tmpfile '/tmp/doStats.sta';
    if(!
file_exists($tmpfile))
    {
        
$command "touch " $tmpfile;
        
exec($command);
        
file_put_contents($tmpfile'RUNNING, started at '.time());
    }else
    {
        exit();    
    }

    include(
"include/conexion.php");

    include (
"include/funciones.php");


    
// Opens a connection to a MySQL server
    
$connection=mysql_connect ($db_host$db_username$db_password);
    if (!
$connection) {
        echo 
'Not connected : ' mysql_error();
    }
    
// Set the active MySQL database
    
$db_selected mysql_select_db($db_name$connection);
    if (!
$db_selected) {
      echo 
'Can\'t use db : ' mysql_error();
    }
    
//    $limit = " LIMIT 10";
    
    
mysql_query("START TRANSACTION READ WRITE");
    
$query "SELECT * FROM tbl_Equipos " ' ORDER BY ID' $limit;
    
$result mysql_query($query);
    if (!
$result) {
//        die('Invalid query: ' . mysql_error());
        
echo "NO SE ENCONTRARON REGISTRO -> $query"\n";
        
mysql_query("ROLLBACK");
    }
    while (
$row = @mysql_fetch_assoc($result))
    {        
        if(
$row['LAST_NRORENGLON_EQUIPO'])
        {
            
$last_nrorenglon_equipo $row['LAST_NRORENGLON_EQUIPO'];
        }else
        {
            
$last_nrorenglon_equipo 0;
        }        
        
$limit_stats " LIMIT 2000 ";
        
$query2 "SELECT * FROM tbl_DetEquiposSNMPStats WHERE " 
                    
" ID_EQUIPO=" $row['ID'] . ' AND ' .
                    
" NRORENGLON >" $last_nrorenglon_equipo 
                    
" ORDER BY ID_EQUIPO, NRORENGLON, IFACE_NAME, UNIXTIMESTAMP ASC" $limit_stats;

        if (
$depurar == TRUE)
        {
            echo 
$query2 "\n";
        }
        
$result2 =     query($query2);
        
$num_of_rows query_num_rows($result2);
        if (!
$num_of_rows) {
            
//die('Invalid query: ' . mysql_error());
            
echo "NO SE ENCONTRARON REGISTRO -> $query2"\n";
            
mysql_query("ROLLBACK");
        }
        while (
$row2 query_fetch_object($result2))
        {
            
$basedir '/home/ipred/domains/intranet.ipred.com.ar/public_html/rrd';
            
$basedirpng '/home/ipred/domains/intranet.ipred.com.ar/public_html/png';
            
            
$id_operationmode $row['ID_OPERATIONMODE'];
            
$id_equipo $row['ID'];
            
            
// OBTENGO LOS DATOS DE tbl_MACsEquipos SEGÚN CORRESPONDA (PARA EL ID_EQUIPO)
            
$query_macs =     "SELECT * FROM tbl_MACsEquipos WHERE " .
                            
"ID='" $id_equipo "' AND " .
                            
"IF_NAME='" trim($row2->IFACE_NAME) . "'";
            
$result_macs query($query_macs);
            if (
$depurar == TRUE)
            {
                echo 
$query_macs "\n";
            }
            
$num_of_rows_macs query_num_rows($result_macs);
            if(!
$num_of_rows_macs)
            {
                echo 
"NO SE ENCONTRARON REGISTRO -> $query_macs"\n";
                
mysql_query("ROLLBACK");
            }
            while(
$row_mac query_fetch_object($result_macs))
            {
                
$nrorenglon_id_equipos $row_mac->NRORENGLON;
            }
            
//$basefile = $basedir . '/' . $id_operationmode . '/' . $id_equipo;
            
$basefile $basedir '/' $id_equipo;
            
$basefilepng $basedirpng '/' $id_equipo;            
            
$iface_name $id_equipo "-" $nrorenglon_id_equipos;
            
// ARCHIVO -bytes
            
$archivo $basefile "/" $iface_name '.rrd';
//            $array_replace = array(" ","@","<",">");
//            $archivo = str_replace($array_replace,"_",$archivo);
            
            // VERIFICO QUE EXISTA EL ARCHIVO .RRD
            // EL FORMATO ES: $directory/$id_tipo_equipo/$id_equipo/$id_equipo-{iface}.rrd    
            
if (!file_exists($archivo))
            {
                
// EL ARCHIVO NO EXISTE, POR LO TANTO DEBO ACTULAIZAR LOS DATOS SEGÚN LO OBTENIDO
//                if ($row['LAST_UNIXTIMESTAMP'] == 0)
//                {
//                    $now2 = $row2->UNIXTIMESTAMP - 1;
                    
$now2 $row2->UNIXTIMESTAMPCPE 1;

//                }else
//                {
//                    $now2 = $row['LAST_UNIXTIMESTAMP'] - 100;
//                }
                
doCreateFile($archivo,$basefile,$now2);
//                doUpdateFile($archivo,$ts,$resvalue);
                
            
}else
            {
                
// EL ARCHIVO NO EXISTE, POR LO TANTO DEBO:
                // CREAR EL ARCHIVO DE BASE DE DATOS
                // ACTUALIZAR LOS DATOS SEGÚN LO OBTENIDO
//                doUpdateFile($archivo,$ts,$resvalue);
                
            
}
                
$ts = (float)$row2->UNIXTIMESTAMPCPE;
                
$txbits = (float)$row2->IFACE_OUT_OCTETS 8;
                if(!
$txbits){$txbits=0;};
                
$rxbits = (float)$row2->IFACE_IN_OCTECTS 8;
                if(!
$rxbits){$rxbits=0;};
                
$tx_ucast = (float)$row2->IFACE_OUT_UCAST_PKTS_OCTETS;
                if(!
$tx_ucast){$tx_ucast=0;};
                
$rx_ucast = (float)$row2->IFACE_IN_UCAST_PKTS_OCTETS;
                if(!
$rx_ucast){$rx_ucast=0;};
                
$tx_nucast = (float)$row2->IFACE_OUT_NUCAST_PKTS_OCTETS;
                if(!
$tx_nucast){$tx_nucast=0;};
                
$rx_nucast = (float)$row2->IFACE_IN_NUCAST_PKTS_OCTETS;
                if(!
$rx_nucast){$rx_nucast=0;};
                
$tx_discards = (float)$row2->IFACE_OUT_DISCARDS;
                if(!
$tx_discards){$tx_discards=0;};
                
$rx_discards = (float)$row2->IFACE_IN_DISCARDS;
                if(!
$rx_discards){$rx_discards=0;};
                
$tx_errors = (float)$row2->IFACE_OUT_ERRORS;
                if(!
$tx_errors){$tx_errors=0;};
                
$rx_errors = (float)$row2->IFACE_IN_ERRORS;
                if(!
$rx_errors){$rx_errors=0;};
    
                
$resvalue $txbits ":" $rxbits ":" .
                            
$tx_ucast ":" $rx_ucast ":" .
                            
$tx_nucast ":" $rx_nucast ":" .
                            
$tx_discards ":" $rx_discards ":" .
                            
$tx_errors ":" $rx_errors;
                
//echo $archivo . " - " . $ts . " - " . $resvalue . "\n";
                
doUpdateFile($archivo,$ts,$resvalue);
                
$last_nrorenglon_equipo $row2->NRORENGLON;
            
        }
        
mysql_query("COMMIT");
            
$basedir '/home/ipred/domains/intranet.ipred.com.ar/public_html/rrd';
            
$basedirpng '/home/ipred/domains/intranet.ipred.com.ar/public_html/png';
            
            
$id_operationmode $row['ID_OPERATIONMODE'];
            
$id_equipo $row['ID'];
            
            
// OBTENGO LOS DATOS DE tbl_MACsEquipos SEGÚN CORRESPONDA (PARA EL ID_EQUIPO)
            
$query_macs =     "SELECT * FROM tbl_MACsEquipos WHERE " .
                            
"ID='" $id_equipo "'";
            
$result_macs query($query_macs);
            if (
$depurar == TRUE)
            {
                echo 
$query_macs "\n";
            }
            
$num_of_rows_macs query_num_rows($result_macs);
            if(!
$num_of_rows_macs)
            {
                echo 
"NO SE ENCONTRARON REGISTRO -> $query_macs"\n";
//                die('Invalid query: ' . mysql_error());
            
}
            while(
$row_mac query_fetch_object($result_macs))
            {
                
$nrorenglon_id_equipos $row_mac->NRORENGLON;
                
//$basefile = $basedir . '/' . $id_operationmode . '/' . $id_equipo;
                
$basefile $basedir '/' $id_equipo;
                
$basefilepng $basedirpng '/' $id_equipo;            
                
$iface_name $id_equipo "-" $nrorenglon_id_equipos;
                
$archivo $basefile "/" $iface_name '.rrd';
                
$str_iface_name $row_mac->IF_NAME;
                
doGenerateGraph($basedirpng,$basefile,$iface_name,$str_iface_name,$archivo,"day","bytes");
                
doGenerateGraph($basedirpng,$basefile,$iface_name,$str_iface_name,$archivo,"week","bytes");
                
doGenerateGraph($basedirpng,$basefile,$iface_name,$str_iface_name,$archivo,"month","bytes");
                
doGenerateGraph($basedirpng,$basefile,$iface_name,$str_iface_name,$archivo,"year","bytes");
            }
        
//ACTUALIZO LOS DATOS CON EL ÚLTIMO TIME STAMP PARA EL QUIPO
        
mysql_query("START TRANSACTION");
        
$query4 "UPDATE tbl_Equipos SET LAST_NRORENGLON_EQUIPO=" $last_nrorenglon_equipo " WHERE ID=" $row['ID'];
        
$result4 mysql_query($query4);
        if (!
$result4
        {
            echo 
"ERROR AL ACTUALIZAR -> $query4"\n";
//            die('Invalid query: ' . mysql_error());
            
mysql_query("ROLLBACK");
        }
        
//ACTUALIZO LOS DATOS CON EL ÚLTIMO TIME STAMP PARA EL QUIPO
        
$query4 =     "DELETE FROM tbl_DetEquiposSNMPStats WHERE " .
                    
"ID_EQUIPO='" $row['ID'] . "' AND " .
                    
"NRORENGLON<='" $last_nrorenglon_equipo "'";
        
$result4 mysql_query($query4);
        if (!
$result4
        {
            echo 
"ERROR AL BORRAR -> $query4"\n";
//            die('Invalid query: ' . mysql_error());
            
mysql_query("ROLLBACK");
        }
        
mysql_query("COMMIT");
    };
    function 
doCreateFile($filename,$basefile,$now)
    {
        if(!
file_exists($basefile))
        {
            
$command "mkdir -p " $basefile;
//            echo $command;
//            echo '\n';
            
exec($command);
        };
        
$rrdtool '/usr/bin/rrdtool';
        
$start $now;
        
$step 60;
        if (
$depurar == TRUE)
        {
            echo 
"Creando archivo " $filename " con TIMESTAMP: " $now "\n";
        }
        
$command $rrdtool ' create ' "$filename
                    
' --start ' $start .
                    
' --step ' $step 
                    
' DS:TX_Bits:DERIVE:120:0:U ' .
                    
' DS:RX_Bits:DERIVE:120:0:U ' .
                    
' DS:TX_UCast_Packets:DERIVE:120:0:U ' .
                    
' DS:RX_UCast_Packets:DERIVE:120:0:U ' .
                    
' DS:TX_NUCast_Packets:DERIVE:120:0:U ' .
                    
' DS:RX_NUCast_Packets:DERIVE:120:0:U ' .
                    
' DS:TX_Discards_Packets:DERIVE:120:0:U ' .
                    
' DS:RX_Discards_Packets:DERIVE:120:0:U ' .
                    
' DS:TX_Errors_Packets:DERIVE:120:0:U ' .
                    
' DS:RX_Errors_Packets:DERIVE:120:0:U ' .
                    
' RRA:AVERAGE:0.5:1:1440 ' .
                    
' RRA:AVERAGE:0.5:6:1680 ' .
                    
' RRA:AVERAGE:0.5:24:1830 ' .
                    
' RRA:AVERAGE:0.5:144:3650 ' .
                    
' RRA:MIN:0.5:1:1440 ' .
                    
' RRA:MIN:0.5:6:1680 ' .
                    
' RRA:MIN:0.5:24:1830 ' .
                    
' RRA:MIN:0.5:144:3650     ' .
                    
' RRA:MAX:0.5:1:1440 ' .
                    
' RRA:MAX:0.5:6:1680 ' .
                    
' RRA:MAX:0.5:24:1830 ' .
                    
' RRA:MAX:0.5:144:3650 ';
//        $command = $rrdtool . ' create ' . "$filename" . 
//                    ' --start ' . $start .
//                    ' --step ' . $step . 
//                    ' DS:TX_Bits:COUNTER:120:0:U ' .
//                    ' DS:RX_Bits:COUNTER:120:0:U ' .
//                    ' DS:TX_UCast_Packets:COUNTER:120:0:U ' .
//                    ' DS:RX_UCast_Packets:COUNTER:120:0:U ' .
//                    ' DS:TX_NUCast_Packets:COUNTER:120:0:U ' .
//                    ' DS:RX_NUCast_Packets:COUNTER:120:0:U ' .
//                    ' DS:TX_Discards_Packets:COUNTER:120:0:U ' .
//                    ' DS:RX_Discards_Packets:COUNTER:120:0:U ' .
//                    ' DS:TX_Errors_Packets:COUNTER:120:0:U ' .
//                    ' DS:RX_Errors_Packets:COUNTER:120:0:U ' .
//                    ' RRA:AVERAGE:0.5:1:1440 ' .
//                    ' RRA:AVERAGE:0.5:6:1680 ' .
//                    ' RRA:AVERAGE:0.5:24:1830 ' .
//                    ' RRA:AVERAGE:0.5:144:3650 ' .
//                    ' RRA:MIN:0.5:1:1440 ' .
//                    ' RRA:MIN:0.5:6:1680 ' .
//                    ' RRA:MIN:0.5:24:1830 ' .
//                    ' RRA:MIN:0.5:144:3650     ' .
//                    ' RRA:MAX:0.5:1:1440 ' .
//                    ' RRA:MAX:0.5:6:1680 ' .
//                    ' RRA:MAX:0.5:24:1830 ' .
//                    ' RRA:MAX:0.5:144:3650 ';

//                    ' RRA:MIN:0.5:1:576 ' .
//                    ' RRA:MIN:0.5:6:672 ' .
//                    ' RRA:MIN:0.5:24:732 ' .
//                    ' RRA:MIN:0.5:144:1460     ' .

//            echo $command . "\n";        
            
exec($command);
            
    }
    function 
doUpdateFile($filename,$timest,$values)
    {
        
$rrdtool '/usr/bin/rrdtool';
        
        
$command $rrdtool ' update ' "$filename" " $timest ":" $values;
        
//echo $command;
        
if ($depurar == TRUE)
        {
            echo 
"Actualizando archivo " $filename " con TIMESTAMP: " $timest " con SERIE: " $values ."\n";
        }
        
exec($command);        
    }
    function 
doGenerateGraph($basedirpng,$basefilepng,$iface,$str_iface_name,$filename,$periodo,$tipograph)
    {
        
        if(!
file_exists($basefilepng))
        {
            
$command "mkdir -p " $basefilepng;
//            echo $command;
//            echo '\n';
            
exec($command);
        };
        
$rrdtool '/usr/bin/rrdtool';
//        $tx_color = "#0000CC";
        
$tx_color "#4169E1";
        
$tx_border_color "#0033CC";
//        $rx_color = "#00CC00";
        
$rx_color "#32CD32";
        
$rx_border_color "#336600";
        
$border_color "#112233";
        if(
$periodo == "day")
        {
            
$grafica "DIARIA";
            
$periodog "24h";
        }
        if(
$periodo == "week")
        {
            
$grafica "SEMANAL";
            
$periodog "1w";
        }
        if(
$periodo == "month")
        {
            
$grafica "MENSUAL";
            
$periodog "1m";
        }
        if(
$periodo == "year")
        {
            
$grafica "ANUAL";
            
$periodog "1y";
        }
        
$archivopng $basefilepng "/" $iface "-" $tipograph "-" $periodo ".png";
        if (
$depurar == TRUE)
        {
            echo 
"Creaendo archivo GRAFICO: " $archivopng "\n";
        }
        
$command $rrdtool ' graph ' "$archivopng" " 
                    
'--title="NETWORK INFO :: ' $str_iface_name '"' " " .
                    
'--end now ' " " .
                    
"--start end-$periodog " " " .
                    
'-l 0 ' " " .
                    
'-a PNG ' " " .
                    
'--base 1000 ' " " .
                    
'--slope-mode ' " " .
                    
'--height 215 ' " " .
                    
'--width 1024 ' " " .
                    
'--vertical-label="TRAFICO EN bps" ' " " .
                    
"DEF:TX_Bits=$filename:TX_Bits:AVERAGE " " " .
                    
"DEF:RX_Bits=$filename:RX_Bits:AVERAGE " " " .
                    
"CDEF:RX_Bits_NEG=RX_Bits,-1,* " " " .
                    
'AREA:TX_Bits'.$tx_color.':"TX Bits" ' " " .
                    
'LINE1:TX_Bits'.$tx_border_color" " .
                    
'"GPRINT:TX_Bits:MIN: MIN\\: %6.2lf %sbps"' " " .
                    
'"GPRINT:TX_Bits:MAX: MAX\\: %6.2lf %sbps"' " " .
                    
'"GPRINT:TX_Bits:LAST: ACT\\: %6.2lf %sbps"' " " .
                    
'"GPRINT:TX_Bits:AVERAGE: PROM\\: %6.2lf %sbps \\n"' " " .
                    
'AREA:RX_Bits_NEG'.$rx_color.':"RX Bits" ' " " .
                    
'LINE1:RX_Bits_NEG'.$rx_border_color." " .
                    
'"GPRINT:RX_Bits:MIN: MIN\\: %6.2lf %sbps"' " " .
                    
'"GPRINT:RX_Bits:MAX: MAX\\: %6.2lf %sbps"' " " .
                    
'"GPRINT:RX_Bits:LAST: ACT\\: %6.2lf %sbps"' " " .
                    
'"GPRINT:RX_Bits:AVERAGE: PROM\\: %6.2lf %sbps \\n"' " " .
                    
'HRULE:0#000000';
            if (
$depurar == TRUE)
            {
                echo 
"Comando a ejecutar: " $command "\n";
            }
            
exec($command);
                    
//                    '--x-grid MINUTE:5:HOUR:1:HOUR:4:0:%X ' .
//                    '--height 150 ' . " " .
//                    '--width 800 ' . " " .
        
        
    
}
    if(
file_exists($tmpfile))
    {
        
$command "rm -f " $tmpfile;
        
exec($command);
    }

?>