Htop – DiskMeter et astuces

Bonjour à tous,

Tous les adminsys ont leurs outils préférés pour monitorer les serveurs rapidement. Parmi ces outils on peut trouver les classiques « top » , « free » , « ps » et j’en passe. Personnellement je ne suis pas très à l’aise avec Top qui ne me permet pas de faire rapidement ce que je souhaite (celà est surement dû à un manque de pratique de ma part) c’est pourquoi je me suis tourné vers l’étonnant Htop.

Htop est un outil qui permet de voir rapidement , entre autre, les processus ainsi que leur utilisation processeur, mémoire, disque ( si si allez voir dans les options ‘F2’ ) ainsi que l’utilisation des processeurs et la mémoire du système et encore énormément de choses.

Dans les options un peu moins connues on a aussi la possibilité de rentrer directement dans la trace du processus juste en pressant la touche S ou encore voir les fichier ouverts par un processus en pressant la touche L.

Htop étant vraiment complet j’ai été très déçu de voir qu’il n’y avait aucune sonde pour l’utilisation en terme de stockage des disques. En effet il n’est pas possible de savoir si les partitions qui composent votre système sont pleines en terme de blocs ou d’inodes.

Celà aurait été très triste si Htop n’était pas libre 😀
En effet, j’ai pu facilement récupérer les sources sur le sourceforge : http://htop.sourceforge.net/index.php?page=downloads#sources

Ensuite avec quelques notions de C il est très facile de faire une première sonde simple. Pour ma part j’ai dû m’inspirer de la sonde des processeurs « CPUMeter.c » pour écrire ma sonde « DiskMeter.c »

Voici le résultat final :Capture d’écran 2013-09-04 à 15.24.11

Mon code est disponible sur mon github : https://github.com/bewiwi/htop-Disk

Pour build le projet toutes les instructions se trouvent à la fin du README.

Pour conclure, j’espère que vous testerez ma version de Htop et surtout que (si ce n’est pas déjà fait) vous prendrez conscience de la puissance du libre et de la simplicité de modifier les outils que vous utilisez au quotidien.

Bon test de Htop à tous !!

Liens :
https://github.com/bewiwi/htop-Disk
http://htop.sourceforge.net/index.php?page=downloads#sources

PS : Je ne suis très loin d’être un développeur C expérimenté donc si vous souhaitez améliorer le code ce sera avec grand plaisir.

2 comments

  1. lolotux dit :

    Salut,

    J’ai eu le souci suivant :
    http://askubuntu.com/questions/27677/cannot-find-install-sh-install-sh-or-shtool-in-ac-aux
    Puis me manquait un lib de dev : ncursesw

    Alors au : make

    DiskMeter.c: In function ‘DiskMeter_setValues’:
    DiskMeter.c:77:25: warning: passing argument 2 of ‘Disk_getListPart’ from incompatible pointer type
    Disk_getListPart(id,&part,&count);
    ^
    DiskMeter.c:26:13: note: expected ‘char *’ but argument is of type ‘char (*)[100]’
    static void Disk_getListPart(int id,char* part,int* count){
    ^
    DiskMeter.c:92:5: warning: format ‘%d’ expects argument of type ‘int’, but argument 4 has type ‘uint64_t’ [-Wformat=]
    snprintf(buffer,size, »%d%% »,percent);
    ^
    DiskMeter.c:92:5: warning: format ‘%d’ expects argument of type ‘int’, but argument 4 has type ‘uint64_t’ [-Wformat=]
    DiskMeter.c: In function ‘DiskMeter_init’:
    DiskMeter.c:99:34: warning: passing argument 2 of ‘Disk_getListPart’ from incompatible pointer type
    Disk_getListPart(this->param,&part,&osef);
    ^
    DiskMeter.c:26:13: note: expected ‘char *’ but argument is of type ‘char (*)[100]’
    static void Disk_getListPart(int id,char* part,int* count){
    ^
    DiskMeter.c: In function ‘SingleColDisksMeter_draw’:
    DiskMeter.c:107:23: warning: passing argument 2 of ‘Disk_getListPart’ from incompatible pointer type
    Disk_getListPart(0,&part,&count);
    ^
    DiskMeter.c:26:13: note: expected ‘char *’ but argument is of type ‘char (*)[100]’
    static void Disk_getListPart(int id,char* part,int* count){
    ^
    DiskMeter.c: In function ‘AllDisksMeter_init’:
    DiskMeter.c:118:23: warning: passing argument 2 of ‘Disk_getListPart’ from incompatible pointer type
    Disk_getListPart(0,&part,&count);
    ^
    DiskMeter.c:26:13: note: expected ‘char *’ but argument is of type ‘char (*)[100]’
    static void Disk_getListPart(int id,char* part,int* count){
    ^
    DiskMeter.c:120:7: warning: implicit declaration of function ‘calloc’ [-Wimplicit-function-declaration]
    this->drawData = calloc(sizeof(Meter*), count-1);
    ^
    DiskMeter.c:120:24: warning: incompatible implicit declaration of built-in function ‘calloc’
    this->drawData = calloc(sizeof(Meter*), count-1);
    ^
    DiskMeter.c: In function ‘AllDisksMeter_done’:
    DiskMeter.c:139:23: warning: passing argument 2 of ‘Disk_getListPart’ from incompatible pointer type
    Disk_getListPart(0,&part,&count);
    ^
    DiskMeter.c:26:13: note: expected ‘char *’ but argument is of type ‘char (*)[100]’
    static void Disk_getListPart(int id,char* part,int* count){
    ^
    DiskMeter.c: In function ‘AllDisksMeter_updateMode’:
    DiskMeter.c:150:23: warning: passing argument 2 of ‘Disk_getListPart’ from incompatible pointer type
    Disk_getListPart(0,&part,&count);
    ^
    DiskMeter.c:26:13: note: expected ‘char *’ but argument is of type ‘char (*)[100]’
    static void Disk_getListPart(int id,char* part,int* count){

    ….

    oooops

    sudo make install : ne crie pas 🙂

    mais avec htop pas de disque ! 🙂

    ….

  2. PORTE Loïc dit :

    Salut,
    Quand tu dis pas de disque, tu veux dire que ça ne s’affiche pas de suite, ou que la sonde n’est pas dispo quand tu fais F2 ?

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *