Changes between Version 1 and Version 2 of logTiempoReal


Ignore:
Timestamp:
Feb 17, 2014, 11:08:06 AM (10 years ago)
Author:
irina
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • logTiempoReal

    v1 v2  
    11= Cómo mostrar los mensajes de log en tiempo real =
    2 La página de log en tiempo real nos muestra cuatro espacios con informaciones diferentes:
     2Un script tiene varios pasos, voy mandando mensajes de lo que se está realizando y en algunas tareas me interesa mostrar la salida que da el comando al que llamo.
     3
     4La página de log en tiempo real nos muestra cuatro espacios con informaciones diferentes. Los mensajes de log del script se van acumulando en la zona intermedia y la salida del comando se muestra en la parte baja.
     5
     6[[Image(logTiempoReal.png)]]
     7
     8Cada una de las zonas toma como punto de partida un archivo de log que se guarda en el directorio /tmp del cliente. Nos interesan las dos últimas.
     9
     10|| Archivo                || Variable          || Zona                 ||
     11|| /tmp/session.log       || OGLOGSESSION      || Pasos del script     ||
     12|| /tmp/command.log       || OGLOGCOMMAND      || Salida comando.      ||
     13
     14Además tenemos:
     15
     16|| Archivo                               || Variable     || Función                                                ||
     17|| /opt/opengnsys/log/IP_client.log      || OGLOGFILE    || Archivo de log histórico que guarda el servidor        ||
     18|| /tmp/command.log.tmp                  || --           || Se obtiene aplicando el comando string a command.log   ||
     19
     20Al comenzar un script borramos los archivos que se muestra en la pantalla.
     21
     22En el caso que un script sea una subtarea que es llamada por otro script, conviene no borrar el script session.log. Por ejemplo si el script de deployImage llama a updateCache no me interesa borrar los pasos que se hayan hecho anteriormente pero sí la salida concreta del comando. En el código tendré:
     23
     24{{{
     25# Limpia los ficheros temporales usados como log de seguimiento para httpdlog
     26echo " " > $OGLOGCOMMAND
     27[ "$(ogGetCaller)" == "deployImage" ] || echo -n "" > $OGLOGSESSION;
     28}}}
     29
     30Los mensajes que quiero que salgan en la parte de los intermedia los monstraré así:
     31{{{
     32echo “Mensaje de log” | tee -a $OGLOGSESSION $OGLOGFILE
     33}}}
     34La salida de los comandos se redireccionan así:
     35
     36{{{
     37ogCopyFile REPO imagen.img CACHE /  2>&1 | tee -a $OGLOGCOMMAND
     38}}}
     39
     40Cuando quiero mostrar la salida de un error y salirme después:
     41{{{
     42ComandoAComprobar
     43[ $? == 0 ] || ogRaiseError $OG_ERR_XXX "paramentros" 2>&1 | tee -a $OGLOGSESSION $OGLOGFILE
     44exit ${PIPESTATUS[0]}
     45}}}
     46
     47Los errores definidos en opengnsys los podemos encontrar en /opt/opengnsys/client/etc/preinit/loadenviron.sh
     48
     49No conviene redireccionar hacía OGLOGCOMMAND la salida de los comandos/script que en su codigo interno envíen mensajes a OGLOGSESSION, para no duplicar los mensajes. Por ejemplo su desde el script deployImage llamo a updateCache y lo redirecciono a la salida de comandos.
     50{{{
     51updateCache 2>&1 | tee -a $OGLOGCOMMAND
     52}}}
     53Como update cache en su codigo interno manda mensajes a OGLOGSESSION estos se verán duplicados en las dos partes de la pantalla.
     54
     55== Código de la página de log en tiempo real. ==
     56La página del cliente que se encarga de mostrar el log de tiempo real es: /usr/lib/cgi-bin/httpd-log.sh
     57
     58{{{
     59#!/bin/bash
     60echo "Content-type: text/html"
     61echo ""
     62#echo "<html><head><meta http-equiv='Refresh' content='2,URL=./example3.sh'><title>Bash as CGI"
     63echo "<html><head><title>OpenGnsys Client</title></head><body>"
     64
     65echo "<h1> $(./httpd-runengine.sh 'ogEcho $MSG_HTTPLOG_NOUSE'  ) .</br>host $(hostname -s)</h1> "
     66
     67echo "<IFRAME SRC='bandwidth.sh' WIDTH=250 HEIGHT=90> <A HREF="bandwidth.sh">link</A> </IFRAME> "
     68echo "<IFRAME SRC='cache.sh'     WIDTH=590 HEIGHT=90><A HREF="cache.sh">link</a> </IFRAME><br>"
     69
     70echo "<IFRAME SRC='LogSession.sh' WIDTH=850 HEIGHT=230> <A HREF="LogSession.sh">link</A> </IFRAME>"
     71echo "<IFRAME SRC='LogCommand.sh' WIDTH=850 HEIGHT=280> <A HREF="LogCommand.sh">link</A> </IFRAME>"
     72}}}
     73
     74De las distintas partes de la pantalla se encargan los script:
     75 * http://$IP_cliente/cgi-bin/bandwidth.sh
     76 * http://$IP_cliente/cgi-bin/cache.sh
     77 * http://$IP_cliente/cgi-bin/LogSession.sh
     78 * http://$IP_cliente/cgi-bin/LogCommand.sh
     79
     80Mostramos las líneas de estos script que nos pueden interesar:
     81
     82'''bandwidth.sh'''
     83{{{
     84<meta http-equiv='Refresh' content='11,URL=./bandwidth.sh'>
     85echo "  DISK     ||   NET "
     86echo "Read:Write || Recv:Send "
     87echo $(tail -n1  /tmp/bandwidth)
     88}}}
     89
     90'''cache.sh'''
     91{{{
     92$(ls -lh /opt/opengnsys/cache/opt/opengnsys/images )"
     93}}}
     94
     95'''!LogSession.sh'''
     96{{{
     97<meta http-equiv='Refresh' content='5,URL=./LogSession.sh'>
     98echo "$(cat /tmp/session.log | uniq )"
     99}}}
     100
     101'''!LogCommand.sh'''
     102{{{
     103$(strings /tmp/command.log > /tmp/command.log.tmp)
     104...
     105NAME='trackloghead'
     106echo "$(egrep -v '%|sent|^Elapsed:\|^Total [Tt]ime:\|^-\|^|\|^bytes\|^\[' /tmp/command.log.tmp | uniq | head -n 15)"
     107...
     108NAME='tracklogtail'
     109echo "$(egrep '%|sent|^Elapsed:\|^Total [Tt]ime:\|^-\|^|\|^bytes' /tmp/command.log.tmp | uniq | tail -n 2)"
     110}}}
     111
     112Observamos que para mostrar la progresión del comando se filtra su salida con egrep, si algún comando no mostrará nada habría que revisar los patrones que se le pasan.
     113
     114
     115