analizar un archivo de registro que toma un argumento (tiempo de ejecución tomado por las pruebas)

analizar un archivo de registro que toma un argumento (tiempo de ejecución tomado por las pruebas)

Necesito analizar un archivo de registro y decirle el nombre de la prueba si el tiempo de ejecución es mayor que un período específico (el usuario ingresará este tiempo, digamos que el script se ejecutó durante más de 30 minutos)

iniciar el conjunto de pruebas de seguridad
Lun 05 de septiembre 00:16:30 PDT 2011: creando hilos...
Lunes 05 de septiembre 00:16:30 PDT 2011: comenzando...
Lun 05 de septiembre 00:16:31 PDT 2011: Informe de resultados...
Lun 05 de septiembre 00:16:31 PDT 2011: Escritura de resultados en /space/builder/builds/macosx-64/HEAD/qa/scripts/results/add_role_user_security.xml
add_role_user_security.xml: Aprobado
Lun 05 de septiembre 00:16:31 PDT 2011: creando hilos...
Lunes 05 de septiembre 00:16:31 PDT 2011: comenzando...
Lunes 05 de septiembre 00:16:32 PDT 2011: Informe de resultados...
Lun 05 de septiembre 00:16:32 PDT 2011: Escritura de resultados en /space/builder/builds/macosx-64/HEAD/qa/scripts/results/privilege.xml
privilegio.xml: Aprobado
Lun 05 de septiembre 00:16:32 PDT 2011: creando hilos...
Lunes 05 de septiembre 00:16:32 PDT 2011: comenzando...
Lunes 05 de septiembre 00:16:32 PDT 2011: Informe de resultados...
Lun 05 de septiembre 00:16:32 PDT 2011: Escritura de resultados en /space/builder/builds/macosx-64/HEAD/qa/scripts/results/edit_role_user.xml
edit_role_user.xml: Aprobado
Lun 05 de septiembre 00:16:32 PDT 2011: creando hilos...
Lunes 05 de septiembre 00:16:32 PDT 2011: comenzando...
Lunes 05 de septiembre 00:16:33 PDT 2011: Informe de resultados...
Lun 05 de septiembre 00:16:33 PDT 2011: Escritura de resultados en /space/builder/builds/macosx-64/HEAD/qa/scripts/results/remove_roles.xml
remove_roles.xml: Aprobado
Lun 05 de septiembre 00:16:33 PDT 2011: creando hilos...
Lunes 05 de septiembre 00:16:33 PDT 2011: comenzando...
Lunes 05 de septiembre 00:16:33 PDT 2011: Informe de resultados...
Lun 05 de septiembre 00:16:33 PDT 2011: Escritura de resultados en /space/builder/builds/macosx-64/HEAD/qa/scripts/results/role_user1.xml
role_user1.xml: Aprobado
Lun 05 de septiembre 00:16:33 PDT 2011: creando hilos...
Lunes 05 de septiembre 00:16:33 PDT 2011: comenzando...
Lunes 05 de septiembre 00:16:34 PDT 2011: Informe de resultados...
Lun 05 de septiembre 00:16:34 PDT 2011: Escritura de resultados en /space/builder/builds/macosx-64/HEAD/qa/scripts/results/role_user2.xml
bug10611.xml: aprobado
conjunto de pruebas de seguridad
iniciar el conjunto de pruebas
Lun 05 de septiembre 00:18:52 PDT 2011: creando hilos...
Lunes 05 de septiembre 00:18:52 PDT 2011: comenzando...
Lunes 05 de septiembre 00:18:52 PDT 2011: Informe de resultados...
Lun 05 de septiembre 00:18:52 PDT 2011: Escritura de resultados en /space/builder/builds/macosx-64/HEAD/qa/scripts/results/setup_script.xml
setup_script.xml: Aprobado
Lun 05 de septiembre 00:18:52 PDT 2011: creando hilos...
Lunes 05 de septiembre 00:18:52 PDT 2011: comenzando...
Lunes 05 de septiembre 00:18:58 PDT 2011: Informe de resultados...
Lun 05 de septiembre 00:18:58 PDT 2011: Escritura de resultados en /space/builder/builds/macosx-64/HEAD/qa/scripts/results/bug_scripts.xml
bug_scripts.xml: Aprobado
Lun 05 de septiembre 00:18:58 PDT 2011: creando hilos...
Lunes 05 de septiembre 00:18:58 PDT 2011: comenzando...
Lunes 05 de septiembre 00:18:58 PDT 2011: Informe de resultados...
Lun 05 de septiembre 00:18:58 PDT 2011: Escritura de resultados en /space/builder/builds/macosx-64/HEAD/qa/scripts/results/loadtime_namespace.xml
[Error grave] loadtime_namespace.xml:11:25: El objetivo de instrucción de procesamiento que coincide con "[xX][mM][lL]" no está permitido.
No se puede analizar loadtime_namespace.xml: ejecutando la utilidad diff para comparar...
rm -f ./scripts/diffs/loadtime_namespace.xml
loadtime_namespace.xml: Aprobado
Lunes 05 de septiembre 00:19:01 PDT 2011: creando hilos...
Lunes 05 de septiembre 00:19:01 PDT 2011: comenzando...
Lun 05 de septiembre 00:19:01 PDT 2011: Informe de resultados...
Lun 05 de septiembre 00:19:01 PDT 2011: Escritura de resultados en /space/builder/builds/macosx-64/HEAD/qa/scripts/results/string_script.xml
string_script.xml: Aprobado
para el conjunto de pruebas

