Catégories
Blog Developpement Open-source Reseau Systeme Web

Un sacré programme pour les SophiaConf 2014

Cette année encore, la Telecom Valley nous gâte avec une série de 4 soirées de conférences accessible gratuitement sur le campus SophiaTech à Sophia-Antipolis (06).

capture_170

Lundi 30/06

Internet Of Things/ M2M / Do It Yourself 

Mardi 01/07

Big data, No SQL, BI et sécurité du cloud

Mercredi 02/07 

Web Sémantique : de la recherche à l’usage – enfin?

Jeudi 03/07

Nouvelles tendances de développement web 

Lieux Campus SophiaTech Campus SophiaTech Campus SophiaTech Campus SophiaTech
Horaires Accueil à 17h45

18h00 – 20h00

Accueil à 17h45

18h00 – 20h00

Accueil à 17h45

18h00 – 20h00

Accueil à 17h45

18h00 – 20h00

Intervenants 

Pascal BODIN
(Orange)

Alexis MOUSSINE-POUCHKINE Google
(à confirmer)

Alexandru CARACAS
(IBM Zurich)

Jean DEMARTINI
(Demtech)

Benjamin CABE
(Fondation Eclipse)

Julien HOLTZER (Pobot)

 

 

Didier GIRARD (SFEIR, Google Developer Expert)

Aurélien GOUJET (MapR)

Edmond CISSE
(Uraeus Consult)

Cyril GROSJEAN 
(Janua)

Aurélien MAZOYER
(France Labs)

Olivier TAVARD
(France Labs)

Julien MARECHAL 
(Air France)

Jérémy MEYER
(Amadeus)

 

Fabien GANDON 
(Inria)

Christophe DESCLAUX
(Reador)

Mylène LEITZELMAN
(Mnemotix)

Laurent BIHANIC
(Atos)

Guillaume VILAND

(Orange Portail)

Alexis MOUSSINE-POUCHKINE
(Google europe)

Bertrand LAPORTE
(Amadeus)

Benoît CHARBONIER
(Amadeus)

Matti SCHNEIDER

Pawel KOZLOWSKI
(Amadeus)

Infos pratiques Entrée gratuite, inscription obligatoire

Inscrivez-vous en cliquant ici.

Vous pouvez vous inscrire en ligne à partir du site officiel: http://www.telecom-valley.fr/webform/inscription-sophiaconf2014

Catégories
Developpement Open-source Planet-libre Reseau Systeme

Virtualisation légère avec Docker

Dans le petit monde des DevOps, la solution de virtualisation Docker a le vent en poupe. Nous allons dans ce billet essayer de décrypter ce qui ce cache derrière ce nouvel outil et proposer un tutoriel sur l’installation et les premiers pas pour une utilisation souple et efficace.Sélection_178

C’est quoi donc ?

Docker est un logiciel open-source (sous licence Apache 2.0) et un service en ligne optionnel (Docker.io) permettant de gérer des conteneurs (« dockers »).

Contrairement aux machines virtuelles classiques qui comprennent un système hôte (« guest OS ») et les librairies/applications, les conteneurs ne contiennent, au maximum, que les applications/librairies.

 Sélection_179

Quand je dis au maximum c’est qu’une copie d’un conteneur qui ne change que la partie application ne contiendra que les différences par rapport au conteneur initial.

Sélection_181

Le système hôte est ainsi géré directement par le Docker Engine (en vert dans le premier schéma). On a ainsi une mutualisation qui permet de lancer les conteneurs de manière très rapide: le temps de lancement d’un conteneur est presque le même que le temps de lancement des applications qu’il contient. En effet, le système d’exploitation est déjà lancé. Donc pas de phase de démarrage ni d’initialisation de cette couche. Il faut quand même avoir à l’esprit que même si l’on est pas dans une machine virtuelle, on dispose tout de même d’un environnement isolé (processus, système de fichier, ports réseau). L’utilisateur n’a qu’à se préoccuper que de ce qu’il veut virtualiser (les applications/services) et ne s’occupe pas du reste.

L’autre gros avantage de cette technologie est la portabilité. En effet, il est tout à fait possible de concevoir un conteneur sur son PC portable puis ensuite de le déployer sur son infrastructure de production physique ou virtuelle. La taille des conteneurs étant relativement réduite, on peut donc imaginer un workflow de déploiement basée sur un repo central (type Git) et des Docker Engine installés sur les machines qui font elle même tourner des conteneurs. Il n’y a pas vraiment de limite au nombre de conteneurs qu’une machine puisse faire tourner. La limite vient de l’occupation mémoire/CPU/réseau de vos applications.

Si vous avez encore des questions sur la différence entre Docker et VM, je vous conseille la lecture de cette question sur StackOverflow: « How is Docker.io different from a normal virtual-machine ?« .

Installation de Docker

Note (merci à @jb_barth pour le commentaire): jusqu’à la version 0.9, Docker se basait sur la technologie LXC (« Linux Containers ») du noyau Linux et ne fonctionnait donc que sur des distributions GNU/Linux avec un noyau >= 2.6.24. La dépendance stricte à LXC a sauté depuis la v0.9.0, le driver par défaut est maintenant libcontainer, une lib pur go produite par le projet pour accéder de façon propre aux APIs dispos dans le kernel. C’est ce qui a permis de supporter des noyaux aussi vieux d’ailleurs, au début c’était >= 3.8

Voici les étapes à suivre pour installer Docker sur une distribution Ubuntu 14.04 LTS. A noter, pour les miséreux développeurs sous Windows ou Mac OS, il est est toujours possible de faire tourner une VM Ubuntu (par exemple avec VirtualBox) et de suivre cette installation.

Docker est directement disponible dans les repositories d’Ubuntu, donc un simple:

sudo apt-get install docker.io
sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker

suffit pour effectuer l’installation complète de Docker sur notre machine comprenant:

  • le Docker Engine (ou service Docker)
  • le Docker Client (permettant de discuter avec le Docker Engine)

Cependant si vous souhaiter travailler avec une version plus ressente il faut utiliser les commandes suivantes:

sudo apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
sudo sh -c "echo deb https://apt.dockerproject.org/repo ubuntu-trusty main \ > /etc/apt/sources.list.d/docker.list"
sudo apt-get update
sudo apt-get purge lxc-docker*
sudo apt-get install docker-engine

Comme les conteneurs vont utiliser les serveurs DNS de la machine hôte, il est nécessaire de configurer les adresses des serveurs DNS dans le fichier /etc/default/docker.io (par exemple avec les serveurs OpenDNS):

