Duvida AWK [RESOLVIDO]

13. Re: Duvida AWK [RESOLVIDO]

cr0n
_di0

(usa FreeBSD)

Enviado em 21/02/2013 - 14:54h

Dependendo do contexto do uso, não é necessário conectar diretamente ao console para obter certas informações. O Asterisk disponibiliza de uma opção que redireciona a saída para o terminal, o que ajuda justamente em uso com scripts externos, um exemplo extremamente simples:


asterisk -rx "sip show peers" | awk '{print $1}'


Se for útil, basta ajustá-lo conforme necessidade.


  


14. Re: Duvida AWK [RESOLVIDO]

Victor
detoniks

(usa Debian)

Enviado em 21/02/2013 - 14:58h

Esse script que citei funcionou e listou o seguinte:

1122 Offine
1234 Offine
7777 Offine
9990 Offine
9994 Offine
9995 Online
9996 Offine
9997 Offine
9998 Offine
9999 Offine


Ele pegou só a coluna de ramais, soh preciso adaptar pra pegar os valores que eu quero


15. Re: Duvida AWK [RESOLVIDO]

cr0n
_di0

(usa FreeBSD)

Enviado em 21/02/2013 - 15:03h

O script utiliza o asterisk redirecionando a saída para o terminal, conforme citei. Agora basta adaptar. Boa sorte.


16. Re: Duvida AWK [RESOLVIDO]

Victor
detoniks

(usa Debian)

Enviado em 21/02/2013 - 15:09h

_di0 escreveu:

O script utiliza o asterisk redirecionando a saída para o terminal, conforme citei. Agora basta adaptar. Boa sorte.


sim, vlw pessoal
Depois que fizer o script completo posto aqui, vai que um dia serve pra alguem


17. Re: Duvida AWK [RESOLVIDO]

Victor
detoniks

(usa Debian)

Enviado em 21/02/2013 - 15:58h

Bom , consegui em partes, porem estou mostrando na tela assim


INSERT INTO PEERS (RAMAL, HOST , LATENCIA, STATUS) VALUES (9996, (Unspecified), 0, Offine);
INSERT INTO PEERS (RAMAL, HOST , LATENCIA, STATUS) VALUES (9995, 172.31.16.104, (27, Online);

Nem preciso dizer que vai dar [*****] na hora de inserir realmente no banco neh? =/

Preciso cortar os "(" e ")" que contem no campo "(Unspecified)" e "(27" ...
Alguem faz alguma ideia de como posso remove-los?

grato



18. Re: Duvida AWK [RESOLVIDO]

cr0n
_di0

(usa FreeBSD)

Enviado em 21/02/2013 - 16:24h

Em se tratando de um dado frívolo, o sed está de bom tamanho:


asterisk -rx 'sip show peers' | grep -v Name | grep -v Verbosity | grep -v peers | tr -s " " ";" | sed 's/[()]//g'



19. Re: Duvida AWK [RESOLVIDO]

Victor
detoniks

(usa Debian)

Enviado em 21/02/2013 - 16:26h

_di0 escreveu:

Em se tratando de um dado frívolo, o sed está de bom tamanho:


asterisk -rx 'sip show peers' | grep -v Name | grep -v Verbosity | grep -v peers | tr -s " " ";" | sed 's/[()]//g'


Perfeito fera, brigadão


20. Re: Duvida AWK [RESOLVIDO]

Victor
detoniks

(usa Debian)

Enviado em 25/02/2013 - 09:24h

Voltei, pq em um outro servidor tive um problema.

Como eu citei existem linhas que a coluna nao tem valor:

ex:
113/113 186.220.36.32 D N 47208 OK (87 ms)
7999/7999 172.31.22.3 D A 5060 OK (12 ms)
7901/7901 172.31.18.84 D N A 5062 OK (249 ms)
8127/8127 172.31.19.125 5062 OK (28 ms)

Como vcs podem ver os campos D, N e A, em alguns casos existem e em outros não

Eu preciso somente do primeiro campo, do segundo campo e do ULTIMO campo..O primeiro e o segundo sempre to pegando certo, meu script ta assim:

#!bin/sh

for i in $(sudo asterisk -rx 'sip show peers' | grep -v Name | grep -v Verbosity | grep -v peers | tr -s " " ";" | sed 's/[()]//g'); do

RAMAL=$(echo ${i} | cut -d";" -f1 | cut -d"/" -f1)
IP=$(echo ${i} | cut -d";" -f2)
LATENCIA=$(echo ${i} | cut -d";" -f8)


if [ $IP != "(Unspecified)" ];then
STATUS="Online"

else
STATUS="Offine"
LATENCIA=0
fi

echo "INSERT INTO PEERS (RAMAL, HOST , LATENCIA, STATUS) VALUES ($RAMAL, $IP, $LATENCIA, $STATUS);"
done


Precisaria que o campo latencia, fosse o ultimo campo e não o -f8 como estou usando

Alguem?



21. Re: Duvida AWK [RESOLVIDO]

cr0n
_di0

(usa FreeBSD)

Enviado em 25/02/2013 - 17:33h

Você vai fazer a mesma filtragem para os dados que deseja ignorar, o problema de coluna você pode tratar com awk, qual a dificuldade?

O Asterisk, fornece uma interface(Asterisk Manager Interface(AMI)) que permiti executar comandos, ler eventos, entre outras, através de qualquer linguagem que tenha a API disponível. É o caso do Perl, por exemplo, o qual oferece um módulo para essa tarefa. Um exemplo:



use warnings;
use strict;
use Asterisk::AMI::Common;

my $manager = Asterisk::AMI::Common->new(PeerAddr => '127.0.0.1', # IP do Servidor Asterisk
PeerPort => '5038', # Porta do Servidor Asterisk
# No caso do AMI, TCP port 5038 conforme padrao no manager.conf.
Username => 'admin', # Usuario com acesso AMI
Secret => 'senha' # Senha para conectar atraves do AMI
);

die "Nao foi possivel conectar ao servidor Asterisk" unless ($manager);

my $resposta = $manager->sip_peers();

foreach my $ramal (keys $resposta) {

print "Ramal: " . $ramal;
print "\n";
print "Host: " . $resposta->{$ramal}->{'IPaddress'};
print "\n";
print "Status: " . $resposta->{$ramal}->{'Status'};
print "\n";
}


A saída será algo como:


Ramal: 3313
Host: 189.69.25.91
Status: OK (165 ms)

Seria só o caso de adaptar ao INSERT.

Os dados de autenticação é feito no arquivo manager.conf e no caso do módulo, basta instalar o pacote Asterisk::AMI




01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts