Commit d48ceaef authored by Didier Cadiou's avatar Didier Cadiou
Browse files

1ere version, non completement fonctionnelle, qui remplace les 5 colonnes...

1ere version, non completement fonctionnelle, qui remplace les 5 colonnes 'lignex' dans la table tasks, par une seule 'output'.
cela corrige certaines erreur anormalement ignorées
Attention, en l'état le script n'arrive plus à mettre à jour 'duration' et 'classname'
parent a4355ee7
Loading
Loading
Loading
Loading
+37 −41
Original line number Diff line number Diff line
@@ -38,30 +38,25 @@ do
echo "Analyse de $f"
# date du fichier de log :
d=$(ls -l $f | cut -d ' ' -f 6,7,8)

# 1. extraction des lignes importantes (egrep ...)
# 2. remplacement des sauts de lignes par des séparateur de colonnes (tr ...)
# 3. insertion de saut de lignes avant chaque 'Execute' (sed ...) pour avoir une ligne par exécution et suppression de la 1ere ligne vide (sed ...)
# 4. réordonnancement des colonnes sur la ligne (awk ...)
#
#   Par exemple :
#Execute scheduled task: Suppression des comptes utilisateur non confirmés (core\task\delete_unconfirmed_users_task)
#... started 00:01:09. Current memory use 22.1Mo.
# .... Exception....
#... used 0.00074315071105957 seconds
#Scheduled task complete: Suppression des comptes utilisateur non confirmés (core\task\delete_unconfirmed_users_task)
#
#   Devient
#Execute scheduled task: ___;... started 00:01:09 ___;... exception ....; ... used 0.00 ___;Scheduled task complete: ___
#
# 5. insertion du nom de fichier de log et de sa date en début de ligne (sed "s/^...) afin d'avoir 2 colonnes supplémentaires 
# 6. ajout de colonnes vides en fin de ligne
egrep '(Execute.* task:|^....started|Exception|(^|[ ,;:.])[E|e]rror[ s,;:.]|used.*second|^Scheduled task|^Adhoc task)' $f | \
tr '\n' ';' | \
# 2. substitution de caracteres remplacement des sauts de lignes \x10 par des \x13
# 3. substitution des quotes \x22 par d'autres \xab (\253 en octal)
# 4. insertion de saut de lignes avant chaque 'Execute' (sed ...) pour avoir une ligne par exécution et suppression de la 1ere ligne vide (sed ...)
# 5. suppression de la 1er ligne
# 6. insertion du nom de fichier de log et de sa date en debut de ligne (2 ier champ dans le csv)
# 7. awk pour mettre entre quote le 3ieme champs (output) et créer autant de champs vides que necessaire ensuite
# 8. restauration des quotes, mais avec échappement '\"'
# 9. restauration des sauts de lignes
cat $f | \
tr '\n' '\r' | \
tr '"' '\253' | \
sed 's/Execute /\n/g' | \
sed '1d' | \
awk -F';' '{pb=""} tolower($0)~/(error|exception)/ {pb=$3} {print $1";"$2";"pb";"$(NF-2)";"$(NF-1)}' | \
sed "s/^/$f;$d;/" | \
sed "s/\$/;;;;;;;;/"  >> $CSV
awk -F';' '{print $1";"$2";\""$3"\";;;;;;;;"}' | \
sed 's/\xab/""/g' | \
sed 's/\r/\n/g' >> $CSV
echo >> $CSV
done

@@ -85,11 +80,7 @@ sqlite3 $BDD << eof
create table tasks(
	file text,
	date text,
	ligne1 text,
	ligne2 text,
	ligne3 text,
	ligne4 text,
	ligne5 text,
	output text,
	type text,
	classname text,
	started text,
@@ -103,67 +94,72 @@ create table tasks(
-- type
update tasks 
set type = 'scheduled'
where ligne1 like 'scheduled%';
where output like 'scheduled%';
update tasks 
set type = 'adhoc'
where ligne1 like 'adhoc%';
where output like 'adhoc%';

-- classname
update tasks 
set classname = trim(
	substr(
		ligne1,
		instr(ligne1, '('))
		output,
		instr(output, '('))
	, '()')
where type = 'scheduled';
update tasks 
set classname = replace(ligne1, 'adhoc task: ', '')
set classname = replace(output, 'adhoc task: ', '')
where type = 'adhoc';

-- started
update tasks 
set started = substr(
	substr(ligne2, 
	substr(output, 
		1, 
		instr(ligne2, '. Current')-1),
		instr(output, '. Current')-1),
	-8);

-- duration
update tasks 
set duration = replace(replace(ligne4, ' seconds', ''), '... used ', '');
set duration =substr(
	substr(output, 
		1, 
		instr(output, ' seconds')-1),
	-20);
-- set duration = replace(replace(output, ' seconds', ''), '... used ', '');
update tasks
set duration = null
where not ligne4 like '%second%';
where not output like '%second%';

-- stopped
update tasks 
set stopped = time(started, '+' || duration || ' seconds');
update tasks
set stopped = null
where not ligne4 like '%second%';
where not output like '%second%';


-- failed
update tasks 
set failed = 0
where ligne5 like '%task complete:%';
where output like '%task complete:%';
update tasks 
set failed = 1
where ligne5 like '%task failed:%';
where output like '%task failed:%';

-- has_exception
update tasks 
set has_exception = 0;
update tasks
set has_exception = 1
where ligne3 like '%Exception%';
where output like '%Exception%';

-- has_error
update tasks 
set has_error = 0;
update tasks
set has_error = 1
where lower(ligne3) like '%error%';
where lower(output) like '%error%';

.exit
eof
@@ -245,8 +241,8 @@ select t.date,
  a.sur
from tasks t -- les taches
  left join known_failures e 
    on t.ligne5 like e.filtre
      or t.ligne3 like e.filtre -- les erreurs typiques
    on t.output like e.filtre
      or t.output like e.filtre -- les erreurs typiques
  join (
    select date, classname, count(*) as sur
    from tasks