domingo, 14 de febrero de 2010

EEM, Show CPU

Posted by Nicolas | domingo, 14 de febrero de 2010 | Category: , |

Como continuación de lo visto en Embedded Event Manager (EEM), en esta ocasión se verá el uso de otras funciones que permitirán manipular valores del output de un comando. En particular se utilizarán:

El applet creado es (se explicará a continuación):

event manager applet CPU
event none sync yes
action 001 set first "0"
action 003 set third "0"
action 010 cli command "enable"
action 011 cli command "show processes cpu sorted 5sec | exclude 0.00% 0.00% 0.00% "
action 020 foreach line "$_cli_result" "\n"
action 030 regexp "([0-9]+)(%/)([0-9]+)" "$line" all first second third
action 031 if $_regexp_result eq 1
action 032 append output "Average total CPU utilization during last five seconds: $first \n"
action 033 append output "Average CPU utilization due to interrupts, during last five seconds: $third \n"
action 034 subtract $first $third
action 035 append output "Average CPU utilization due to processes, during last five seconds: $_result \n"
action 036 end
action 040 regexp "(one minute:) ([0-9]+)" "$line" all first second
action 041 if $_regexp_result eq 1
action 044 append output "Average total CPU utilization during last minute: $second \n"
action 045 end
action 050 regexp "(five minutes:) ([0-9]+)" "$line" all first second
action 051 if $_regexp_result eq 1
action 054 append output "Average total CPU utilization during last five minutes: $second \n\n"
action 073 else
action 074 regexp "#" "$line"
action 075 if $_regexp_result eq 0
action 076 append output "$line"
action 078 end
action 079 end
action 080 end
action 090 puts "$output"

Básicamente se señala que para el applet CPU no será gatillado por un evento en particular (event none) si no más bien deberá ser corrido con event manager run en la línea de comandos (CLI).

Luego se inicializan los valores de las variables $first y $third en 0 con set puesto que serán utilizadas para una operación matemática más adelante.

Con cli command se entra en modo proviligediado y se ejecuta show processes cpu ordenando los procesos de acuerdo a su porcentaje los últimos 5 segundos (sorted 5sec) y se exluyen aquellos que no han visto actividad en los últimos 5 minutos.

Luego se entra en un ciclo con foreach para cada línea (almacenada ahora en la variable $line) del comando ejecutado cuyo output se encuentra en la variable $_cli_result. La fragmentación por línea es básicamente por que eso se especificó como caracter delimitador, el salto de línea; "\n".

Las líneas ($line) serán examinadas con expresiones regulares con regexp para obtener algunos valores. Si existe match, la variable $_regexp_result tomará el valor de 1, de lo contrario 0. regexp permite extraer múltiples valores por línea al realizar la separación de los fragmentos con paréntesis como por ejemplo en; regexp "(one minute:) ([0-9]+)" "$line" all first second se busca la línea tenga la frase "one minute:" y a continuación un número. La variable $all toma el valor del fragmento completo, $first en este caso será sólo "one minute:" y $second el valor de interés que es variable.

Con los valores extraídos se pueden realizar operaciones matemáticas tales como subtract y add, el resultado es almacenado en la variable $_result.

Por último se va construyendo una variable ($output) a la que se agregan distintos fragmentos con append. Finalmente esta variable puede ser utilizada para diversos propósito, mandarla como contenido en un email (action mail) o simplemente imprimirla en pantalla con puts como este caso.

R2#event manager run CPU  

Average total CPU utilization during last five seconds: 30
Average CPU utilization due to interrupts, during last five seconds: 3
Average CPU utilization due to processes, during last five seconds: 27
Average total CPU utilization during last minute: 28
Average total CPU utilization during last five minutes: 15

PID Runtime(ms) Invoked uSecs 5Sec 1Min 5Min TTY Process
115 64256 172013 373 25.35% 24.53% 12.67% 0 IP Input
5 179700 22573 7960 0.55% 0.11% 0.07% 0 Check heaps
3 6200 28980 213 0.55% 0.17% 0.06% 0 Exec
179 256 47353531 0 0.31% 0.34% 0.32% 0 HQF Shaper Backg
38 12 59730 0 0.07% 0.00% 0.00% 0 Net Background
2 24 37928 0 0.00% 0.03% 0.02% 0 Load Meter
9 5040 122375 41 0.00% 0.01% 0.00% 0 OSPF-1 Hello
42 8 189640 0 0.00% 0.01% 0.00% 0 Per-Second Jobs
52 63236 3175 19916 0.00% 0.01% 0.00% 0 Per-minute Jobs
180 20 1896064 0 0.00% 0.01% 0.00% 0 RBSCP Background
303 12 1896076 0 0.00% 0.01% 0.00% 0 FR Broadcast Out

En total 2 comentarios:

  1. how about with no pipes?

  2. You mean on:
    action 011 cli command "show processes cpu sorted 5sec | exclude 0.00% 0.00% 0.00% "

    It would show you the full output instead of the filtered version. Be aware you need EEM 3.0 to run this script.


Leave a Reply