$ vi /etc/default/docker.io

# Use DOCKER_OPTS to modify the daemon startup options.
DOCKER_OPTS="-dns 208.67.220.220 -dns 208.67.220.222"

Pour que la configuration soit prise en compte, il faut relancer le service Docker avec la commande:

sudo service docker restart

Un petit ps permet de voir que le service est bien lancé:

0.0   0.1  563M 9.65M   733 root         0 S  0:00.46     0     0 /usr/bin/docker.io -d -dns 208.67.220.220 -dns 208.67.220.222

Récupération des images système

Nous allons commencer par récupérer des images qui vont servir de de bases à notre conteneur. Une liste assez conséquente d’images sont disponibles sur le site officiel du projet. Vous pouvez ainsi récupérer celle qui est le plus proche de l’environnement que vous recherché. Un moteur de recherche est disponible à l’adresse https://index.docker.io/ pour trouver des images conçues par les développeurs du projet et par des contributeurs.

On retrouve ainsi des distributions GNU/Linux minimales comme Ubuntu, CentOS, BusyBox pour ne siter que les images officiellement supportées par le projet Docker.io (il existe également des repos non officiels avec Fedora, RH, Arch…).

Petit mention spéciale pour les images BusyBox qui sont vraiment très légère (moins de 10 Mo) pour un système fonctionnel !

Même si il est possible de directement télécharger l’image au lancement du conteneur, je préfère avoir sur ma machine les images des différentes versions de l’OS que j’utilise le plus: Ubuntu.

Pour récupérer l’ensemble des images du repo Ubuntu qui contient les versio  minimale d’Ubuntu de la version 10.04 à 14.04), il faut saisir la commande suivante:

$ sudo docker pull ubuntu

74fe38d11401: Pulling dependent layers
316b678ddf48: Pulling dependent layers
3db9c44f4520: Pulling dependent layers
5e019ab7bf6d: Pulling dependent layers
99ec81b80c55: Pulling dependent layers
a7cf8ae4e998: Pulling dependent layers
511136ea3c5a: Download complete
e2aa6665d371: Downloading [==>                                                ] 2.027 MB/40.16 MB 6m14s

Note: le téléchargement initial des images peut prendre un peu de temps selon la vitesse de votre liaison Internet.

Il est également possible de faire de même avec les autres distributions citées ci-dessus:

$ sudo docker pull centos

$ sudo docker pull busybox

Une fois le téléchargement terminé, on peut demandé à Docker un status de son état actuel:

$ sudo docker info
Containers: 64
Images: 46
Storage Driver: aufs
 Root Dir: /var/lib/docker/aufs
 Dirs: 174
Execution Driver: native-0.1
Kernel Version: 3.13.0-24-generic
WARNING: No swap limit support

ainsi que la liste des images disponibles:

$ sudo docker images
REPOSITORY          TAG                   IMAGE ID            CREATED             VIRTUAL SIZE
busybox             buildroot-2013.08.1   352f47ad2ecf        17 hours ago        2.489 MB
busybox             ubuntu-14.04          6a95c08a9391        17 hours ago        5.609 MB
busybox             ubuntu-12.04          1720a1681f1c        17 hours ago        5.455 MB
busybox             buildroot-2014.02     f66342b343ae        17 hours ago        2.433 MB
busybox             latest                f66342b343ae        17 hours ago        2.433 MB
ubuntu              glances_develop       a483f92d9ab3        24 hours ago        556.8 MB
ubuntu              14.04_nicolargo       8574cc29575e        28 hours ago        440.8 MB
ubuntu              13.10                 5e019ab7bf6d        4 weeks ago         180 MB
ubuntu              saucy                 5e019ab7bf6d        4 weeks ago         180 MB
ubuntu              12.04                 74fe38d11401        4 weeks ago         209.6 MB
ubuntu              precise               74fe38d11401        4 weeks ago         209.6 MB
ubuntu              12.10                 a7cf8ae4e998        4 weeks ago         171.3 MB
ubuntu              quantal               a7cf8ae4e998        4 weeks ago         171.3 MB
ubuntu              14.04                 99ec81b80c55        4 weeks ago         266 MB
ubuntu              latest                99ec81b80c55        4 weeks ago         266 MB
ubuntu              trusty                99ec81b80c55        4 weeks ago         266 MB
ubuntu              13.04                 316b678ddf48        4 weeks ago         169.4 MB
ubuntu              raring                316b678ddf48        4 weeks ago         169.4 MB
ubuntu              lucid                 3db9c44f4520        5 weeks ago         183 MB
ubuntu              10.04                 3db9c44f4520        5 weeks ago         183 MB
centos              centos6               0b443ba03958        6 weeks ago         297.6 MB
centos              6.4                   539c0211cd76        14 months ago       300.6 MB
centos              latest                539c0211cd76        14 months ago       300.6 MB

Comme alternative du moteur de recherche https://index.docker.io/, il est bien sûr possible d’utiliser la ligne de commande. Par exemple pour trouver toutes les images Ubuntu disponibles sur le repo central:

sudo docker search ubuntu | less

A noter qu’il est tout à fait possible, si vous ne trouvez pas votre bonheur de concevoir « from scratch » votre propre image système en suivant cette documentation sur le site officiel (la procédure se base sur DebootStrap).

Création de son premier conteneur

Bon assez de préliminaires, nous allons maintenant pourvoir créer notre premier conteneur qui va se limiter à exécuter la commande ‘ls’ (si c’est pas du conteneur de compétition):

$ sudo docker run ubuntu:latest /bin/ls -alF

