<?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);
    }

?>