#!/usr/bin/perl -w
#
# Donne l'utilisation de chacun des CPUs
# d'une machine multiprocesseur
# 
# Version 0.03
#
# Pierre Bauduin
# le 21 avril 2007
#
#%# family=auto
#%# capabilities=autoconf

# Je détermine le nombre de processeurs
$NOMBRE_DE_PROCESSEURS = `/bin/grep processor /proc/cpuinfo | /usr/bin/wc -l`;

# DEBUG
#printf(" DEBUG: Nombre de processeurs: $NOMBRE_DE_PROCESSEURS\n");

if ( $ARGV[0] and $ARGV[0] eq "autoconf")
{
	print "yes\n";
	exit 0;
}


if ( $ARGV[0] and $ARGV[0] eq "config" )
{
    print "graph_title CPU usage\n";
    print "graph_args --base 1000 -r --lower-limit 0 --upper-limit 100\n";
    print "graph_vlabel %\n";
    print "graph_scale  no\n";
    print "graph_info CPU usage for several processors\n";
    for ( $i=0 ; $i < $NOMBRE_DE_PROCESSEURS ; $i++ ) 
	{
        print "cpu$i.label cpu$i\n";
        print "cpu$i.draw LINE2\n";
	}
    exit 0;
}


# Je dois mettre la langue à C (anglais) sinon j'ai des résultats
# de la forme 93,42. Dans ce cas la soustraction 100 - 93,42 me
# donne un nombre entier et pas un nombre avec deux décimales
$ENV{LANG} = "C";

for ( $i=0 ; $i < $NOMBRE_DE_PROCESSEURS ; $i++ ) 
	{
	# Numéro de mon processeur: c'est $i
	$NUMERO_CPU=$i;

	# Nom du processeur, par exemple cpu0:
	$NOM_CPU="cpu" . $NUMERO_CPU;

	$maligne=`/bin/grep $NOM_CPU /proc/stat`;

	# Je substitue:
	# espaces:
	$maligne =~ s/\ \ */ /g;

	# Je calcule le temps CPU
	my (undef, $USER_TIME_CE_CPU, $NICE_TIME_CE_CPU, $SYSTEM_TIME_CE_CPU, $IDLE_TIME_CE_CPU) = split(/ /, $maligne);

	$TOTAL_TIME_CE_CPU=$USER_TIME_CE_CPU + $NICE_TIME_CE_CPU + $SYSTEM_TIME_CE_CPU + $IDLE_TIME_CE_CPU;
	$POURCENTAGE_IDLE=( 100 * $IDLE_TIME_CE_CPU / $TOTAL_TIME_CE_CPU);
	$POURCENTAGE_UTILISATION = 100 - $POURCENTAGE_IDLE;

	$RESULTAT_CE_CPU=$POURCENTAGE_UTILISATION;
	print "$NOM_CPU.value $RESULTAT_CE_CPU\n";
	}

# vim:syntax=perl