total 8280
drwxr-xr-x  46 root root    4096 May 28 06:50 ./
drwxr-xr-x  46 root root    4096 May 28 06:50 ../
-rw-r--r--   1 root root     102 May 28 06:50 .dockerenv
-rwx------   1 root root 8394118 May 27 15:37 .dockerinit*
drwxr-xr-x   2 root root    4096 Apr 16 20:36 bin/
drwxr-xr-x   2 root root    4096 Apr 10 22:12 boot/
drwxr-xr-x   4 root root    4096 May 28 06:50 dev/
drwxr-xr-x  64 root root    4096 May 28 06:50 etc/
drwxr-xr-x   2 root root    4096 Apr 10 22:12 home/
drwxr-xr-x  12 root root    4096 Apr 16 20:36 lib/
drwxr-xr-x   2 root root    4096 Apr 16 20:35 lib64/
drwxr-xr-x   2 root root    4096 Apr 16 20:35 media/
drwxr-xr-x   2 root root    4096 Apr 10 22:12 mnt/
drwxr-xr-x   2 root root    4096 Apr 16 20:35 opt/
dr-xr-xr-x 236 root root       0 May 28 06:50 proc/
drwx------   2 root root    4096 Apr 16 20:36 root/
drwxr-xr-x   7 root root    4096 Apr 16 20:36 run/
drwxr-xr-x   2 root root    4096 Apr 24 16:17 sbin/
drwxr-xr-x   2 root root    4096 Apr 16 20:35 srv/
dr-xr-xr-x  13 root root       0 May 28 06:50 sys/
drwxrwxrwt   2 root root    4096 Apr 24 16:17 tmp/
drwxr-xr-x  11 root root    4096 Apr 16 20:35 usr/
drwxr-xr-x  14 root root    4096 Apr 16 20:36 var/

Arrêtons-nous un peu sur la commande: sudo docker.io run ubuntu:latest /bin/ls -alF

On demande donc le lancement (run) d’un conteneur basée sur la dernière version d’Ubuntu (ubuntu:latest qui est un lien vers l’image minimale de la version 14.04) qui va exécuter la commande ls (/bin/ls -alF). Comme vous pouvez le voir dans le résultat de la commande, on est dans un environnement isolé avec son propre système de fichier.

Première constatation, la vitesse d’exécution de notre environnement virtuel est vraiment impressionnante. Sur une petit commande,on peut voir que l’overhead de lancement du conteneur est négligeable:

$ time sudo docker run ubuntu:latest ls -alF /
...
real	0m0.331s
user	0m0.014s
sys	0m0.012s

$ time ls -alF /
...
real	0m0.007s
user	0m0.003s
sys	0m0.004s

Puis un conteneur persistant

Passons maintenant à la création d’un conteneur persistant, c’est à dire un conteneur  qui va faire tourner une tache pendant un temps indéterminé (je prends par exemple un pin infini vers le site Google).

$ sudo docker run -d ubuntu:latest ping www.google.fr
7404bfa4beca4ba97459c96f8d93242c4fba6ecf2c5b11d18c09acd2fce9991e

Noter le -d dans la ligne de commande pour détacher le conteneur et ainsi lui permettre de tourner en tache de fond.

En retour on obtient le numéro d’identifiant unique du conteneur qui va nous permettre de le contrôler.

On commence donc par vérifier qu’il tourne bien:

$ sudo docker ps
CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS              PORTS               NAMES
7404bfa4beca        ubuntu:14.04        ping www.google.fr   3 minutes ago       Up 3 minutes                            mad_lumiere         

On peut ainsi, l’arrêter:

sudo docker stop 7404bfa4beca

Le démarrer:

sudo docker start 7404bfa4beca

Le redémarrer (l’équivalent d’un stop/start):

sudo docker restart 7404bfa4beca

Lui envoyer des signaux:

sudo docker kill 7404bfa4beca

Ensute on supprime le conteneur avec la séquence stop/rm:

sudo docker stop 7404bfa4beca

sudo docker rm 7404bfa4beca

Un Shell dans un conteneur

Pour accéder à un shell dans le conteneur, il faut utiliser les options suivantes dans la ligne de commande:

  • -t: Allocate a pseudo-tty
  • -i: Keep STDIN open even if not attached
$ sudo docker run -i -t ubuntu:latest bash
root@bb89ed6cdd3c:/#

Structurer la création des conteneurs avec les Dockerfiles

Les Dockerfiles sont des fichiers textes décrivant les différentes étapes pour la création d’un conteneur. Idéalement, ce sont ces fichiers que vous aller gérer en configuration et que vous aller partager avec les différentes personnes utilisatrices de votre projet. Pour illustrer mes dires, je vais prendre l’exemple d’un dockerfile qui va permettre aux contributeurs du projet Glances de tester simplement la branche de développement du logiciel.

En gros, le dockfile doit:

  1. utiliser un OS de base (Ubuntu 14.04 LTS)
  2. installer les pré-requis système
  3. télécharger la dernière version de Glances sous Github

Le dockfile glances_develop_install correspondant est alors le suivant:

# Install Glances Development branch
#
# $ sudo docker build -t ubuntu:glances_develop - < glances_develop_install
#
# VERSION 1.0

# Use the ubuntu base image provided by dotCloud
FROM ubuntu
MAINTAINER Nicolargo, nicolas@nicolargo.com

# Make sure the package repository is up to date
RUN apt-get -y update

# Install prerequirement
RUN apt-get install -y python-dev python-pip git lm-sensors
RUN pip install psutil bottle batinfo https://bitbucket.org/gleb_zhulik/py3sensors/get/tip.tar.gz

# Patch for current Docker version
RUN ln -s /proc/mounts /etc/mtab

# Install Glances from the Pipy repository
RUN git clone -b develop https://github.com/nicolargo/glances.git

Voyons un peu en détail le contenu du fichier.  On commence donc par définir l’OS de base:

FROM ubuntu

On peut bien sûr utiliser l’image/tag que l’on souhaite.

Ensuite on passe aux commandes que l’on souhaite exécuter:

RUN apt-get -y update

RUN apt-get install -y python-dev python-pip git lm-sensors

RUN pip install psutil bottle batinfo https://bitbucket.org/gleb_zhulik/py3sensors/get/tip.tar.gz

RUN ln -s /proc/mounts /etc/mtab

RUN git clone -b develop https://github.com/nicolargo/glances.git

Rien de bien compliqué, il suffit de faire précéder la commande Unix par le mot clé RUN…

Il ne reste plus qu’à lancer la construction du conteneur et son exportation vers une nouvelle image (nommé ubuntu:glances_develop) à partir de la ligne de commande:

sudo docker build -t ubuntu:glances_develop - < glances_develop_install

ou alors directement depuis un repos (par exemple GitHub) ou vos Dockers files sont gérés en configuration:

sudo docker build -t ubuntu:glances_develop https://raw.githubusercontent.com/nicolargo/dockersfiles/master/glances_develop_install

On vérifie ensuite que l’image a bien été créée:

$ sudo docker images | grep glances
ubuntu glances_develop a483f92d9ab3 31 hours ago 556.8 MB

Puis on lance Glances depuis ce conteneur (en le metant à jour par un pull avant le lancement):

sudo docker run -i -t --entrypoint /bin/bash ubuntu:glances_develop -c "cd glances ; git pull origin develop ; python -m glances"

