Anonymous Guest
|
Posted: Wed Oct 24, 2007 6:23 pm Post subject: Obtenir le nombre d'auditeurs courants pour chaque flux |
|
|
Je vous propose un article que j'ai écrit et publié sur : http://www.groolot.net/ concernant le recueil du nombre d'auditeurs courants sur l'ensemble des flux du serveur Icecast2 sous GNU/Linux.
Script
Code: |
! /bin/bash
#================================================
#
# Ce script a ete ecrit par :
#
AUTEUR="Gregory DAVID 'aka' groolot"
CONTACTS_WEB="http://www.groolot.net/"
#
# L'objet de ce script est de recuperer le nombre total d'auditeurs courant
# sur un serveur Icecast2
#
# Tout bug est a envoyer a l'auteur.
#
# Modifications / Bug List :
VERSION="0.1.1"
# 20 octobre 2007 - Version 0.1.1
# - Le script prend en compte la multiplicite des flux
# du serveur (aucune limite existante)
#
# 19 octobre 2007 - Version 0.1.0
# - Version initiale.
#
#================================================
### VARIABLES
FILE="/var/log/icecast/error.log"
### FIN VARIABLES
### PROGRAMME
tail -n100 $FILE | awk '
$4 == "source/source_main" {
les_flux[$8] = $10;
}
END {
for( flux in les_flux ){
print "le flux " flux " est actuellement ecoute par " les_flux[flux] " auditeurs";
}
}
'
### FIN PROGRAMME
|
Description
Nous avons besoin dans un premier temps de définir quel est le fichier sur lequel nous allons travailler.
Code: |
FILE="/var/log/icecast/error.log" |
Ensuite, nous n’avons pas besoin de tout le contenu du fichier $FILE, seul les dernières lignes nous intéressent. Par conséquent, on commence par réaliser un tail -n100 $FILE qui permet de ne sortir sur STDOUT que les 100 dernières lignes du fichier.
Nous réalisons ensuite un pipe | permettant alors de rediriger la sortie standard de l’opérande de gauche (ici la sortie de tail) vers l’entrée standard de l’opérande de droite (ici le programme awk).
Ainsi nous utilisons awk pour effectuer un filtrage sur les lignes retournées par tail.
Code: |
$4 == "source/source_main" |
permet, à la manière de grep, de ne prendre en compte dans le parcour des différentes lignes, que celles qui contiennent source/source_main en tant que 4ème champ de la ligne
est l’action effectuée pour chaque ligne correspond au critère défini au préalable : $4 == "source/source_main". Cette action stocke dans le tableau associatif de clef le champ 8 les_flux[$8] la valeur du champ 10 de la ligne courante. Comme cette action est effectuée pour chacune des lignes, seule la dernière valeur d’une clef donnée sera gardée.
Code: |
print "le flux " flux " est actuellement ecoute par " les_flux[flux] " auditeurs" |
affiche, lorsque l’ensemble des lignes a été parcouru (section END), le contenu de la variable flux correpondant à la clef et les_flux[flux] la valeur stockée pour la clef courante. |
|