[gull] Truc et astuces: realtime et offset: une quasi seconde nulle

felix felix at f-hauri.ch
Mon Mar 5 09:23:08 CET 2012


On Wed, Feb 29, 2012 at 01:48:16PM +0100, Daniel Cordey wrote:
> On Tue, 28 Feb 2012 19:14:40 +0100 - felix <felix at f-hauri.ch> wrote:
> 
> > Ce n'est pas forcement très utile à priori, mais bon à savoir...
> Ou... mais j'avoue que je ne comprends pas tres bien le but... Tu peux
> expliquer ?
Volontier.

> Mais c'est quoi une 'quasi-seconde' ?

0,97 seconde, ce n'est pas une seconde, mais presque...
Et elle est nulle car si tu ``date +%s'' avant et après,
la soustraction donne ``0''.

> J'ai surtout l'impression que c'est une demonstration de ce qu'il ne
> faut justement pas faire en shell,
Oui, et non..
En terme d'administration et de monitoring, voire de debugging, il peut
être intéressant de maitriser un ``début de seconde''.

En l'occurence, je cherchais à suivre une opération (debuging) entre
un script PHP, une base de données et une routine triguée par un
effet du premier script. Au travers de logs apache, syslog et mysql...
(serveur en prod avec un bon nombre de connexions chaque secondes)

Sachant que si je déclanche une opération vers la fin d'une seconde,
les logs seront plus éparpillés que si je parvient à déclancher
l'opération au début d'une seconde (il y aurra alors même des chances
pour que toutes les opérations se fassent dans la même seconde, ce qui
simplifiera considérablement les recherches).

Par ailleur,

J'ai déjà constaté que le shell permet facilement une grande précision
dans le suivi d'un script, j'utilise déjà bcp, pour des scripts ``à
tiroirs'' la petite routine suivante:

(Petite faiblesse: la routine ``elap'' ci-dessous coûte ~40ms,
 on doit pouvoir mieux faire!
 Toutes suggestions sont bienvenues!!! ;-) 

#!/bin/bash

elap() {
    NOW=($(</proc/uptime))
    echo $NOW-$LAST $@ |
        bc -l |
        xargs printf "%9.2f "
    LAST=$NOW
}
export NOW=($(</proc/uptime))
export FIRST=$NOW LAST=$NOW

# export OBJECTS...
# do_first_operation()...

elap
echo "For first operation"

# for second_step in $OBJECTS;do
#   second step
#   done

elap
echo "For second step"

date +"%a %d %b %Y, %T - End of script $0"

printf "%9.2fs for doing all the job for %d objects.\n\n" \
        $(echo $LAST-$FIRST | bc -l) ${#OBJECTS}

--
 Félix Hauri  -  <felix at f-hauri.ch>  -  http://www.f-hauri.ch


More information about the gull mailing list