Et hop c’est magique:

Glances in a docker

Un des trucs fun avec Docker c’est que si l’on souhaite modifier un conteneur en ajoutant par exemple l’installation d’un nouveau logiciel, il suffit de modifier le Docker file puis de refaire la commande de build. L’installation ne se fera que par delta par rapport au premier conteneur.

Controler la CPU et la mémoire de ses conteneurs

Une fonction intéressante de Docker est sa capacité de contraindre un conteneur en terme de CPU et de MEM. Par exemple on peut limiter le conteneur à 512 Mo de RAM et donner un priorité moins forte en terme de CPU à ce conteneur par rapport aux autres. Il faut cependant que le hôte qu héberge Docker soit compatible avec ces options ce qui n’est pas mon cas:

$ sudo docker run -m 512m -i -t --entrypoint /bin/bash ubuntu:glances_develop -c "cd glances ; git pull origin develop ; python -m glances"

WARNING: Your kernel does not support swap limit capabilities. Limitation discarded.

Pour activer ces options sous Ubuntu, il faut modifier la configuration du Kernel via GRUB. Pour cela, il est nécessaire de suivre cette procédure.

Conclusion

L’approche est vraiment différente des solutions de virtualisation classiques mais si vous cherchez un outil simple pour valider vos applications Linux dans un environnement controlé alors Docker est définitivement une solution à envisager. Sa souplesse et sa légéreté en font une solution idéale à embarquer sur son PC portable ou à mettre en production sur son infrastructure.

Je vous conseille de vous plonger dans la documentation officielle qui est vraiment complète et très bien faite.

Des expériences à nous faire partager sur l’utilisation de Docker ?

Quelques références:

Catégories
Developpement Open-source Reseau Systeme

Glances v2.0 RC – J’ai besoin de vous !

Cela fait maintenant plusieurs mois que je délaisse mon bébé blog pour me consacrer au développement de la version 2.0 de Glances. Avec l’aide d’Alessio Sergi, nous avons effectué un refactoring complet du code et apporté de nouvelles fonctions qui, je l’espère, vous serons utiles.

Sélection_175

Cependant, avant la mise à disposition officielle, j’ai besoin de vous pour tester la première Release Candidate (RC1). Le développement ayant été fait sous Ubuntu 14.04, je recherche donc des personnes de bonne volonté pour valider cette RC1 sur d’autres système d’exploitation: autres distributions GNU/Linux, BSD, Mac OS, Windows.

Comment tester Glances v2.0 RC1 ?

Le plus simple est de suivre les instructions de la page Wiki qui va vous permettre de tester cette nouvelle version sans impacter votre système existant (utilisation d’un environnement virtuel avec virtualenv).

Il est important de bien vérifier que l’on est sur la branche DEVELOP avant de lancer les tests suivants. Pour vérifier cela:

cd ~/tmp/glances
LANGUAGE=en_US.utf8  ~/glances-venv/bin/python -m glances -V

devrait afficher comme résultat:

Glances v2.0_RC1 with psutil v2.1.0

Quoi tester?

A vrai dire un peut tout…

Le mode standalone

Le plus simple est de commencer par lancer Glances en mode standalone (supervision de son propre système):

cd ~/tmp/glances
LANGUAGE=en_US.utf8  ~/glances-venv/bin/python -m glances -C ~/tmp/glances/conf/glances-monitor.conf

Votre terminal devrait afficher les statistiques (rafraîchissement par défaut de 3 secondes). En appuyant sur la touche ‘h’, vous obtiendrez une liste des différentes fonctions.

Mode client/serveur classique

Je vous propose ensuite de passer au mode client/serveur qui peut être testé sur une unique machine (le client et le serveur étant lancé sur la même machine) ou bien sur deux machines différentes.

On commence par lancer le serveur:

cd ~/tmp/glances
LANGUAGE=en_US.utf8  ~/glances-venv/bin/python -m glances -C ~/tmp/glances/conf/glances-monitor.conf -s

Puis le client:

cd ~/tmp/glances
LANGUAGE=en_US.utf8  ~/glances-venv/bin/python -m glances -C ~/tmp/glances/conf/glances-monitor.conf -c @IPSERVER

Votre terminal va alors afficher les statistiques du serveur.

Mode client/serveur SNMP

C’est une nouveauté de la version 2.0. Ce mode permet de lancer un client vers une machine ou le serveur Glances n’est pas lancé. Il va ainsi essayé de se connecter a un serveur SNMP (si celui-ci est installé sur votre serveur). Cette fonction est encore expérimentale et ne fonctionne correctement qu’avec des agents SNMP GNU/Linux.

Pour tester, il suffit de lancer le client:

cd ~/tmp/glances
LANGUAGE=en_US.utf8  ~/glances-venv/bin/python -m glances -C ~/tmp/glances/conf/glances-monitor.conf -c @IPSERVER

Votre terminal va alors afficher les statistiques minimale du serveur (par exemple, on a pas la liste des processus).

Sélection_176

Mode Web serveur

Egalement une nouveauté de la version 2.0, ce mode permet de lancer un serveur Glances qui va proposer une interface Web. Glances utilise pour cela le framework Bootle qui a déjà fait ses preuves dans de nombreux autres projets libres.

Pour lancer le serveur en mode Web, il faut saisir la ligne de commande suivante:

cd ~/tmp/glances
LANGUAGE=en_US.utf8  ~/glances-venv/bin/python -m glances -C ~/tmp/glances/conf/glances-monitor.conf -w

Puis pointer son navigateur Web préféré sur l’adresse suivante: http://<ip serveur>:61208/

Glances - Mozilla Firefox_177

Comment remonter un bug ou une demande d’amélioration ?

Il faut disposer d’un compte Github et de cliquer sur le lien suivant: Remonter un bug dans Glances.

Dans la description, faire systématiquement apparaître:

  • la version de Glances testée ( ~/glances-venv/bin/python -m glances -V)
  • votre environnement de test (système d’exploitation, hardware, version de Python…)
  • un descriptif le plus précis du problème et de la manière de le reproduire (en Anglais de préférence)

Je compte sur vous 🙂

Catégories
Developpement Open-source Planet-libre Reseau Systeme

Glances 1.7.4 est dans les bacs !

Nouvelle version pour Glances, l’outil de supervision système que je développe avec d’autres contributeurs depuis maintenant quelques années. On commence par le traditionnel screenshot du client en mode console:

capture_154

 

Installation et mise à jour

