IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration système Discussion :

[bash-script] statistiques de charge CPU + mémoire


Sujet :

Administration système

  1. #21
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 39
    Points : 24
    Points
    24
    Par défaut
    j'ai un peu avancé de mon coté et trouvé une solution intermédiaire pour extraire la valeur de charge cpu

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     basecpu=`awk 'NR==1 {print $10 } ; '  "$ficlog" `
     basecpu=`echo $basecpu | sed s/"1 : "/""/g | sed s/","/""/g`
    ça fonctionne, mais comme je fais ça sur 2 lignes ce n'est pas viable pour la prochaine étape de mon script, besoin d'effectuer cette opération en 1 seule ligne

    j'ai regardé les liens que tu as mis : c'est tres complet, un peu trop meme, effet "aiguille dans une botte de foin"

    du coup j'ai fait qlq recherches sur la fonction sub et j'en ai profité pour supprimer le numérotage de ligne parasite que j'avais rajouté, voici ou j'en suis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    basecpu=`awk -F"," 'NR==1 {sub ("load average :","",$3) ; initLA = $3 ; print initLA }'  "$ficlog"
    mon "sub" ne fait pas d'erreur mais malheureusement n'agit pas, quand je fais un echo de $basecpu j'obtiens :
    load average: 0.11
    alors que je voudrais juste avoir le "0.11"

  2. #22
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 39
    Points : 24
    Points
    24
    Par défaut
    j'avance un peu, je suis parvenu à faire fonctionner "sub" pour récupérer les valeurs initiales de cpu et mémoire avec une seule ligne de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    basecpu=`awk -F"," 'NR==1 {sub ("^................","",$3); initA = $3 ; print initA }'  "$ficlog" `
    baseram=`awk -F"," 'NR==2 {sub ("^...","",$2);  sub ("k used","",$2)  ; initB=$2 ; print initB } '  "$ficlog" `
    -------------

    maintenant je bute sur la partie calcul...
    pour rappel voici à quoi ressemble le fichier log :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    top - 17:59:42 up 14:08,  2 users,  load average: 0.11, 0.35, 0.46
    Mem:   1507696k total,   970232k used,   537464k free,   112736k buffers
    top - 17:59:42 up 14:08,  2 users,  load average: 1.70, 0.68, 0.57
    Mem:   1507696k total,   970232k used,   537464k free,   112736k buffers
    top - 17:59:43 up 14:08,  2 users,  load average: 1.70, 0.68, 0.57
    Mem:   1507696k total,   971024k used,   536672k free,   112744k buffers
    top - 17:59:44 up 14:08,  2 users,  load average: 1.70, 0.68, 0.57
    Mem:   1507696k total,   971240k used,   536456k free,   112744k buffers
    top - 17:59:44 up 14:08,  2 users,  load average: 1.70, 0.68, 0.57
    Mem:   1507696k total,   971736k used,   535960k free,   112744k buffers
    top - 17:59:45 up 14:08,  2 users,  load average: 1.70, 0.68, 0.57
    Mem:   1507696k total,   971744k used,   535952k free,   112744k buffers
    top - 17:59:46 up 14:08,  2 users,  load average: 1.70, 0.68, 0.57
    Mem:   1507696k total,   972000k used,   535696k free,   112752k buffers
    top - 17:59:46 up 14:08,  2 users,  load average: 1.70, 0.68, 0.57
    Mem:   1507696k total,   973760k used,   533936k free,   112752k buffers
    top - 17:59:47 up 14:08,  2 users,  load average: 3.65, 1.10, 0.70
    Mem:   1507696k total,   971644k used,   536052k free,   112760k buffers
    top - 17:59:48 up 14:08,  2 users,  load average: 3.65, 1.10, 0.70
    Mem:   1507696k total,   970484k used,   537212k free,   112760k buffers
    le but est (pour chaque ligne) de :
    - récupérer la valeur de "load average" dans une variable (initCPU)
    - faire la soustraction (initCPU-initA)
    - envoyer le résultat dans un nouveau fichier log définitif

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    awk -F"," '/load average:/ { sub ("^................","",$3); initCPU=$3 ; initFINCPU=$initCPU-$initA ; print initFINCPU }' "$ficlog"
    sur le papier c'est sensé fonctionner, mais les résultats ne sont pas du tout ce que j'espérais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    0
    0
    0
    0
    0
    0
    0
    0
    3.65
    3.65
    normalement je devrais obtenir 0 pour la premiere ligne, mais ensuite 1.59... et 3.54 pour la dernière

    si je ne met pas les "$" pour les variables, je récupère les valeurs initiales, bref, je patauge

    help please

  3. #23
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 376
    Points
    19 376
    Par défaut
    dans awk, il n'y a que les numéros des champs qui ont un signe dollar.

    à mon avis, ta méthode n'est pas bonne :
    quand top est tué, il y a quand même un délai, infime à notre échelle, qui permet à la mesure de la charge moyenne de revenir à la normale; alors la différence entre les états avant et après la montée en charge sera insignifiante.
    Je m'intéresserais davantage à la moyenne des valeurs retournée par top ? et/ou la valeur maximum pour le load average et pour Mem: xxxk used
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #24
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 39
    Points : 24
    Points
    24
    Par défaut
    merci pour ta remarque. ceci étant ce qui m'intéressait était une prise de mesure représentative pour toute la durée du test. vu que la valeur TOP de cpu est une moyenne sur les 60 dernières secondes, même si cette valeur décroit un peu sur la fin ce n'est pas gênant pour mes résultat (sous réserve qu'un autre détail m'échappe bien entendu)

    j'ai finalement réussit à faire ma sauce tout seul la nuit dernière, non sans mal j'avoue

    certes mon script n'est surement pas à la hauteur d'un vrai pro en bash-script, mais vu qu'en septembre dernier je n'y connaissais rien et n'y avait jamais touché, je suis plutot fier de moi. de plus je m'oriente vers un job en développement Java, mais cette expérience en bash aura tout de même été enrichissante

    je remercie tous ceux qui m'ont aidé lorsque j'étais bloqué pour leurs cnseils avisés


    ci-dessous mon script final
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
     
    #!/bin/bash
     
     
    #################################################
    ## Fonction 0 - menu d'accueil, choix du serveur
    #################################################
     
    function 0_accueil {
    clear
    echo -e " Script de projet Mod21 - session 2011-2012 - XXXXXXXXXXXXXXX"
    echo -e " Test de montée en charge sur Apache et Lighttpd \n"
    echo "  ***  Quel serveur voulez-vous tester ? ***"
    echo " 1 - serveur Apache seulement"
    echo " 2 - serveur Lighttpd seulement"
    echo " 3 - serveur Apache + Lighttpd"
    echo " 4 - Quitter le script"
    echo ""
    echo " >> Entrez votre choix :"
     
    read choixmenu					
    case $choixmenu in
      1) 	port=80
    	serveur="apache"
    	echo -e "Vous avez sélectionné un test sur le serveur $serveur (port n° $port) \n"
      	1_nbuser ;;
     
      2) 	port=8080 
    	serveur="lighttpd"
    	echo -e "Vous avez sélectionné un test sur le serveur $serveur (port n° $port) \n"
      	1_nbuser ;;
     
      3) 	port=80
    	port2=8080
    	serveur="apache"
    	serveur2="lighttpd" 
    	echo -e "\n Vous avez sélectionné un test sur le serveur $serveur (port n° $port)"
    	echo -e " et sur le serveur $serveur2 (port n° $port2) \n"
    	1_nbuser ;;	
     
      4) 	exit ;;
     
      *) 	0_accueil ;;
     
    esac
    }
     
    #################################################
    ## Fonction 1 - menu nombre d'utilisateurs
    #################################################
     
    function 1_nbuser {
    echo -e "  *** Combien d'utilisateurs voulez-vous simuler ? ***"
    echo " >> Entrez un nombre entier :"
    read choixuser	
     
    ## test si la valeur entrée est bien de type entier et supérieur à 0
    [ $choixuser -eq 0 ] 2> /dev/null			
    if [  $? -eq 0 -o $? -eq 1 ] ; then
    	if [ $choixuser -gt 0 ] ; then
    		usermax=$choixuser
    		2_nbconnex
    	else 	echo ""
    		echo "Erreur : vous devez entrer un nombre supérieur à zéro"
    		1_nbuser
    	fi
     
    else 	echo ""
    	echo "Erreur : vous devez entrer un nombre entier"
    	echo "tapez [Enter] pour revenir au choix du nombre d'utilisateurs"
    	read
    	1_nbuser
    fi
    }
     
    #################################################
    # Fonction 2 - menu nombre de connexions serveur
    #################################################
     
    function 2_nbconnex {
    echo -e "\n Vous avez choisi de simuler $usermax utilisateurs \n"
    echo -e "  *** Combien de connexions au serveur par utilisateur ? *** "
    echo " >> Entrez un nombre entier :"
    read choixconnex
     
    ## test si la valeur entrée est bien de type entier et supérieur à zéro
    [ $choixconnex -eq 0 ] 2> /dev/null			
    if [  $? -eq 0 -o $? -eq 1 ] ; then
    	if [ $choixconnex -gt 0 ] ; then
    		conmax=$choixconnex
    		3_delai
    	else	echo ""
    		echo "Erreur : vous devez entrer un nombre supérieur à zéro"
    		2_nbconnex
    	fi
     
    else	echo ""
    	echo "Erreur : vous n'avez pas entré le nombre de connexions"
    	echo "tapez [Enter] pour revenir au choix du nombre de connexions serveur"
    	read
    	2_nbconnex
    fi
    }
     
    #################################################
    # Fonction 3 - délai de sleep
    #################################################
     
    function 3_delai {
    echo -e "\n Vous avez choisi de simuler $conmax connexions \n"
    echo -e " Le délai de sleep correspond au temps d'attente entre chaque connexion de nouvel utilisateur"
    echo -e "  *** voulez-vous modifier ce délai ? (défaut 1 sec) ***"
    echo "1 - oui"
    echo "[Enter] si vous ne voulez pas le modifier"
    echo ""
    echo " >> Entrez votre choix :"
    read choixmodifdelai
     
    case $choixmodifdelai in
      1) 	echo -e "\n entrez de délai de sleep que vous désirez"
    	read delai
     
    	## test si la valeur entrée est bien de type entier
    	[ $delai -eq 0 ] 2> /dev/null			
    	if [  $? -eq 0 -o $? -eq 1 ] ; then
    		4_runtest
    	else	echo ""
    		echo "Erreur : vous devez enter le nombre de seconde de délai"
    		echo "tapez [Enter] pour revenir au choix du délai"
    		read
    		3_delai
    	fi
    	;;
     
      *)	delai=1
    	4_runtest
    	;;
    esac
    }
     
     
     
    #################################################
    # Fonction 4 - lancement du test
    #################################################
     
    function 4_runtest {
     
    clear
     
    # effacement des précédants fichiers log temporaires
    rm -f /siegelog/tmp/ficlog 2> /dev/null
    rm -f /siegelog/tmp/siegelog 2> /dev/null
    rm -f /siegelog/tmp/result.log 2> /dev/null
     
    # boucle de temporisation (10 sec dans la version finale)
    echo -e "\n\n MESSAGE : Afin d'effectuer des prises de mesure précises, veuillez patienter 10 sec \n Durant ce lapse de temps, merci de n'effectuer aucune autre tache sur la machine."
    sleep 10
    clear
     
    ########################################################################
    # **********************************************************************
    # test bi-serveur
    # **********************************************************************
    if [ $choixmenu -eq 3 ] ; then
    # path du fichier log final
    finallog=/siegelog/siege--server-$serveur-$serveur2--users-$usermax--connx-$conmax.log
     	echo "Récapitulatif des paramètres du test" >> $finallog
    	echo -e " - $usermax utilisateurs simulés" >> $finallog
    	echo -e " - $conmax connexions par utilisateur" >> $finallog
    	echo -e " - délai de sleep : $delai seconde \n" >> $finallog
    	echo -e "initialisation du test, veuillez patienter... \n"
     
    #       ****************************************************************
    	echo -e "****** serveur APACHE ******"
    	echo -e "****** serveur APACHE ******" >> $finallog
     
    # prise de la charge CPU initiale (uptime)
    basecpu=`uptime | awk -F"," '{ sub ("^................","",$4); print $4}'`
     
    # prise de la valeurs RAM utilisée (free)
    baseram=`free | awk -F" " '/(Mem):/{print $3 }'`
     
    # ***************************************************************
    # lancement de TOP en tache de fond - refresh 0.5 sec
    ficlog=/siegelog/tmp/ficlog
    top -d .5 -b | awk '/(load average|Mem):/{print >> Log}' Log="$ficlog"  &
    echo -e "\n prise de mesures avec TOP initialisé, démarrage de SIEGE "
     
    # ***************************************************************
    # lancement de SIEGE sur APACHE
    	siege -d$delai -r$conmax -c$usermax -l/siegelog/tmp/siegelog http://127.0.0.1:$port
     
    # Destruction du processus TOP
    pkill top
    # ***************************************************************
    # traitement des logs temporaires pour affichage console
    echo "valeur de base CPU = $basecpu %"
    echo "valeur de base Mémoire utilisée = $baseram ko"
     
    # formatage des données sur 1 seule ligne + opération
    echo -e "\n charge CPU       ///       Mémoire utilisée"
    awk -F"," '/load average:/ { sub ("^................","",$4); initCPU=$4 }; 
    /Mem:/ { sub ("^..","",$2);  sub ("k used","",$2)  ; initB=$2 ;
     print (initCPU "   +" (initCPU-'"$basecpu"')" %    ///    "initB"   +" (initB-'"$baseram"')" ko")}' "$ficlog"
     
    # ***************************************************************
    # sauvegarde des logs temporaires dans le log final
     
    # stats siege
    echo -e "\n résultats du test \n" >> $finallog
    awk -F"," '/:/{print "Date : "$1; print "Transactions : "$2; print "Temps écoulé : "$3" secs"; print "Données transférées : "$4" MB"; print "Temps de réponse : "$5" secs"; print "Taux de transaction : "$6" trans/sec"; print "Débit : "$7" MB/sec"; print "Concurrence : "$8; print "Transactions réussies : "$9; print "Transactions échouées : "$10   }' /siegelog/tmp/siegelog  >> $finallog
     
    # stats cpu+ram
    echo -e "\n Données statistiques complètes" >> $finallog
    echo -e "\n valeur de base CPU = $basecpu % \n valeur de base Mémoire utilisée = $baseram ko \n" >> $finallog
    cat $ficlog >> $finallog
     
    echo -e "\n fin du test APACHE\n\n"
     
    #       ****************************************************************
    # boucle de temporisation (10 sec dans la version finale)
    echo -e "\n\n MESSAGE : Afin d'effectuer des prises de mesure précises, veuillez patienter 10 sec \n Durant ce lapse de temps, merci de n'effectuer aucune autre tache sur la machine."
    sleep 10
     
    	echo -e "-------------------------------------------------"
    	echo -e "\n\n-------------------------------------------------" >> $finallog
    	echo -e "****** serveur LIGHTTPD ******"
    	echo -e "****** serveur LIGHTTPD ******" >> $finallog
     
    # effacement des précédants fichiers log temporaires
    rm -f /siegelog/tmp/ficlog 2> /dev/null
    rm -f /siegelog/tmp/siegelog 2> /dev/null
    rm -f /siegelog/tmp/result.log 2> /dev/null
     
    # boucle de temporisation (60 sec dans la version finale)
    echo -e "\n MESSAGE : Afin d'effectuer des prises de mesure précises, veuillez patienter 10 sec \n Durant ce lapse de temps, merci de n'effectuer aucune autre tache sur la machine."
    sleep 10
     
    # prise de la charge CPU initiale (uptime)
    basecpu=`uptime | awk -F"," '{ sub ("^................","",$4); print $4}'`
     
    # prise de la valeurs RAM utilisée (free)
    baseram=`free | awk -F" " '/(Mem):/{print $3 }'`
     
    # ***************************************************************
    # lancement de TOP en tache de fond - refresh 0.5 sec
    ficlog=/siegelog/tmp/ficlog
    top -d .5 -b | awk '/(load average|Mem):/{print >> Log}' Log="$ficlog"  &
    echo -e "\n prise de mesures avec TOP initialisé, démarrage de SIEGE "
     
    # ***************************************************************
    # lancement de SIEGE sur LIGHTY
    	siege -d$delai -r$conmax -c$usermax -l/siegelog/tmp/siegelog http://127.0.0.1:$port2
     
    # Destruction du processus TOP
    pkill top
    # ***************************************************************
    # traitement des logs temporaires pour affichage console
    echo "valeur de base CPU = $basecpu %"
    echo "valeur de base Mémoire utilisée = $baseram ko"
     
    # formatage des données sur 1 seule ligne + opération
    echo -e "\n charge CPU       ///       Mémoire utilisée"
    awk -F"," '/load average:/ { sub ("^................","",$4); initCPU=$4 }; 
    /Mem:/ { sub ("^..","",$2);  sub ("k used","",$2)  ; initB=$2 ;
     print (initCPU "   +" (initCPU-'"$basecpu"')" %    ///    "initB"   +" (initB-'"$baseram"')" ko")}' "$ficlog"
     
    # ***************************************************************
    # sauvegarde des logs temporaires dans le log final
     
    # stats siege
    echo -e "\n résultats du test \n" >> $finallog
    awk -F"," '/:/{print "Date : "$1; print "Transactions : "$2; print "Temps écoulé : "$3" secs"; print "Données transférées : "$4" MB"; print "Temps de réponse : "$5" secs"; print "Taux de transaction : "$6" trans/sec"; print "Débit : "$7" MB/sec"; print "Concurrence : "$8; print "Transactions réussies : "$9; print "Transactions échouées : "$10   }' /siegelog/tmp/siegelog  >> $finallog
     
    # stats cpu+ram
    echo -e "\n Données statistiques complètes"  >> $finallog
    echo -e "\n valeur de base CPU = $basecpu % \n valeur de base Mémoire utilisée = $baseram ko \n" >> $finallog
    cat $ficlog >> $finallog
     
    sleep 5
     
    echo -e "\n fin du test LIGHTY\n\n"
     
     
    	echo -e "-------------------------------------------------"
    	exit
    ########################################################################
    # **********************************************************************
    # test mono-serveur
    # **********************************************************************
    else
    # path du fichier log final
    finallog=/siegelog/siege--server-$serveur--users-$usermax--connx-$conmax.log
     	echo "Paramètres du test" >> $finallog
    	echo -e " - serveur testé : $serveur" >> $finallog
    	echo -e " - $usermax utilisateurs simulé" >> $finallog
    	echo -e " - $conmax connexions" >> $finallog
    	echo -e " - délai de sleep : $delai  \n" >> $finallog
    	echo -e "initialisation du test, veuillez patienter... \n"
     
     
    # prise de la charge CPU initiale (uptime)
    basecpu=`uptime | awk -F"," '{ sub ("^................","",$4); print $4}'`
     
    # prise de la valeurs RAM utilisée (free)
    baseram=`free | awk -F" " '/(Mem):/{print $3 }'`
     
    # ***************************************************************
    # lancement de TOP en tache de fond - refresh 0.5 sec
    ficlog=/siegelog/tmp/ficlog
    top -d .5 -b | awk '/(load average|Mem):/{print >> Log}' Log="$ficlog"  &
    echo -e "\n prise de mesures avec TOP initialisé, démarrage de SIEGE "
     
    	siege -d$delai -r$conmax -c$usermax -l/siegelog/tmp/siegelog http://127.0.0.1:$port 
    	echo -e "-------------------------------------------------"
     
    # Destruction du processus TOP
    pkill top
    # ***************************************************************
    # traitement des logs temporaires pour affichage console
    echo "valeur de base CPU = $basecpu %"
    echo "valeur de base Mémoire utilisée = $baseram ko"
     
    # formatage des données sur 1 seule ligne + opération
    echo -e "\n charge CPU       ///       Mémoire utilisée"
    awk -F"," '/load average:/ { sub ("^................","",$4); initCPU=$4 }; 
    /Mem:/ { sub ("^..","",$2);  sub ("k used","",$2)  ; initB=$2 ;
     print (initCPU "   +" (initCPU-'"$basecpu"')" %    ///    "initB"   +" (initB-'"$baseram"')" ko")}' "$ficlog"
     
    # ***************************************************************
    # sauvegarde des logs temporaires dans le log final
     
    # stats siege
    echo -e "\n résultats du test \n" >> $finallog
    awk -F"," '/:/{print "Date : "$1; print "Transactions : "$2; print "Temps écoulé : "$3" secs"; print "Données transférées : "$4" MB"; print "Temps de réponse : "$5" secs"; print "Taux de transaction : "$6" trans/sec"; print "Débit : "$7" MB/sec"; print "Concurrence : "$8; print "Transactions réussies : "$9; print "Transactions échouées : "$10   }' /siegelog/tmp/siegelog  >> $finallog
     
    # stats cpu+ram
    echo -e "\n Données statistiques complètes" >> $finallog
    echo -e "\n valeur de base CPU = $basecpu % \n valeur de base Mémoire utilisée = $baseram ko \n" >> $finallog
    cat $ficlog >> $finallog
     
     
    	exit
    fi
    }
     
    #################################################
    # DEMARRAGE du script
    #################################################
    service httpd start
    service lighttpd start
    0_accueil

  5. #25
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 376
    Points
    19 376
    Par défaut
    Il y a encore trop de chemins en dur, qui devraient être des variables.

    Il y a du code qui se répète, et qui devrait être des fonctions (même courtes) pour éviter de parcourir tout le script, en risquant d'oublier une modification, ou de faire une faute de frappe. Après, vu que c'est le même code : galère pour trouver où.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '{print; print;...}'
    ->
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '{printf("elem1: %s\nelem2: %s\nelem3: %s\n",variable,"item1","et cætera")}'
    Apporte un plus grand soin à l'indentation, des commandes awk aussi.
    Pour distinguer mes fonctions du reste du code, leur contenu est indenté en plus d'une "tabulation" (trois espaces).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    maFonction() {
       commande
       si commande
       alors
          autre
       finsi
    }
    De manière général, une ligne d'un script ne devrait pas excéder 80 caractères.

    Si tu as du texte formaté à afficher utilise printf plutôt que echo -e.


    Le script devrait remettre le système dans l'état dans lequel il était avant sa première exécution (=>ne pas laisser de fichiers temporaires).



    Bonne chance.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

Discussions similaires

  1. [WD15] Charge CPU et mémoire
    Par spamoi dans le forum WinDev
    Réponses: 9
    Dernier message: 29/08/2011, 16h21
  2. [débutant] Mémoire + Charge CPU JBOSS
    Par rin01 dans le forum Wildfly/JBoss
    Réponses: 2
    Dernier message: 11/03/2010, 17h36
  3. [linux] charge cpu et mémoire.
    Par heider dans le forum Général Python
    Réponses: 8
    Dernier message: 26/10/2007, 20h12
  4. Commandes pour charge disque / CPU / Mémoire
    Par arnaudperfect dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 26/07/2007, 21h35
  5. Charge CPU avec prog opengl + win32
    Par TibobiT dans le forum MFC
    Réponses: 2
    Dernier message: 12/05/2004, 19h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo