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:
#!/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:
- coleta o load pelo
uptime
- aviza ao Zenity para atualizar o tooltip do icone com o valor coletado
- reescreve um arquivo de imagem SVG (arquivo textual baseado em XML) com o número de pontos proporcional ao load.
- 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
- Permitir configuração do usuário.
- Fazer outro bug report pra Lú propondo uma infra de menu pro icone de notificação.