L’installation de Glances sur votre machine (Linux, Mac ou même Windows) se fait via la ligne de commande:

pip install glances

La mise à jour n’est pas plus compliquée:

pip install --upgrade glances

 Au chapitre des nouveautés

On commence par la modification de l’affichage de la ligne résumant l’état des processus. On a séparé la notion de  ‘tasks’ et de ‘threads’:

capture_155

Une nouvelle statistique au niveau de la CPU des machines GNU/Linux est affiché et disponible via l’API: la steal qui peut être utile de surveiller notamment si votre machine est virtuelle (plus d’information sur la mémoire steal en lisant ce très bon billet sur le sujet).

capture_157

On a également ajouté l’information d’uptime (temps écoulé depuis le dernier redémarrage de la machine). Cette information est disponible en haut à droite dans l’interface et bien évidement comme toutes les statistiques via l’API (methode getUptime).

capture_156

Il est maintenant possible, via le fichier de configuration de Glances de cacher certains disques ou interfaces réseau:

[iodisk]
# Define the list of hidden disks (comma separeted)
hide=sda2,sda5

[network]
# Define the list of hidden network interfaces (comma separeted)
hide=lo

Vous serez également heureux d’apprendre que Glances 1.7.4 consomme environ 10% de moins de CPU que la version précédente. En effet, certaines statistiques qui ne nécessite pas un rafraîchissement très fréquent sont maintenant mis en cache.

Enfin, un certain nombre de bugs ont été corrigés (voir la liste exhaustive ici).

Un grand merci aux contributeurs (Alessio en tête), aux packagers (qui vont avoir un peu de boulot) et aux bêta-testeurs !

En route pour la version Glances 2.0 (re-factoring complet, gestion par plugins…) !

Catégories
Developpement Open-source Planet-libre

Tu fais quoi ?

Un premier billet en forme d’excuse pour les lecteurs de ce blog.

En effet, depuis quelques temps, je ne suis pas très actif sur ce site. Le (vrai) boulot et la (vraie) vie ne me laissent que trop peu de loisirs. J’ai donc fait le choix de privilégier mes autres activités dans le domaine des logiciels libres.

En tête de gondole, Glances va bientôt sortir en version 1.7.4. Je suis d’ailleurs à la recherche de bêta testeurs de la version RC notamment sur les systèmes d’exploitation BSD, Mac OS et Windows (suivre cette procédure pour l’installer sur votre système sans impacter la version de Glances existante).

glances-1.7.4

Ensuite, le script Python SxxExx permet de récupérer via la ligne de commande les torrents de vos séries préférés (juste les torrents hein, car télécharger les séries est interdit par Monsieur Hadopi… paix à son âme). En gros, l’idée est de pouvoir lancer des recherches (seulement sur Piracy Bay pour l’instant) en fonction du nom de la série, de la saison, de l’épisode.

Voici quelques exemples:

$ sxxexx -t homeland -s 3 -e 10

Homeland S3E10 name is "Good Night"
Title:   Homeland S03E10 HDTV x264-ASAP [eztv]
Seeders: 3567
Magnet:  magnet:?xt=urn:btih:522b99e066bf97753a9c0
$ sxxexx.py -t "Breaking bad" -s 5 -a

Breaking Bad has 16 episodes in season 5
*******************************************************************************
Title:   Breaking Bad - The Complete Season 5 [BDRip-HDTV] + EXTRAS
Seeders: 2097
Magnet:  magnet:?xt=urn:btih:82eb1fbb413038dd551eb8c5d4f6a891ff2d190f&dn=Breaking+Bad+-+The+Complete+Season+5+%5BBDRip-HDTV%5D+%2B+EXTRAS&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80&tr=udp%3A%2F%2Ftracker.publicbt.com%3A80&tr=udp%3A%2F%2Ftracker.istole.it%3A6969&tr=udp%3A%2F%2Ftracker.ccc.de%3A80&tr=udp%3A%2F%2Fopen.demonii.com%3A1337
*******************************************************************************
Title:   Breaking Bad S05E16 REPACK HDTV x264-ASAP[ettv]
Seeders: 1928
Magnet:  magnet:?xt=urn:btih:24d076e1c0f041977346e7bbf4277ceccf1086b0&dn=Breaking+Bad+S05E16+REPACK+HDTV+x264-ASAP%5Bettv%5D&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80&tr=udp%3A%2F%2Ftracker.publicbt.com%3A80&tr=udp%3A%2F%2Ftracker.istole.it%3A6969&tr=udp%3A%2F%2Ftracker.ccc.de%3A80&tr=udp%3A%2F%2Fopen.demonii.com%3A1337
*******************************************************************************
...
$ sxxexx -t "how i met your mother" -s 9 -e 9 -d

How I Met Your Mother S9E9 name is "Platonish"
Title:   How I Met Your Mother S09E09 HDTV x264-2HD [eztv]
Seeders: 3631
Magnet:  magnet:?xt=urn:btih:11633c741fe5e0a0774c2222cfa6c05

J’utilise ce script en parallèle d’un autre projet libre: Witsub. Ce dernier permet de rechercher, également en ligne de commande (« fuck the gui ») les sous-titres des séries téléchargés.

 

Je participe également à d’autre développements. Je vous invite à suivre mon activité sur Github et à consulter la liste de mes repositories.

 

 

Catégories
Developpement Open-source Planet-libre

Utilisation des CTags avec Sublime Text

capture_147CTags est un outil pour les développeurs permettant de construire un index des fonctions et classes utilisées. Cela permet donc à un éditeur de texte compatible avec CTags de ce déplacer rapidement et sans « parsing » inutile dans l’arborescence de votre projet. On peut ainsi, à l’aide d’une simple combinaison de touches, aller directement à la définition d’une fonction.

Nous allons dans ce billet voir comment installer et configurer CTags avec l’éditeur de texte Sublime Text 3 dans un environnement Debian/Ubuntu.

Note: la procédure est grosso modo la même pour d’autres éditeurs comme Vim , Emacs ou GEdit.

Installation de CTags

CTags est disponible dans les dépôts de toutes les distributions. Sous Ubuntu, une simple ligne de commande:

sudo apt-get install ctags

devrait suffire pour installer une version stable de CTags.

Note: Pour installer CTags à partir des sources, toutes les informations se trouvent sur le site officiel.

Création de l’index pour votre projet

Il existe de nombreuses manières pour construire les fichiers index CTags. La plus simple est de se rendre dans le répertoire de votre projet (par exemple ~/dev/monprojet) puis de saisir la commande suivante:

cd ~/dev/monprojet
ctags -R -f .tags

On demande donc au logiciel ctags de générer le fichier index nommé .tags (option -f .tags) à effectuant un parsing récursif (option -R) de l’arborescence de votre projet.

Ce fichier doit être régénéré à chaque ajout de fonction ou de classe. Cela se fait par une combinaison de touche dans SublimeText mais peut aussi être automatisé par un hook après un commit Git.

Installation du plugin Ctags dans Sublime Text

Je pars sur le principe ou votre Sublime Text est installé avec le plugin Package Manager (si ce n’est pas le cas, suivre cette procédure).

Une fois Sublime Text lancé, on commence par appuyer sur la combinaison de touche SHIFT+CTRL+P puis de saisir le mot clé Install Package. La liste des plugins disponibles va se charger, on cherche ensuite le plugin CTags et on l’installe.

Utilisation de CTags dans Sublime Text

Au démarrage de Sublime Text dans le répertorie de votre projet (~/dev/monprojet) , le fichier index de Ctags (.tags)  va automatiquement être chargé. Il ne vous reste plus qu’à utiliser les combinaisons de touches suivantes pour naviguer dans les classes et fonctions de votre code source:

Commande Key Binding
Générer / Re-générer le fichier index Ctags CTRL+t, CTRL+r
Aller à la définition de la fonction/classe CTRL+t, CTRL+t
Revenir en arrière CRTL+t, CTRL+b
Affiche la liste des fonctions/classes (fichier en cours) ALT+s
Affiche la liste des fonctions/classes (tous les fichiers du projet) ALT+SHIFT+s

Conclusion

L’utilisation des CTags apporte un gain de productivité non négligeable lors du développement logiciel. Le fait d’avoir une base commune et ouverte (le fichier .tags étant à plat et au format texte) permet de passer d’un éditeur à un autre sans perte de fonctionnalité.

Utilisez-vous les Ctags ? Si oui comment.

Partagez cela avec nous !

Catégories
Developpement Open-source Planet-libre

Gérer ces processus/démons Python avec Supervisor

C’est en lisant la document du projet 0Bin, une implémentation libre et auto-hébergé de PasteBin dont je reparlerai bientôt, que je suis tombé sur Supervisor. Supervisor est un système de contrôle de processus (comme launchd ou runinit) simple et orienté utilisateur (voir la documentation et les avantages ici) et donc idéal pour lancer des processus Python en mode démon (par un exemple un serveur Glances, mais ce n’est qu’un exemple…).

Installation de Supervisor

Sur un système Debian/Ubuntu, l’installation de Supervisor se résume à la saisie de la commande suivante dans un terminal:

sudo apt-get install supervisor

Une fois l’installation terminé, nous allons maintenant configurer Supervisor en utilisant le fichier /etc/supervisor/supervisord.conf (sur un système Debian).

Ajout d’un démon dans Supervisor

Nous allons donc prendre l’exemple d’un administrateur système qui souhaite que le serveur Glances soit lancé au démarrage de la machine et que celui ci soit redémarré automatiquement dans le cas ou Glances plante <mauvaisefois>ce qui n’arrive jamais</mauvaisefois>.

Pour lancer Glances en mode serveur, il faut utiliser la ligne de commande suivante:

/usr/local/bin/glances -s -C /etc/glances/glances.conf -P motdepasse

Il suffit donc d’ajouter la section suivante en fin du fichier  /etc/supervisor/supervisord.conf:

; Glances server section
[program:glances]
command=/usr/local/bin/glances -s -C /etc/glances/glances.conf -P motdepasse
user=nicolargo
autostart=true
autorestart=true

On demande a ce que le processus soit exécuté avec les droits d’un utilisateur standard (user=nicolargo dans mon exemple) et que le processus démarre automatiquement au démarrage de Supervisor (autostart=true) et qu’il soit bien redémarré si Supervisor détecte un problème sur le processus Glances.

Prendre en compte la configuration et administrer nos processus

Pour que notre configuration soit prise en compte, il faut relancer Supervisor avec les lignes de commandes:

sudo service supervisor stop
sudo service supervisor start

Normalement, à ce stade, votre processus Glances server doit être lancé. Pour le vérifier vous pouvez utiliser la commande supervisorctl qui permet d’avoir un statu des processus et un moyen simple de les arrêter / démarrer.

Vérification du statu du service Glances server:

$ sudo supervisorctl status
glances                          RUNNING    pid 5844, uptime 0:26:11

Je vous laisse regarder les autres commandes disponibles avec supervisorctl:

$ sudo supervisorctl help

default commands (type help <topic>):
=====================================
add    clear  fg        open  quit    remove  restart   start   stop  update 
avail  exit   maintail  pid   reload  reread  shutdown  status  tail  version

 

Catégories
Developpement Open-source Planet-libre

L’écosystème autour de Glances

Le nombre de projets gravitant autour de Glances étant devenu assez important, j’ai dessiné le schéma suivant (à partir du service en ligne Gliffy pour les plus curieux d’entre vous):

L'écosystème Glances
L’écosystème Glances

Le cœur de Glances (source disponible sur le Github officiel) est représenté en vert.

On trouve ensuite en bleu les projets composant son écosystème:

  • Glances plugin (ou CheckGlances) est un plugin pouvant de récupérer les statistiques d’un serveur Glances à partir de Nagios, Centreon ou de Shinken (ou de tout autre système compatible avec les plugins Nagios). Voir ce billet pour un exemple de mise en oeuvre.
CheckGlances
  • MetaGlances est une interface Web qui permet de centraliser les statistiques de plusieurs serveurs Glances. L’interface est « responsive » et donc compatible avec les écrans des PC, des tablettes et des smartphones (plus d’informations sur ce billet)
MetaGlances

 

  • PHPGlances est une API PHP pour s’interfacer simplement avec un serveur Glances. C’est la brique utilisé par MetaGlances. Pour un exemple de mise en oeuvre, vous pouvez lire ce billet sur le blog RootsLabs
Android Glances

 

Catégories
Developpement Open-source Planet-libre Systeme

Présentation des nouveautés de Glances 1.7

De retour de congés avec dans ma besace une nouvelle version de Glances qui sera la dernière version majeure de la série 1.x. La prochaine version sera donc une 2.x avec notamment un gros travail initial de refactoring/découpage du code en modules car le script initial atteint une taille critique (plus de 4400 lignes) qui commence à le rendre difficilement évolutif.

Mais revenons donc à nos moutons pour parler de cette version de Glances 1.7:

