• Publicidad

Desesperación máxima... no entiendo Perl aquí qué hace

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Desesperación máxima... no entiendo Perl aquí qué hace

Notapor Sombrerero_Loco » 2008-12-03 05:00 @250

¡Hola!
Llevo 4 horas (de reloj) intentando discernir el porqué de este comportamiento. Como veréis en el script lo que hace es abrir un fichero para escritura, leer los valores de UTC y cargarlos a un array.
Defino dos tiempo, uno para el tiempo de monitor ($hora_integracion) y otro para la hora del sistema ($donetime). Al final del script le coloco un timestamp que es el $donetime que es el que usaré en el siguiente tiempo de monitoreo para comprobar si ha sido monitorizado, sino, iré multiplicando hacia atrás hasta que coincida, pero eso más adelante.
Antes de finalizar con el timestamp, lo que hago es un foreach para cada valor del array, si la $hora_integracion es MAYOR le digo que me haga el print(), sino, a tomar viento.
La cosa es que el jodío me lo hace después de n segundos que no sé concretar. ¿Tenéis alguna idea de qué pajas mentales está haciendo Perl? ¿o es que soy un programador amateur demasiado punky?

Todo, absolutamente todo, sera más que bienvenido...
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use DBI;

#Declaracion de variables Globales de tiempo, $hora_integracion es el timing mas unos segundos por si
#existieran cuellos de botella, 60 = 1 minutos + 5 seg de gracia

@control_lastupdate=  ();

#Declaramos conexión a la DB
my @db_datos = ('DBI:Oracle:OPENVIEW', 'OVO_BAC', 'OVO_BAC');
my $dbh = DBI->connect(@db_datos) or die "no se ha podido conectar\n";

#Comprobamos si existe fichero, si no -> lo creamos
my $dir_salida ="c:\\Logs_update\\";
if (!(-e $dir_salida))         {
    mkdir($dir_salida) or die "Error al crear el directorio\n";
    }
my $lastupdate = "c:\\logs_update\\last_update.txt";
    if (!(-e $lastupdate)) {
    open (SALIDA,">$lastupdate") or die "no se ha podido abrir el fichero para escritura\n";
    close SALIDA;
    }


#Abrimos de nuevo el fichero y miramos a ver si la ultima hora de finalizacion (en este modo de test, la hora de inicio)
#superior a $hora_integracion, si lo es, significa que hace menos de 2 minutos que se actualizó
#Sino, debemos de ir ir ejecutando múltiplos y comprobando contra esos múltiplos de monitorización hasta que sea mayor.
open (SALIDA,"<$lastupdate") or die "No se puede abrir el fichero para lectura de fechas\n";

    foreach (<SALIDA>){
              if (/\s*(\d*)/){

                push (@control_lastupdate, $_);

             }
          }

 #DEBUG: PARA CONTROL EN DESARROLLO DE TIMESTAMP
 $donetime = time;
 $hora_integracion = $donetime - 70;

 print "$donetime\n";
 print "$hora_integracion\n";


 #Indicamos que si lo encuentra -> ok (DESARROLLO), Sino, le sume otro 125 segundos y vuelva a intentarlo, así encontramos el rango
 #donde nos hemos quedado con el último pooling
 my $multiplicador_tiempo = ();
 foreach $control_lastupdate(@control_lastupdate){
           if ($hora_integracion > $control_lastupdate ) {
               print "dabuten, lo detecta es este -> $control_lastupdate";

               }

           else {
           print "no esta fuera de margen\n";
           }
         }
           open (SALIDA, ">>$lastupdate");
           print SALIDA " $donetime \n";
           close SALIDA;

#Abrimos fichero y escribimos la hora de cierre
open (SALIDA, ">>$lastupdate");
print SALIDA " $donetime \n";
close SALIDA;
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4

y me devuelve:
Código: Seleccionar todo
1228298409
1228298339
dabuten, lo detecta es este ->  1228298309
dabuten, lo detecta es este ->  1228298313
dabuten, lo detecta es este ->  1228298315
dabuten, lo detecta es este ->  1228298316
dabuten, lo detecta es este ->  1228298323
dabuten, lo detecta es este ->  1228298326
dabuten, lo detecta es este ->  1228298328
dabuten, lo detecta es este ->  1228298330
dabuten, lo detecta es este ->  1228298332
Sombrerero_Loco
Perlero nuevo
Perlero nuevo
 
Mensajes: 42
Registrado: 2008-11-11 11:20 @514

Publicidad

Notapor explorer » 2008-12-03 05:52 @286

Yo veo que la salida es correcta: todos los tiempos son inferiores a la de $hora_integracion.

Lo que me parece muy lioso es abrir y cerrar tantas veces el fichero de última actualización... incluso veo que está repetido dos veces, al final, el añadir el nuevo tiempo.

Aún no tengo muy claro qué es lo que quieres hacer...
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor Sombrerero_Loco » 2008-12-03 09:35 @440

Vaya que si es lioso... al final he tirado por la calle de en medio.

En vez de guardar cada registro en un fichero, escanear y comparar, he creado un fichero con el $time que chequeo antes de la ejecución del programa, y que modificado si al final de todo, se ha podido ejecutar con éxito.

La verdad que ese código es una cerdada, es más un script de desarrollo / brainstorm, que uno como dios manda...

¡Pero gracias, explorer!
Yo ya no sé qué haría sin ti :)

¡Un abrazo!
Sombrerero_Loco
Perlero nuevo
Perlero nuevo
 
Mensajes: 42
Registrado: 2008-11-11 11:20 @514


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 17 invitados

cron