.
Aurium.Colivre.Coop.br Esse site é Legal Demais para Internet Explorer

Aurium :: LoadAverageNotifier

Últimas blogadas:

%HEADLINES{"http://softwarelivre.org/aurium/blog/feed" refresh="600" header="SoftwareLivre.org" limit="15" format=" * $title" }% %HEADLINES{"http://cirandas.net/aurium/blog/feed" refresh="600" header="Cirandas.net" limit="15" format=" * $title" }%



The Load Average Notifier is a bash script application that uses Zenity to show the current machine load on your desktop notification area. See how it looks like:

ScreenShot of Load Average Notifier

#!/bin/bash

# Load Average Notifier - Version 0.9
# Copyright 2007 Aurelio A. Heckert <aurium#gmail-com>
#
# This software draw and updates a icon on the notification
# area, showing a lot of dots representing the machine load.
#
# This is a Free Software relized under the terms of
# the GNU-GPL: http://www.gnu.org/licenses/gpl-3.0.html

# create a temp dir:
dir=$( mktemp -d )
svg=$dir/icon.svg
style="style='fill:#B00; stroke:none'"
# load divisor = ( <load to full> * 1000 ) / <num of dots>
ldiv=$(( ( 5 * 1000 ) / 23 ))
# A 5.0 load average will full the notification dots area.

trap "rm -rf $dir; exit" EXIT INT QUIT TERM

while sleep 4; do
  load=$(
    uptime | grep 'load average:' |
    sed 's/.*load average: \(.*\)$/\1/'
  )
  echo "tooltip:Load Average: $load"
  l1Min=$((  $( echo -n $load | cut -d, -f1 | sed 's/^\s*[0\.]*//; s/\.//' )0 / ldiv ))
  l5Min=$((  $( echo -n $load | cut -d, -f2 | sed 's/^\s*[0\.]*//; s/\.//' )0 / ldiv ))
  l15Min=$(( $( echo -n $load | cut -d, -f3 | sed 's/^\s*[0\.]*//; s/\.//' )0 / ldiv ))
  o=0
  [ $l1Min -lt 4 -a $l5Min -lt 4 -a $l15Min -lt 4 ] && o=$(( 5 - $l1Min ))
  echo "<svg width='200' height='200'>
  <circle cx='100' cy='100' r='80' opacity='0.$o'
          style='fill:none; stroke:#E80; stroke-width:20px' />" > $svg
  for y in 2 3 1 4 0; do
   for x in 3 4 2 5 1; do
    if [ ! \( $x = 1 -a $((y%2)) = 1 \) -a $l15Min -gt 0 ]; then
     echo "<circle cx='$(((40*x)-20-((y%2)*20)))' cy='$(((40*y)+20))' r='17'
       opacity='0.25' $style />" >> $svg
     let l15Min--
    fi
    if [ ! \( $x = 1 -a $((y%2)) = 1 \) -a $l5Min -gt 0 ]; then
     echo "<circle cx='$(((40*x)-20-((y%2)*20)))' cy='$(((40*y)+20))' r='17'
       opacity='0.3' $style />" >> $svg
     let l5Min--
    fi
    if [ ! \( $x = 1 -a $((y%2)) = 1 \) -a $l1Min -gt 0 ]; then
     echo "<circle cx='$(((40*x)-20-((y%2)*20)))' cy='$(((40*y)+20))' r='17'
       opacity='1' $style />" >> $svg
     let l1Min--
    fi
   done
  done
  echo "</svg>" >> $svg
  # Send a icon update command to the zenity notification:
  echo icon:$svg
done| zenity --notification --text="Load Average" --listen


Como funciona

A cada 4 segundos (isso deverá ser configurável) temos um ciclo que atualiza o icone de notificação. O ciclo segue essa sequencia:
  1. coleta o load pelo uptime
  2. aviza ao Zenity para atualizar o tooltip do icone com o valor coletado
  3. reescreve um arquivo de imagem SVG (arquivo textual baseado em XML) com o número de pontos proporcional ao load.
  4. aviza ao Zenity para atualizar o icone.

O Load Average Notifier representa as 3 medias de loading informadas pelo sistema, com tons diferentes para cada medida. Todos os pontos seguem a mesma ordem de criação, o loading do último minuto é o mais opaco e sobrepõe os outros, o loading dos últimos 15 minutos é o mais transparente. O loading do último minuto tem apresentação privilegiada, você só verá os pontos de tonalidade baixa caso o histórico dos últimos 5 e 15 minutos tiverem um valor maior que a carga atual.

Para saber mais sobre Load Average:

TODO

DiggThis

Copyright © 2004 - 2019 Aurélio A. Heckert
Conteúdo licenciado sob Creative Commons by-nc-sa