El usuario ejecutará el script pasando el tiempo de ejecución que tarda el script.

sh script_name.sh 60

Y debería tener la lista de pruebas que tardan más de 60 minutos en ejecutarse.

La salida debería ser como:

conjunto de pruebas de seguridad add_role_user_security.xml
privilegio del conjunto de pruebas de seguridad.xml
conjunto de pruebas de seguridad remove_roles.xml
conjunto de pruebas de seguridad string_script.xml
para el conjunto de pruebas string_script.xml
para el conjunto de pruebas setup_script.xml

Respuesta1

El código al final de esta respuesta hace lo que usted solicitó y funciona según el ejemplo que proporcionó.

Descripción:

Básicamente funciona en dos etapas:

  • awkutiliza expresiones regulares y variables de estado para determinar la transición entre archivos y bloques del conjunto de pruebas. Genera una lista delimitada por tuberías donde cada fila tiene el nombre del conjunto de pruebas, el archivo de prueba y la hora de inicio y finalización.
  • while IFS="|" read ...La parte toma la salida delimitada por tubería y awkla lee en algunas variables donde uso datepara convertir marcas de tiempo en segundos desde la época y luego calculo la diferencia y la comparo con el valor de entrada.

El código no hace mucho en cuanto a validación, por lo que tendrá que agregarlo usted mismo.

Código:

#!/usr/bin/sh

# Get the arguments
INPUT_FILENAME="$1"
FILTER_MINUTES="$2"

# Convert minutes to seconds
FILTER_SECONDS="$(( FILTER_MINUTES * 60 ))"

awk '
BEGIN {
    printf("%s,%s,%s,%s\n","TEST_NAME","FILENAME","START_TIME","END_TIME");
    TEST_NAME="";
    START_TIME="";
    END_TIME="";
  }
match($0, "^start (.+)$", arr) {
    TEST_NAME=arr[1];
    START_TIME="";
    END_TIME="";
    FILENAME="";
    /* printf("TEST_NAME START: %s\n", TEST_NAME); */
  }
match($0, /^(.+.xml) : (.+)$/, arr)  {
    FILENAME=sprintf("%s",arr[1]);
    printf("%s|%s|%s|%s\n",TEST_NAME,FILENAME,START_TIME,END_TIME);
    START_TIME="";
    END_TIME="";
    FILENAME="";
  }
match($0, /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ([0-9]{2}) ([0-9]{2}):([0-9]{2}):([0-9]{2}) ([^\ ]+) ([0-9]{4}):.*$/, arr) {
    if(START_TIME ~ /^$/)
       START_TIME=sprintf("%s-%s-%s %s:%s:%s %s",arr[3],arr[2],arr[8],arr[4],arr[5],arr[6],arr[7]);
    else
       END_TIME=sprintf("%s-%s-%s %s:%s:%s %s",arr[3],arr[2],arr[8],arr[4],arr[5],arr[6],arr[7]);
  }
$0 ~ "^" TEST_NAME "$" {
    /* printf("TEST_NAME END: %s\n", TEST_NAME); */
    TEST_NAME="";
    START_TIME="";
    END_TIME="";
    FILENAME="";
  }
' "$INPUT_FILENAME" | while IFS="|" read TEST_NAME FILENAME START_TIME END_TIME
do
  START_TIME_SEC=$(date -d "$START_TIME" +%s)
  END_TIME_SEC=$(date -d "$END_TIME" +%s)
  ELAPSED_SEC=$((END_TIME_SEC-START_TIME_SEC))

  # No time supplied or elapsed time exceded.
  if [ -z "$FILTER_MINUTES" -o "$ELAPSED_SEC" -gt "$FILTER_SECONDS" ]
  then
    ## Remove $ELAPSED_SEC from here to not print elapsed seconds.
    echo $TEST_NAME $FILENAME $ELAPSED_SEC
  fi
done

información relacionada