Página siguiente Página anterior Índice general

12. Monitoreando el Gatekeeper

12.1 Puerto de Estado

El puerto de estado es una interfaz externa para monitorear y controlar el gatekeeper. El gatekeeper arrojará mensajes sobre las llamadas actuales hacia todos los clientes conectados y puede recibir comandos mediante esta interfaz.

Los mensajes enviados por el gatekeeper hacia el puerto de estado estan agrupados dentro de tres Niveles de rastreo de salida:

El cliente que este conectado hacia el puerto de estado puede seleccionar el nivel de salida (output level) que él desee.

La interfaz es un simple puerto TCP (por defecto: 7000), usted puede conectarse hacia éste mediante telnet u otro cliente. Un ejemplo de un cliente diferente es el Java GUI, aka GkGUI. Otro ejemplo es la aplicación Automatic Call Distribution, aka GnuGk ACD.

Areas de aplicación

Depende de usted lo que haga con el poder del puerto de estado, pero aqui hay algunas ideas:

Ejemplos:

Supongamos que usted esta interesado en los CDRs (call details records) y quiere un proceso que trabaje en modo batch en intervalos regulares.

Aqui está un script simple escrito en Perl (gnugk_cdr.pl) que inicia el gatekeeper y además conecta un simple cliente para la Status Interface y registra los CDRs dentro de un logfile. Usted debería modificar un poco este script para ajustarlo a sus necesidades.

#!/usr/bin/perl
# sample program that demonstrates how to write the CDRs to a log file
use strict;
use IO::Socket;
use IO::Handle;

my $logfile = "/home/jan/cdr.log";      # CHANGE THIS
my $gk_host = "localhost";
my $gk_port = 7000;
my $gk_pid;

if ($gk_pid = fork()) {
        # parent will listen to gatekeeper status
        sleep(1);       # wait for gk to start
        my $sock = IO::Socket::INET->new(PeerAddr => $gk_host, PeerPort => $gk_port, Proto => 'tcp');
        if (!defined $sock) {
                die "Can't connect to gatekeeper at $gk_host:$gk_port";
        }
        $SIG{HUP} = sub { kill 1, $gk_pid; };   # pass HUP to gatekeeper
        $SIG{INT} = sub { close (CDRFILE); kill 2, $gk_pid; };  # close file when terminated

        open (CDRFILE, ">>$logfile");
        CDRFILE->autoflush(1);  # don't buffer output
        while (!$sock->eof()) {
                my $msg = $sock->getline();
                $msg = (split(/;/, $msg))[0];   # remove junk at end of line
                my $msgtype = (split(/\|/, $msg))[0];
                if ($msgtype eq "CDR") {
                        print CDRFILE "$msg\n";
                }
        }
        close (CDRFILE);
} else {
        # child starts gatekeeper
        exec("gnugk");
}

Tenga siempre presente que éste es justamente un ejemplo para mostrar el uso del puerto de estado. Usted puede utilizar el módulo FileAcct para registrar los CDRs en un sistema en producción.

GUI para el gatekeeper

Hay algunas Graphical User Interface (GUI) frontends para el Gatekeeper.

12.2 Comandos (Referencia)

Esta sección muestra todos los comandos que usted puede enviar al puerto de estado (manualmente o mediante una aplicación externa). Todos los comandos son case-insensitive. Pero algunos parámetros pueden ser case-sensitive.

El comando help o h le mostrará una lista de todos los comando disponibles.

12.3 Mensajes (Referencia)

Esta sección describe los mensajes de salida hacia la interfaz de estado.


Página siguiente Página anterior Índice general