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:
awk
utiliza 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 yawk
la lee en algunas variables donde usodate
para 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