[Asterisk] Connaître son nombre d'appels simultanés
17/06/2018
Nous présentons dans cet article comment connaître son nombre d'appels simultanés en temps réel, ainsi que le nombre exact d'appels simultanés qu'il y a eu sur une plage de temps donnée.
Nombre d'appels simultanés en temps réel
Connaître son nombre d'appels simultanés en temps réel est très simple : Asterisk fournit directement une commande pour ça :
asterisk*CLI> core show channels
Le résultat de la commande ressemble à ceci :
Channel Location State Application(Data) SIP/1001-00009867 s@user:36 Up Dial(SIP/1002,15,hHtT) SIP/1002-00009876 (None) Up AppDial((Outgoing Line)) 2 active channels 1 active calls 4012 calls processed
Cette commande permet de lister les appels en cours. Elle précise également le nombre d'appels passés depuis le démarrage du service Asterisk. Dans notre exemple, on y apprend qu'il y a un appel en cours (1 active calls).
Dans notre cas, l'information que nous cherchons à récupérer est simplement la valeur de la ligne "active calls". Pour cela, nous proposons de passer par un script SHELL :
root@asterisk1:~# asterisk -rx 'core show channels' | grep 'active calls' | cut -f 1 -d ' '
Dans le code ci-dessus, si l'on détaille chaque étape (séparée par un pipe), nous avons :
asterisk -rx 'core show channels'
Exécute la commande "core show channels" et retourne le résultat dans le SHELL
grep 'active calls'
Ne récupère que la ligne comportant la mention "active calls" (c'est uniquement elle qui nous intéresse).
cut -f 1 -d ' '
Permet de découper l'affichage en prenant les espaces comme marque de délimitation (option -d ' ') et de n'afficher que le premier segment (option -f 1).
Pour reprendre notre exemple, le résultat de la commande sera alors :
root@asterisk1:~# asterisk -rx 'core show channels' | grep 'active calls' | cut -f 1 -d ' ' 1
Nombre d'appels simultanés sur une période donnée
Pour obtenir le nombre d'appels simultanés sur une période de temps donnée, nous proposons d'utiliser la ligne de commande fournie par Jean du forum asterifk-france.org.
La commande est la suivante :
awk 'BEGIN{FS=",\""} /ANSWERED/{split($11, a, "\""); split($12, b, "\"");printf ("%s,1\n%s,-1\n", a[1],b[1]); }' /var/log/asterisk/cdr-csv/Master.csv | sort | awk -F , '{cpt=cpt+$2; printf ("%s %03d\n", $1, cpt);}'
Cette commande filtre le contenu du fichier Master.csv sur chaque changement du nombre d'appels simultanés. Le résultat est affiché dans la console. Il est de la forme suivante :
2015-06-11 08:38:19 004 2015-06-11 08:38:30 005 2015-06-11 08:38:55 004 2015-06-11 08:39:10 003 2015-06-11 08:39:13 004 2015-06-11 08:39:42 003 2015-06-11 08:41:42 002 2015-06-11 08:42:35 001 2015-06-11 08:42:46 002 2015-06-11 08:43:50 001
Le premier champ indique la date, le second l'horaire auquel le changement du nombre d'appels simultanés a eu lieu et le troisième le nombre d'appels simultanés.
Limiter le résultat à un contexte
Si l'on souhaite, nous pouvons également limiter le résultat à un contexte en particulier. Exemple :
awk 'BEGIN{FS=",\""} /monContexte/*/ANSWERED/{split($11, a, "\""); split($12, b, "\"");printf ("%s,1\n%s,-1\n", a[1],b[1]); }' /var/log/asterisk/cdr-csv/Master.csv | sort | awk -F , '{cpt=cpt+$2; printf ("%s;%03d\n", $1, cpt);}'
Le décompte ne se fera alors que sur le nombre d'appels simultanés du contexte "monContexte".
Écrire le résultat dans un fichier pour l'exploiter
Plutôt que d'afficher les résultats à l'écran, nous les écrivons dans un fichier texte :
awk 'BEGIN{FS=",\""} /ANSWERED/{split($11, a, "\""); split($12, b, "\"");printf ("%s,1\n%s,-1\n", a[1],b[1]); }' /var/log/asterisk/cdr-csv/Master.csv | sort | awk -F , '{cpt=cpt+$2; printf ("%s %03d\n", $1, cpt);}' > monFichier.csv
Ce fichier peut ensuite être importé dans un tableur type LibreOffice ou Excel, en précisant que la séparation des champs se fait sur les espaces :
Dans LibreOffice :
Dans Excel :
On peut ensuite faire des tris ou appliquer des filtres sur ces données !
Pour aller plus loin
[Asterisk] Les commandes utiles pour Asterisk
[Asterisk] Mettre à jour son serveur Asterisk
Tous nos articles classés par thème
Voir un article au hasard
Vous avez aimé cet article ? Vous cherchez un support professionnel ? Alors contactez-nous.
Retrouvez nos services et firewall pour pfSense & OPNsense
2 commentaires
Nathan - 21/07/2017 à 13:30:07
Bonjour
Le scripts fait des recherche sur une période de temps données. Malheureusement nouveau dans la mise en place de script, a quel endroit dans le script on définie la période de recherche ?
Pouvez-vouz expliquer le script suivant (de facon rapide)
awk 'BEGIN{FS=",\""} /ANSWERED/{split($11, a, "\""); split($12, b, "\"");printf ("%s,1\n%s,-1\n", a[1],b[1]); }' /var/log/asterisk/cdr-csv/Master.csv | sort | awk -F , '{cpt=cpt+$2; printf ("%s %03d\n", $1, cpt);}' > monFichier.csv
Merci d'avance.
Guillaume - 25/07/2017 à 08:21:06
@Nathan :
Bonjour,
Ce script extrait les données du fichier "Master.csv" sans faire de filtre sur une période. Une fois les données extraites dans le fichier "monFichier.csv", vous pouvez l'ouvrir avec Excel ou LibreOffice et y appliquer le filtre voulu.
Cordialement,
Guillaume
--
Provya
Flux RSS des commentaires de cet article