screenshot Glances 1.7

Un peu d’histoire

Pour ceux d’entre vous qui découvrent Glances dans ce billet, c’est un projet que j’ai lancé maintenant il y a 2 ans pour palier à un manque dans les outils de supervision système. En effet, j’utilisais tout un tas de logiciels (netstat, top, ntop, ifstat, dstat…) pour investiguer les éventuels problèmes de performance sur un système d’exploitation. Mais aucun ne permettait une visualisation simple (via un terminal par une connexion SSH) et rapide (sur un seul écran) des statistiques nécessaires. Glances était née.

Cette version apporte, en plus de son lot de corrections de bugs, d’améliorations des performances et de la documentation de nouvelles fonctionnalité que nous allons détailler ensemble

Les « Monitored Processes List »

L’objectif qui se cache derrière cette nouvelle fonction est de pouvoir, en un clin d’oeil, voir l’état d’un ensemble de processus regroupés ensemble sous une même thématique.

Par exemple, sur un machine hébergeant un serveur Web dynamique, la supervision des processus « importants » peut se découper de la manière suivante:

  • Serveur Nginx: processus NGinx
  • Serveur PHP: processus PHP-FPM
  • Serveur de caching des pages: processus Varnish
  • Serveur de base de données: processus MySQL
  • Serveur de caching des objets: processus Memcached

On a donc 5 objets à superviser. Dans Glances, la définition de ces objets est faite via le fichier de configuration glances.conf. Chaque objet est défini par:

  • description: description des processus (au maximum 16 caractères, exemple: Serveur Web Nginx)
  • regex: expression régulière permettant de regrouper les processus dans l’objet (exemple: .*nginx.*)

et optionnellement par:

  • command: chemin complet vers un script qui sera executé par Glances à chaque rafraichissement (donc toutes les 3 secondes par défaut) et qui devra retourner une chaine de caractère d’une seule et unique ligne contenant des informations utiles pour cet objet. Attention à ne pas utiliser un script trop consommateur de ressources ou bien d’augmenter le temps de rafraichissement (option -t <secondes>)
  • countmin: nombre minimal de processus attendus. Un message de warning sera affiché si le nombre de processus passe en dessous de cette valeur.
  • countmax: nombre maximal de processus attendus. Un message de warning sera affiché si le nombre de processus passe en dessus de cette valeur.

Note: par défaut, Glances par sur le principe ou le groupe ne contient qu’un seul processus (donc countmin = countmax = 1)

Ainsi, la configuration de l’objet n°1 (on peut définir jusqu’à 10 objets) correspondant au serveur Web Nginx est donc la suivante:

[monitor]
list_1_description=Serveur Web Nginx
list_1_regex=.*nginx.*
list_1_command=nginx -v
list_1_countmin=1
list_1_countmax=4

Dans Glances, l’affichage des objets se fait de la manière suivante:

monitored

La couleur détermine l’état de l’objet. Si le nombre de processus:

  • est compris entre countmin et countmax alors Glances affichera l’objet en vert (état OK)
  • est différent de 0 mais non compris entre countmin et countmax alors Glances affichera l’objet en orange (état WARNING)
  • est égal à 0 alors Glances affichera l’objet en rouge (état CRITICAL)

Comme pour toutes les autres statistiques importantes de Glances, le changement des états est logué.

En mode client/serveur la liste des items est défini au niveau serveur. Une nouvelle entrée dans l’API permet au client de récupérer la liste sur le serveur.

Supervision de la température des disques

Sur certain système, notamment les NAS, la température des disques est un critére important à surveiller. En partant de ce postulat, MendelGusmao a développé un module optionnel (activable en passant l’option -y au lancement de Glances) permettant d’aller récupérer la température des disques sur le daemon HDDTemp qui doit être lancé sur votre machine (voir ici les instructions d’installation de HDDTemp sur Debian/Ubuntu).

Sur ma machine (qui ne comporte qu’un seul disque dur), j’obtiens l’affichage suivant:

hddtemp

Il est bien sûr possible de définir les seuils d’alertes dans la section [hddtemperature] du fichier de configuration de Glances. Les valeurs par défaut sont: CAREFUL=45 / WARNING = 52 / CRITICAL = 60 (en ° celcus).

Information sur l’état de charge de la batterie

J’ai reçu plusieurs demandes d’utilisateur de Glances souhaitant superviser la capacité de la batterie (notamment dans le cas d’utilisation de nano PC autonomes). Premier problème, PsUtil ne remonte pas ce genre de statistiques (du moins dans la version actuelle 1.0). Après une rapide et non exhaustive recherche sur le net d’une bibliothéque Python permettant d’obtenir simplement les informations disponibles sur les systèmes Linux j’ai du me résoudre à coder moi même quelque chose. C’est donc ainsi que Batinfo est apparu il y a quelques semaines.

L’intégration de la librairie Batinfo a été ensuite une formalité et Glances propose donc, si une ou plusieurs batteries sont détectés, l’affichage du pourcentage de capacité restante au milieu du footer:

battery

Limitation: cette statistique est uniquement disponible sur les systèmes Linux.

Une option pour un Glances « low CPU »

Le traitement de la liste comprenant les processus est un des facteur principaux de la consommation CPU de Glances. Sur certain système (notamment les nanos PC comme les Raspberry Pi), il est conseillé de réduire le taux de rafraichissement des statistiques pour faire baisser cette consommation CPU. Cependant, si vous avez besoin d’un taux de rafraichissement important sans avoir besoin du détail des processus alors l’option -r codé par J.Renner est faite pour vous. En lançant Glances avec l’option -r, vous allez désactiver tout les traitements des processus (liste dynamique, monitored process list…) et ainsi disposer d’un Glances faiblement consommateur de CPU.

Sur ma machine de développement, l’utilisation de cette option fait passer la consommation CPU de 2.9% à 0.3%.

Détail de la CPU au lancement de Glances

Une version précédante de Glances voyait apparaître une option (activable en appuyant sur la touche ‘1’ dans Glances) permettatn d’afficher le détail de la CPU par coeur et non plus globalement. Une nouvelle option sur la ligne de commande (-1) permet de lancer par défaut ce mode d’affichage.

per-cpu

IPv6

Enfin un vrai support IPv6 pour le mode client serveur de Glances.

A tester simplement et localement avec:

glances -s -B ::0

pour lancer le serveur en mode IPv6 avec un bind sur toutes les interfaces.

Puis ensuite on lance le client sur le localhost IPv6:

