1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
| function grep_hour
{
# Declarartion des variables
contexte=$(echo $1 |tr [:lower:] [:upper:])
instance=$(echo $2 |tr [:lower:] [:upper:])
heure_debut=$3
heure_fin=$4
type_log=$5
AAAA_MM_JJ=$6
date_du_jour=$(echo $(date '+%Y/%m/%d') | sed 's/\//-/g') # Date du jour au format AAAA-MM-JJ
# Traitement particulier du server.log
if [ ! "$date_du_jour" = "$AAAA_MM_JJ" ]; then
nom_log="$type_log*.log.$AAAA_MM_JJ.tar*"
else
nom_log="$type_log.log"
fi
if [ "$server" == "$7" ]; then
ssh=""
else
ssh="ssh -n $7"
$ssh find /$contexte/archivage/$instance/ /$contexte/log/tech/jonas/jonas$instance/ -type f -iname "$nom_log" 2> /dev/null |\
{ while read FICHIER; do # Debut de la boucle while
REPERTOIRE=$(dirname "${FICHIER}")
nom_de_log=$(basename "${FICHIER}")
if [ "$date_du_jour" = "$AAAA_MM_JJ" ]; then
DATE=$(echo $(date '+%d/%m/%Y'))
else
DATE=$(echo $nom_de_log | sed 's#.*\([0-9][0-9][0-9][0-9]\)-\([0-9][0-9]\)-\([0-9][0-9]\).*#\3/\2/\1#') # Extraction de la date du nom de fichier
fi
newdate=$(echo $DATE | sed 's/\//-/g') # Formatage de AAAA/MM/JJ en JJ-MM-AAA
# Choix de la commande cat ou gunzip -c suivant l'extension
if [[ "$nom_de_log" =~ .gz$ ]]
then z_cat="gunzip -c"
else z_cat=cat
fi
# Bornage horaire du log
$ssh $z_cat "$REPERTOIRE/$nom_de_log" | awk -F"[/ \\\][]" -v S="$DATE $heure_debut" -v E="$DATE $heure_fin" ' #Exemple -v S="10/12/2012 10:15" -v E="10/12/2012 11:30"
function dcmp(b) { #Parsing du log
if($4>b[3])return 1; # On compare d abord les annees ($4 et b[3]).
if($4<b[3])return -1; # Si elles sont differentes, on renvoie 1 ou -1
if($3>b[2])return 1; # Si elles sont egales, on compare les mois ($3 et b[2])
if($3<b[2])return -1; # S ils sont differents, on renvoie 1 ou -1
if($2>b[1])return 1; # S ils sont egaux, on compare les jours ($2 et b[1])
if($2<b[1])return -1; # S ils sont differents, on renvoie 1 ou -1
if($5>b[4])return 1; # S ils sont egaux, on compare les heures ($5 et b[4])
if($5<b[4])return -1; # Si elles sont differentes, on renvoie 1 ou -1
return 0; # Si elles sont egales, on renvoie 0
}
BEGIN{split(S, ds, "[/ ]"); split(E, de, "[/ ]") }
/^[[][0-9][0-9]\/[0-1][0-9]\/[[0-9][0-9][0-9][0-9] / { #Fait correspondre les lignes qui commencent par deux chiffres suivis par une barre oblique puis 0 ou 1 puis des chiffres puis un slash et enfin 4 chiffres (c est a*dire 1 ligne qui commence par une date au format 99/99/9999).
if(s&&dcmp(de)>=0) {print; exit} #si la date_de_depart deja trouvee (s est non vide / zero) et ate dans la ligne courante> = date_de_fin alors editee ligne actuelle et arreter le traitement.
if(!s&&dcmp(ds)<=0) {f=x;w=1}#si la date_de_debut n est pas encore trouvee (s nest pas initialisee) et la date dans la ligne actuelle <= date_de_debut, contenu vierge de la variable f et initialiser la variable w. f est un tampon qui contient toutes les lignes trouvees a*partir du debut du document.
if(!s&&dcmp(ds)>=0) {printf "%s",f; f=x; s=1 } #si les variables w et s ne sont pas initialisees coller la ligne courante dans le tampon de f. #si les variables w et s ne sont pas initialisees, coller la ligne courante dans le tampon de f.
}
!w&&!s {f=f $0 "\n"} # si le variable s n est pas initialisee editer la ligne courante.
s' > "/$contexte/diffusion/tmp/$7.$instance.$newdate.${heure_debut}H-${heure_fin}H.log"
echo "Le log $7.$instance.$newdateH${heure_debut}H-${heure_fin}H.log se trouve dans /$contexte/diffusion/tmp/"
OK=1; # Test fichier present
done;
[ "$OK" != "1" ] && echo -e "Il n'y a pas de log a la date du "$AAAA_MM_JJ""; # Test fichier absent
} # Fin de la boucle while
fi
} # Fin de la fonction grep_hour
# Comportement du script suivant le nombre de parametres
case $# in
1) if [ ! -f "$1" ]; then
echo -e "# Alimenter les 7 variables ci-dessous \n# contexte instance heure_debut heure_fin type_log date \n # "\
> $1 && echo -e "Merci de remplir le fichier "$1" :\nUne fois rempli, taper $(basename $0) "$1"\n appuyer sur ENTREE"
read -p ""
echo $REPLY vi $1
else
while read CONTEXTE INSTANCE HH_debut HH_fin type_log DATE
do
[ "${CONTEXTE:0:1}" = "#" ] && continue # Ignore les commentaires
[ -z "$CONTEXTE" ] && continue # Ignore les lignes vierges
grep_hour $CONTEXTE $INSTANCE $HH_debut $HH_fin $type_log $DATE # Traitement par la fonction grep_hour
done < $1
fi
;;
7) grep_hour $1 $2 $3 $4 $5 $6 $7 # Traitement des parametres par la fonction grep_hour
;;
8) echo -e "# Alimenter les 7 variables ci-dessous\n# contexte instance heure_debut heure_fin date" > $1 # creation du fichier $1 au choix
echo $2 $3 $4 $5 $6 $7 $8 >> "$1" # concatenation des variables dans $1
grep -v '^#' "$1" | # Omet les commentaires
while read CONTEXTE INSTANCE HH_debut HH_fin type_log DATE nom_serveur # Parse les parametres
do grep_hour $CONTEXTE $INSTANCE $HH_debut $HH_fin $type_log $DATE $nom_serveur # Traitement des parametres par la fonction grep_hour
done
;;
esac |
Partager