Preciso analisar um arquivo de log e informar o nome do teste se o tempo de execução for superior a um período específico (o usuário inserirá esse tempo, digamos que o script foi executado por mais de 30 minutos)
iniciar conjunto de testes de segurança Seg, 05 de setembro 00:16:30 PDT 2011: criando tópicos... Segunda-feira, 05 de setembro, 00:16:30 PDT 2011: começando... Segunda-feira, 05 de setembro, 00:16:31 PDT 2011: Relatório de resultados... Seg, 05 de setembro 00:16:31 PDT 2011: Gravando resultados em /space/builder/builds/macosx-64/HEAD/qa/scripts/results/add_role_user_security.xml add_role_user_security.xml: Aprovado Seg, 05 de setembro 00:16:31 PDT 2011: criando tópicos... Seg, 05 de setembro 00:16:31 PDT 2011: começando... Segunda-feira, 05 de setembro, 00:16:32 PDT 2011: Relatório de resultados... Seg, 05 de setembro 00:16:32 PDT 2011: Gravando resultados em /space/builder/builds/macosx-64/HEAD/qa/scripts/results/privilege.xml privilégio.xml: Aprovado Seg, 05 de setembro 00:16:32 PDT 2011: criando tópicos... Seg, 05 de setembro 00:16:32 PDT 2011: começando... Segunda-feira, 05 de setembro, 00:16:32 PDT 2011: Relatório de resultados... Seg, 05 de setembro 00:16:32 PDT 2011: Gravando resultados em /space/builder/builds/macosx-64/HEAD/qa/scripts/results/edit_role_user.xml edit_role_user.xml: Aprovado Seg, 05 de setembro 00:16:32 PDT 2011: criando tópicos... Seg, 05 de setembro 00:16:32 PDT 2011: começando... Segunda-feira, 05 de setembro, 00:16:33 PDT 2011: Relatório de resultados... Seg, 05 de setembro 00:16:33 PDT 2011: Gravando resultados em /space/builder/builds/macosx-64/HEAD/qa/scripts/results/remove_roles.xml remove_roles.xml: Aprovado Seg, 05 de setembro 00:16:33 PDT 2011: criando tópicos... Seg, 05 de setembro 00:16:33 PDT 2011: começando... Segunda-feira, 05 de setembro, 00:16:33 PDT 2011: Relatório de resultados... Seg, 05 de setembro 00:16:33 PDT 2011: Gravando resultados em /space/builder/builds/macosx-64/HEAD/qa/scripts/results/role_user1.xml role_user1.xml: Aprovado Seg, 05 de setembro 00:16:33 PDT 2011: criando tópicos... Seg, 05 de setembro 00:16:33 PDT 2011: começando... Segunda-feira, 05 de setembro, 00:16:34 PDT 2011: Relatório de resultados... Seg, 05 de setembro 00:16:34 PDT 2011: Gravando resultados em /space/builder/builds/macosx-64/HEAD/qa/scripts/results/role_user2.xml bug10611.xml: Aprovado conjunto de testes de segurança início do conjunto de testes Seg, 05 de setembro 00:18:52 PDT 2011: criando tópicos... Seg, 05 de setembro 00:18:52 PDT 2011: começando... Segunda-feira, 05 de setembro, 00:18:52 PDT 2011: Relatório de resultados... Seg, 05 de setembro 00:18:52 PDT 2011: Gravando resultados em /space/builder/builds/macosx-64/HEAD/qa/scripts/results/setup_script.xml setup_script.xml: Aprovado Seg, 05 de setembro 00:18:52 PDT 2011: criando tópicos... Seg, 05 de setembro 00:18:52 PDT 2011: começando... Segunda-feira, 05 de setembro, 00:18:58 PDT 2011: Relatório de resultados... Seg, 05 de setembro 00:18:58 PDT 2011: Gravando resultados em /space/builder/builds/macosx-64/HEAD/qa/scripts/results/bug_scripts.xml bug_scripts.xml: Aprovado Seg, 05 de setembro 00:18:58 PDT 2011: criando tópicos... Seg, 05 de setembro 00:18:58 PDT 2011: começando... Segunda-feira, 05 de setembro, 00:18:58 PDT 2011: Relatório de resultados... Seg, 05 de setembro 00:18:58 PDT 2011: Gravando resultados em /space/builder/builds/macosx-64/HEAD/qa/scripts/results/loadtime_namespace.xml [Erro fatal] loadtime_namespace.xml:11:25: O destino da instrução de processamento correspondente a "[xX][mM][lL]" não é permitido. Não foi possível analisar loadtime_namespace.xml: Executando o utilitário diff para comparar... rm -f ./scripts/diffs/loadtime_namespace.xml loadtime_namespace.xml: aprovado Seg, 05 de setembro 00:19:01 PDT 2011: criando tópicos... Seg, 05 de setembro 00:19:01 PDT 2011: começando... Segunda-feira, 05 de setembro, 00:19:01 PDT 2011: Relatório de resultados... Seg, 05 de setembro 00:19:01 PDT 2011: Gravando resultados em /space/builder/builds/macosx-64/HEAD/qa/scripts/results/string_script.xml string_script.xml: aprovado suíte de testes
O usuário executará o script passando o tempo de execução gasto pelo script
sh script_name.sh 60
E deve ter a lista de testes que levam mais de 60 minutos para serem executados
A saída deve ser como:
conjunto de testes de segurança add_role_user_security.xml privilégio do conjunto de testes de segurança.xml conjunto de testes de segurança remove_roles.xml conjunto de testes de segurança string_script.xml conjunto de testes para string_script.xml para conjunto de testes setup_script.xml
Responder1
O código na parte inferior desta resposta faz o que você pediu e funciona com base no exemplo fornecido.
Descrição:
Funciona basicamente em duas etapas:
awk
usa expressões regulares e variáveis de estado para determinar a transição entre arquivos e blocos de suíte de testes. Ele gera uma lista delimitada por barras verticais onde cada linha tem o nome do conjunto de testes, arquivo de teste, horário de início e término.while IFS="|" read ...
part pega a saída delimitada por canal eawk
lê-a em algumas variáveis que eu usodate
para converter carimbos de data / hora em segundos desde a época e, em seguida, calcula a diferença e compara-a com o valor de entrada.
O código não faz muito em termos de validação, então você mesmo terá que adicioná-lo.
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