glances -c ::1

Et puis…

Quelques autre petites nouveautés:

  • Platform/architecture is more specific now
  • Add support for local conf file
  • Add a uninstall script
  • Add getNetTimeSinceLastUpdate() getDiskTimeSinceLastUpdate() and getProcessDiskTimeSinceLastUpdate() in the API
  • Add more translation: Italien, Chinese

Conclusion

Tout d’abord un grand merci aux principaux contributeurs de cette nouvelle version:

Ensuite, je compte sur vous pour tester cette nouvelle version qui est dès à présent disponible sous Pypi (les packages Debian, BSD, Windows et Mac ne devrait pas trop tarder).

Installation et mise à jour de Glances 1.7

Si vous avez installé Glances via Pypi (ce que je conseille), une mise à jour peut se faire simplement via la ligne de commande:

sudo pip install --upgrade Glances

Pour une installation toute fraîche (pour les nouveaux venus ayant les droits root):

sudo pip install Glances

ou la commande équivalente pour une installation locale (pour les nouveaux venus sans les droits root):

pip install --user Glances

Si vous préférerez utiliser les packages Debian/Ubuntu, Windows et Mac OS, il va falloir attendre un peu que mes « packagers » attitrés bossent un peu.

J’attend vos retours sur les commentaires suivants ou vos retour de bug/demande d’amélioration sur le site du dépôt officiel.

Catégories
Developpement Open-source Planet-libre Systeme

BatInfo, une lib Python pour vos batteries

Je souhaitais ajouter dans Glances un plugin permettant de superviser l’état des batteries. J’ai donc commencé à chercher une librairie Python permettant de s’acquiter le plus simplement possible de cette tache qui sous un système GNU/Linux consiste à analyser le répertoire /sys/class/power_supply maintenu à jour par le noyau Linux.

Comme je n’ai pas trouvé mon bonheur, j’ai donc décidé de développer un librairie Python: BatInfo.

Les sources de cette librairie sont disponibles sur Github en licence LGPL.

Installation

L’installation sur votre système peut se faire simplement via la librairie Pypi:

sudo pip install batinfo

L’utilisation de la librairie dans vos développement Python est la suivante, on commence par inclure la librairie:

import batinfo

Puis on créé une instance (bat) de la classe principale (batteries):

bat = batinfo.batteries()

On peut récupérer les données brutes (format JSON) en utilisant:

bat.stat

[{"status": "Full", "capacity": 50, "name": "CMB1", "uevent": "POWER_SUPPLY_NAME=CMB1\nPOWER_SUPPLY_STATUS=Full\nPOWER_SUPPLY_PRESENT=1\nPOWER_SUPPLY_TECHNOLOGY=Li-ion\nPOWER_SUPPLY_CYCLE_COUNT=0\nPOWER_SUPPLY_VOLTAGE_MIN_DESIGN=10800000\nPOWER_SUPPLY_VOLTAGE_NOW=12496000\nPOWER_SUPPLY_CURRENT_NOW=0\nPOWER_SUPPLY_CHARGE_FULL_DESIGN=5800000\nPOWER_SUPPLY_CHARGE_FULL=5800000\nPOWER_SUPPLY_CHARGE_NOW=3900000\nPOWER_SUPPLY_CAPACITY=100\nPOWER_SUPPLY_MODEL_NAME=CP293550-01\nPOWER_SUPPLY_MANUFACTURER=Fujitsu\nPOWER_SUPPLY_SERIAL_NUMBER=01A-Z100320001158Z", "alarm": 0, "charge_full": 5800000, "voltage_now": 12496000, "serial_number": "01A-Z100320001158Z", "cycle_count": 0, "current_now": 0, "charge_now": 3900000, "voltage_min_design": 10800000, "path": "/sys/class/power_supply/CMB1", "technology": "Li-ion", "manufacturer": "Fujitsu", "type": "Battery", "model_name": "CP293550-01", "present": 1, "charge_full_design":5800000}]

Les données brutes se présentent sous la forme d’une liste de dictionnaire (un dictionnaire par batterie présente sur votre système). Comme la plupart du temps les machines (portable) ont une seule batterie, on peut avoir le dictionnaire associé à cette première batterie avec:

bat.stat[0]

{"status": "Full", "capacity": 100, "name": "CMB1", "uevent": "POWER_SUPPLY_NAME=CMB1\nPOWER_SUPPLY_STATUS=Full\nPOWER_SUPPLY_PRESENT=1\nPOWER_SUPPLY_TECHNOLOGY=Li-ion\nPOWER_SUPPLY_CYCLE_COUNT=0\nPOWER_SUPPLY_VOLTAGE_MIN_DESIGN=10800000\nPOWER_SUPPLY_VOLTAGE_NOW=12496000\nPOWER_SUPPLY_CURRENT_NOW=0\nPOWER_SUPPLY_CHARGE_FULL_DESIGN=5800000\nPOWER_SUPPLY_CHARGE_FULL=5800000\nPOWER_SUPPLY_CHARGE_NOW=3900000\nPOWER_SUPPLY_CAPACITY=100\nPOWER_SUPPLY_MODEL_NAME=CP293550-01\nPOWER_SUPPLY_MANUFACTURER=Fujitsu\nPOWER_SUPPLY_SERIAL_NUMBER=01A-Z100320001158Z", "alarm": 0, "charge_full": 5800000, "voltage_now": 12496000, "serial_number": "01A-Z100320001158Z", "cycle_count": 0, "current_now": 0, "charge_now": 3900000, "voltage_min_design": 10800000, "path": "/sys/class/power_supply/CMB1", "technology": "Li-ion", "manufacturer": "Fujitsu", "type": "Battery", "model_name": "CP293550-01", "present": 1, "charge_full_design":5800000}

Les statistiques présentes dans le dictionnaire dépende de votre batterie. Mais on retrouve un certain nombre d’informations génériques comme par exemple la capacité restante (en %):

bat.stat[0].capacity

50

la capacité maximale:

bat.stat[0].charge_full

5800000

ou encore la capacité courante:

bat.stat[0].charge_now

3900000

On peut aussi avoir des informations constructeurs:

bat.stat[0].manufacturer

'Fujitsu'

bat.stat[0].technology

'Li-ion'

En espérant que cette librairie soit utile à certains. Si vous avez des remarques/rapports de bug à faire, merci d’utiliser le Github: https://github.com/nicolargo/batinfo/issues

Il ne me reste plus, pour ma part, qu’à intégrer cela dans Glances.