Affichage des résultats 1 à 10 sur 13

Discussion: Compter le nombre d'appels simultanés

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Senior
    Date d'inscription
    septembre 2010
    Localisation
    Where the sun shines
    Messages
    1 418
    Downloads
    0
    Uploads
    0
    tu es bien dans le répertoire ou est Master.csv (ie, /var/log/asterisl/cdr-csv) ?

    sinon, coupe la commande en 2, le premier awk d'abord, et vois ce qui sort

  2. #2
    Membre Association
    Date d'inscription
    août 2010
    Localisation
    région parisienne
    Messages
    386
    Downloads
    0
    Uploads
    0
    pardon je me suis mal exprimé,

    j'ai bien des lignes avec un nombre d'appel simultané > 0 mais je ne comprend pas pourquoi il me sort certaines lignes a 0

  3. #3
    Membre Senior
    Date d'inscription
    septembre 2010
    Localisation
    Where the sun shines
    Messages
    1 418
    Downloads
    0
    Uploads
    0
    Ok - j'y suis !

    Ce script te montre à chaque changement du nombre d'appel, le nombre d'appel et la date... par exemple:

    Code:
    2010-10-20 13:11:54 000
    2010-10-20 13:16:54 001
    2010-10-20 13:22:36 002
    2010-10-20 13:23:15 003
    2010-10-20 13:23:31 002
    2010-10-20 13:24:51 001
    2010-10-20 13:27:04 002
    2010-10-20 13:27:09 001
    2010-10-20 13:29:10 000
    2010-10-20 13:30:38 001
    tu vois qu'à 13:16:54, il y a eu un appel et que donc, 1 simultané, puis 2, puis 3, puis à 13:23:31, raccroché, on retombe à 2, etc...

    Tu sais donc précisément ta charge, et à quelle heure.

    Alternativement, tu peux faire
    grep "2010-10-19" /var/log/asterisk/cdr-csv/Master.csv | awk 'BEGIN{FS=",\""} /ANSWERED/{split($11, a, "\""); split($12, b, "\"");printf ("%s,1\n%s,-1\n", a[1],b[1]); }' | sort | awk -F , '{cpt=cpt+$2; printf ("%s %01d\n", $1, cpt);}' | awk 'BEGIN {pdur=0;}{ if (pdur==0){pdur=substr($2,0,2)*60*60+substr($2,4,2) *60+substr($2,7,2); pc=$3; mcc=0;}else{ dur=substr($2,0,2)*60*60+substr($2,4,2)*60+substr( $2,7,2); d[pc] = d[pc]+dur-pdur; nc[pc]++; pdur=dur; pc=$3;} } END {for (i in d) { if (i>0) printf ("%d: Calls=%d, Min= %6.2f\n",i, nc[i],d[i]/60); }}'`

    (j'avoue, j'aime bien awk... remplacer dans le premier grep la date du jour)
    qui va te produire par nombre d'appels simultanés, le temps passé, et le nombre d'appels à ce moment:
    1: Calls=68, Min= 97.50
    2: Calls=41, Min= 44.63
    3: Calls=10, Min= 5.20

    il y a eu 68 moments avec 1 appel simultané, ca a duré 97 min
    il y a eu 41 moments avec 2 appel simultané, ca a duré 44 min
    il y a eu 10 moments avec 3 appel simultané, ca a duré 10 min

    donc, je vois que ce serveur tourne majoritairement avec 1 appel simultané, petites pointes à 3

  4. #4
    Membre Association
    Date d'inscription
    août 2010
    Localisation
    région parisienne
    Messages
    386
    Downloads
    0
    Uploads
    0
    Ok j'ai compris.

    je pense que je vais te donner le titre de "Mister Awk" sur le forum

    merci pour les infos.

  5. #5
    Membre
    Date d'inscription
    septembre 2010
    Messages
    57
    Downloads
    0
    Uploads
    0
    Merci pour ces commandes, mais n'étant pas très à l'aise avec awk, je recherche une méthode utilisant des requêtes mysql.
    A part faire une usine à gaz, je ne suis pas arrivé au but escompté, donc je fait appel à vous.

  6. #6
    Membre Senior
    Date d'inscription
    septembre 2010
    Localisation
    Where the sun shines
    Messages
    1 418
    Downloads
    0
    Uploads
    0
    ahhh.. si tu savais.... tout ce qu'on peut faire avec Awk !!! c'est vraiment de la balle, avec un p'tit grep, le tout arrosé de sed !!!

    mais bon... mysql est pas mal non plus, tu obtiens la même chose (ie, même résultat cf plus haut sur les explications) avec ca:

    SET @cpt = 0;

    SELECT evttime, @cpt := @cpt + typevt AS totcalls
    FROM (SELECT starttime AS evttime, 1 AS typevt FROM cc_call
    UNION ALL
    SELECT stoptime AS evttime, -1 AS typevt
    FROM cc_call
    ORDER BY 1 ASC, 2 DESC) allcalls
    WHERE evttime > '2010-11-01';

    Je l'exécute avec Toad, mais ca marche aussi depuis mysql en commande ligne (attention, il y a deux lignes, le SET puis le SELECT)

    Ca marche avec une bdd A2BILLING, il suffit de remplacer starttime, stoptime et cc_call avec les équivalents dans ta base

    Enjoy....

  7. #7
    Membre
    Date d'inscription
    septembre 2010
    Messages
    57
    Downloads
    0
    Uploads
    0
    Merci beaucoup, c'est exactement ça.

    Voici la requête pour la table cdr d'asterisk :
    Code:
    SET @cpt = 0;
    SELECT evttime, @cpt := @cpt + typevt AS totcalls FROM (SELECT calldate AS evttime, 1 AS typevt FROM cdr UNION ALL SELECT adddate(calldate, interval duration second) AS evttime, -1 AS typevt FROM cdr ORDER BY 1 ASC, 2 DESC) allcalls WHERE evttime > '2010-10-01';

  8. #8
    Membre Association Avatar de quintana
    Date d'inscription
    août 2010
    Localisation
    Québec
    Messages
    1 084
    Downloads
    0
    Uploads
    0
    Citation Envoyé par jean Voir le message
    Alternativement, tu peux faire:

    grep "2010-10-19" /var/log/asterisk/cdr-csv/Master.csv | awk 'BEGIN{FS=",\""} /ANSWERED/{split($11, a, "\""); split($12, b, "\"");printf ("%s,1\n%s,-1\n", a[1],b[1]); }' | sort | awk -F , '{cpt=cpt+$2; printf ("%s %01d\n", $1, cpt);}' | awk 'BEGIN {pdur=0;}{ if (pdur==0){pdur=substr($2,0,2)*60*60+substr($2,4,2) *60+substr($2,7,2); pc=$3; mcc=0;}else{ dur=substr($2,0,2)*60*60+substr($2,4,2)*60+substr( $2,7,2); d[pc] = d[pc]+dur-pdur; nc[pc]++; pdur=dur; pc=$3;} } END {for (i in d) { if (i>0) printf ("%d: Calls=%d, Min= %6.2f\n",i, nc[i],d[i]/60); }}'`
    Sérieux Jean
    Découvrez Wazo sous licence GPLv3 et accessible pour tous : http://www.wazo.community
    Blog Wazo : http://blog.wazo.community
    Wazo est un fork de XiVO.
    Suivez moi sur Twitter !

  9. #9
    Membre Senior
    Date d'inscription
    septembre 2010
    Localisation
    Where the sun shines
    Messages
    1 418
    Downloads
    0
    Uploads
    0
    y'a des fois j'abuse..... c'est vrai... en plus, je suis sur qu'en perl, ca se fait 3 fois plus vite.... dans une prochaine vie ;-)

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •