Creer une image avec les ressources du serveur

Petit nouveau ! | 2 Messages

01 oct. 2008, 14:37

Bonjour,

je suis debutant en programmation, et je voulais mettre sur mon serveur web, une image qui contiendrais le taux d occupation de mon processeur, ainsi que la quantité de memoire utilisee...

J'y suis parvenu, mais en utilisant un fichier programmé en Sh ( je suis sous linux ) qui genere un fichier php, le fichier php genere l image, puis le fichier php est supprimé. Le tout dans une boucle infinie, et comme ca mon image est continuellement regeneree.

Le soucis c est que quand je regarde mon code, je le trouve un peu "moche". J'ai eu beau chercher, je n'ai pas trouvé comment on peux recuperer les infos de ressources du serveur en php.

Voila l'image de sortie de mon script : ( le refresh se fait toutes les 2 / 3 secondes )
Image

Alors est-il possible de tout faire en php et se passer du Sh ?
Modifié en dernier par Nylan le 02 oct. 2008, 09:52, modifié 1 fois.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

01 oct. 2008, 15:16

Tu peux utiliser les fonctions exec() ou system() de php pour lui faire exécuter une commande système spécifique (genre connaitre le % de cpu et de mémoire utilisé). Du coup pas besoin de générer un fichier php toutes les 3 secondes.

Un simple appel au script php lui permettra d'interroger le système et de te générer l'image... reste plus ensuite qu'à définir depuis la page html ou apparait cette image, à à quel rythme tu veux qu'elle l'actualise (si c'est juste à la demande, lors de l'ouverture, où s'il faut coller un timeout ou un interval JS pour la recharger régulièrement :))
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 2 Messages

01 oct. 2008, 17:33

Merci beaucoup, ca m'a permis de rendre mon code bien plus "correct"

Par contre je trouve pas comment faire pour ajouter un symbole...

Code : Tout sélectionner

$titre2 = exec("echo 100.00 - $(sar 1 -P ALL | /usr/bin/tail -n 4| head -n1 | /bin/sed 's/\ \ */ /g' | cut -d' ' -f8 | /bin/sed 's/,/./g') | bc -l");
Ici par exemple, ca me renvois l'occupation processeur, par exemple 1.50 et je voudrais que ca ecrire 1.50 % , comment dans mon ancien code ( voir image )

J ai essayé de mettre des ' ou des " mais a chaque fois j ai des erreurs... :(

--------------------
EDIT
--------------------

Bon, j'ai fini par trouver une solution :)
Comme on m'a demandé, voici la source , c est pas tout joli joli, mais ça marche :)
Par rapport a ce code, pour que l image générée soit mise a jour régulièrement, j'ai simplement ajouté une boucle infinie pour que tout le code s exécute en boucle :)
Et je le lance dans mon serveur en faisait

Code : Tout sélectionner

php ./gen-beta3.php &
Comme ca, il n y a plus qu'a faire pointer les sites ou signatures sur uploads/memcpu.png
( http://nylanfr.homelinux.com/uploads/memcpu.png )


Code : Tout sélectionner

<?php header("Content-type: image/png"); $titre1 = "CPU"; $titre2 = exec("echo 100.00 - $(sar 1 -P ALL | /usr/bin/tail -n 4| head -n1 | /bin/sed 's/\ \ */ /g' | cut -d' ' -f8 | /bin/sed 's/,/./g') | bc -l"); $titre3 = "Memoire_Utilisee"; $titre4 = exec("echo $(atsar 1 -r | /usr/bin/tail -n 1| /bin/sed 's/\ \ */ /g' | cut -d' ' -f2 | /bin/sed 's/,/./g'| cut -d'M' -f1)-$(atsar 1 -r | /usr/bin/tail -n 1| /bin/sed 's/\ \ */ /g' | cut -d' ' -f5 | /bin/sed 's/,/./g'| cut -d'M' -f1)-$(atsar 1 -r | /usr/bin/tail -n 1| /bin/sed 's/\ \ */ /g' | cut -d' ' -f4 | /bin/sed 's/,/./g'| cut -d'M' -f1)-$(atsar 1 -r | /usr/bin/tail -n 1| /bin/sed 's/\ \ */ /g' | cut -d' ' -f3 | /bin/sed 's/,/./g'| cut -d'M' -f1) | bc -l"); $titre5 = "%"; $titre6 = "Mo"; $titre7 = "$titre2 $titre5"; $titre8 = "$titre4 $titre6"; $largeur = 200; $hauteur = 80; $img = imageCreate($largeur, $hauteur); $rouge = imageColorAllocate($img, 200, 100, 100); $noir = imageColorAllocate($img, 0, 0, 0); $titre_police = 5; imageString($img, $titre_police, ($largeur-imageFontWidth($titre_police)*strlen("$titre1"))/2, 5, $titre1, $noir); imageString($img, $titre_police, ($largeur-imageFontWidth($titre_police)*strlen("$titre7"))/2, 20, $titre7, $noir); imageString($img, $titre_police, ($largeur-imageFontWidth($titre_police)*strlen("$titre3"))/2, 40, $titre3, $noir); imageString($img, $titre_police, ($largeur-imageFontWidth($titre_police)*strlen("$titre8"))/2, 55, $titre8, $noir); imagepng($img, 'uploads/memcpu.png'); imagedestroy($img); ?>

Mammouth du PHP | 881 Messages

02 oct. 2008, 14:51

Merci pour ton code ... c'est très intéressant.


Je vais jouer avec ça comme un enfant avec son nouveau joujou.
Soyez artisans de paix