Manipulação de Logs [RESOLVIDO]

13. Manipulação de Logs

André
arsaraiva

(usa Ubuntu)

Enviado em 09/05/2017 - 21:58h

Olá Marcelo,

não funcionou, mais por culpa minha. Paralelamente a este projeto, fui obrigado a alterar a saída do Log, pois estava me causando diversos problemas os =, . e [].
Assim a nova saída do SORVEDOURO ficou assim:
DEBUG (0): SORVEDOURO: trans 16 origem 22 slot 1 cont 12 time=70079

E no nó de origem:
DEBUG (22): ENVIAR_PKT_DADOS: destino 0 slot 1 cont 12 time=65076

assim o tempo ficaria 70079-65076 = 5003

Sem querer abusar, consegue me ajudar a corrigir essa falha?

Outra pergunta: é possível fazer com que esse script grave um arquivo txt ou log com as saídas?
Por exemplo: o arquivo de log se chama bd-090517-214228.log (bd = nome dado por mim, 090517-214228 = data e hora adquiridos por TIMESTMP=`date +%d%m%y-%H%M%S` do simulador). Se for possível, queria salvar o resultado algo como tempo-bd-090517-214228.txt.

Desde já agradeço por disponibilizar o seu tempo para me ajudar, perdi o fim de semana tentando algo em python, que acho que não conseguiria fazer (nem sei se tem como).


  


14. Manipulação de Logs

André
arsaraiva

(usa Ubuntu)

Enviado em 09/05/2017 - 22:40h

Boa noite Marcelo,

acho que consegui ajustar a saída para o scrip rodar.
pelo menos os arquivos de sorved.txt e pkt_dados.txt foi criado corretamente, só não verifiquei ainda manualmente alguns nós.
Como postei anteriormente, é possível fazer com que esse script grave um arquivo txt ou log com as saídas?
Por exemplo: o arquivo de log se chama bd-090517-214228.log (bd = nome dado por mim, 090517-214228 = data e hora adquiridos por TIMESTMP=`date +%d%m%y-%H%M%S` do simulador). Se for possível, queria salvar o resultado algo como tempo-bd-090517-214228.txt.
Outro detalhe, no script preciso fazer manualmente a entrada do arquivo, substituindo INPUT_FILE.txt pelo bd-09....
agora surgiu um probleminha de digitação, kkkk, cada simulação é repetida 30 vezes para diversas distancias entre os nó (exemplo: simulo 30 vezes para nós com distâncias de 2mts, +30 para 3mts, 4......25mts)
É possível otimizar isso, de forma a trocar o INPUT_FILE.txt por bd-* e ele ler os trocentos arquivos, um a um sem depender de eu digitar os nomes.
Pensei em algo como um for com data e hora do primeiro até data e hora do último (esses dois eu digitaria), bem, estou pensando em python, não sei como fazer em script.



15. Re: Manipulação de Logs [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 09/05/2017 - 22:59h

arsaraiva escreveu:

Olá Marcelo,

não funcionou, mais por culpa minha. Paralelamente a este projeto, fui obrigado a alterar a saída do Log, pois estava me causando diversos problemas os =, . e [].
Assim a nova saída do SORVEDOURO ficou assim:
DEBUG (0): SORVEDOURO: trans 16 origem 22 slot 1 cont 12 time=70079

E no nó de origem:
DEBUG (22): ENVIAR_PKT_DADOS: destino 0 slot 1 cont 12 time=65076

assim o tempo ficaria 70079-65076 = 5003

Sem querer abusar, consegue me ajudar a corrigir essa falha?

Outra pergunta: é possível fazer com que esse script grave um arquivo txt ou log com as saídas?
Por exemplo: o arquivo de log se chama bd-090517-214228.log (bd = nome dado por mim, 090517-214228 = data e hora adquiridos por TIMESTMP=`date +%d%m%y-%H%M%S` do simulador). Se for possível, queria salvar o resultado algo como tempo-bd-090517-214228.txt.

Desde já agradeço por disponibilizar o seu tempo para me ajudar, perdi o fim de semana tentando algo em python, que acho que não conseguiria fazer (nem sei se tem como).


fui obrigado a alterar a saída do Log . . .
Cara, que maldade.....
Montei o maior "SEDão" para limpar o log . . . rsrsrsr
Vou adequar o "SED" . . .

Outra pergunta: é possível fazer com que esse script grave um arquivo txt ou log com as saídas?
Sim, é possível . . . Extremanente simples . . . .

Atualmente a saida está assim:

—————————————————————————————————————————
Origem: DEBUG=8
Controle: cont=3
Tempo Gasto: 354
—————————————————————————————————————————
—————————————————————————————————————————
Origem: DEBUG=18
Controle: cont=13
ENVIAR_PKT_DADOS não encontrado
—————————————————————————————————————————
—————————————————————————————————————————
Origem: DEBUG=6
Controle: cont=9
ENVIAR_PKT_DADOS não encontrado
—————————————————————————————————————————

Qdo não encontra, printa em VERMELHO e qdo encontra, em VERDE.... Isso na tela . . . :)

Qto as alterações, tirou os colchetes, trocou tempo por time em "ENVIAR_PKT_DADOS", incluiu sinal de = . . .
O que vai complicar um pouco é essa troca de tempo para time . . . . Como estava, era bastante pratico,
Com tempo=19668, já gero a var tempo
e com time=1234, gero a var time e depois faço a subtração . . . .
Não da para deixar um em minúscula e outro em maiúscula, time TIME . . . facilita . . .
tentando algo em python . . .
Python é até mais "fácil" que ShellScript, só que tó mto enferrujado, mais de um ano sem mexer . . . .

Qto ao nome do arquivo de saída.
Vc quer a mesma data e hora do nome do arquivo de log ou o Tstamp da hora que a "saída" foi gerada?

Te+
mso





16. Manipulação de Logs

André
arsaraiva

(usa Ubuntu)

Enviado em 10/05/2017 - 09:30h

Bom dia Marcelo,

poxa, foi mal a maldade, pensei até que estava ajudando, tentando padronizar tudo.
Bem, em relação ao vou alterar o sorvedouro para TIME=. Então vai ficar assim:
DEBUG (0): SORVEDOURO: trans 16 origem 22 slot 1 cont 12 TIME=70079.

Na saída, se for possivel fazer colunas e linha seria melhor, algo como:
origem controle tempo
8 3 354
18 13 0 (não foi encontrado)

Não precisa ser colorido e nada para não te dar trabalho.
Seria ótimo se os arquivos gerados (ARQ_SORVE, ARQ_PKT_DADOS) e a saída (pode ser chamada de LATENCIA) ficassem como a entrada. Exemplo:
Entrada: bd-090517-214228.log
ARQ_SORVE_bd-090517-214228
ARQ_PKT_DADOS_bd-090517-214228
LATENCIA_bd-090517-214228

Obrigado mais uma vez.


17. Re: Manipulação de Logs [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 10/05/2017 - 11:31h

arsaraiva escreveu:

Bom dia Marcelo,

poxa, foi mal a maldade, pensei até que estava ajudando, tentando padronizar tudo.
Bem, em relação ao vou alterar o sorvedouro para TIME=. Então vai ficar assim:
DEBUG (0): SORVEDOURO: trans 16 origem 22 slot 1 cont 12 TIME=70079.

Na saída, se for possivel fazer colunas e linha seria melhor, algo como:
origem controle tempo
8 3 354
18 13 0 (não foi encontrado)

Não precisa ser colorido e nada para não te dar trabalho.
Seria ótimo se os arquivos gerados (ARQ_SORVE, ARQ_PKT_DADOS) e a saída (pode ser chamada de LATENCIA) ficassem como a entrada. Exemplo:
Entrada: bd-090517-214228.log
ARQ_SORVE_bd-090517-214228
ARQ_PKT_DADOS_bd-090517-214228
LATENCIA_bd-090517-214228

Obrigado mais uma vez.


Bom dia arsaraiva.
Não precisa ser colorido e nada para não te dar trabalho.
A COR foi o que deu menos trabalho . . . rsrsrsr

Faça as alterações no log depois me mande um "trecho" dele, com umas 1000 linhas . . . .
Vou te mandar uma mensagem p/ que tenha meu email . . .

Te+
Marcelo Oliver



18. Manipulação de Logs

André
arsaraiva

(usa Ubuntu)

Enviado em 10/05/2017 - 20:37h

Boa noite Marcelo,

enviei por e-mail um log como você pediu. Chegou a recebe-lo?


19. Re: Manipulação de Logs [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 12/05/2017 - 17:21h

Boa tarde André.
Se não ocorrer mais alterações, esta finalizado . . . . rsrsrsrsr.
A 1ª pergunta, é referente ao diretório onde estão os logs,
coloque o caminho a partir da raiz, exemplo:
/home/user/ARQS-LOG/ 
#BARRA NAS DUAS EXTREMIDADES
Feito isso, é mostrada uma listagem com os logs encontrados no diretório informado,
Informe o Nº do log . . .
Pronto.

#!/bin/bash
CVM='\x1B[0;38;5;196m'
CVD='\x1B[0;38;5;2m'
FC='\x1B[m'

PEGA_ARQ() {
>log.txt;LOG="log.txt";tput clear
read -p " Indique o DIRETóRIO contendo os logs: " DIRLOG
echo -e "\n Localizando ARQUIVOS de log em $DIRLOG"
find $DIRLOG -iname "*.log" >> $LOG

awk 'BEGIN{printf "\n Nº\tARQUIVOS de log\n\n";}{print " "NR" - "$0}' $LOG
NLOGREG=$(awk END'{print NR}' $LOG)
echo -en "\n Informe o Nº do ARQUIVO de log:"
read -p " " NLOG
((NLOG<1 || NLOG > NLOGREG)) && { echo -e " \n$CVM Nº INVáLIDO\n Processo Finalizado. $FC\n" ; exit ; }
ARQ_LOG=$(sed -n "${NLOG}p" $LOG)
if [ -s $ARQ_LOG ];then

TSTAMP=$(basename "$ARQ_LOG"|cut -d"." -f1)
ARQ_SOR="ARQ_SORVE_${TSTAMP}";>$ARQ_SOR
ARQ_PKT="ARQ_PKT_DADOS_${TSTAMP}";>$ARQ_PKT
ARQ_SAI="LATENCIA_${TSTAMP}";>$ARQ_SAI
PROCESSA
else
echo -e "$CVM\n ARQUIVO VAZIO ou INEXISTENTE.\n SAINDO . . . $FC \n"
exit
fi
}

PROCESSA() {
grep -E -B1 'SORVEDOURO:' $ARQ_LOG |sed '/--/d'|sed 'N;s/\n/ /'|sed -r 's/[[:alpha:]]|[[:punct:]]//g;s/[ ]+/ /g' >> $ARQ_SOR
grep -E -B2 'ENVIAR_PKT_DADOS:' $ARQ_LOG|sed '/SLOT_ATIVO:\|--/d'|sed 'N;s/\n/ /'|sed -r 's/[[:alpha:]]|[[:punct:]]//g;s/[ ]+/ /g' >> $ARQ_PKT
while IFS=" " read -r inic debug trans orig slot cont time;do
DADOS_PKT=$(awk '{if($2=="'$orig'" && $5=="'$cont'") print $0}' $ARQ_PKT)
if ((${#DADOS_PKT} > 0));then
fina=$(cut -d" " -f1 <<< "$DADOS_PKT")
echo "$orig $cont $((inic-fina))" >> $ARQ_SAI
else
echo "$orig $cont 0 (não foi encontrado)" >> $ARQ_SAI
fi
done<$ARQ_SOR
}

PEGA_ARQ


Att.: Marcelo


20. Manipulação de Logs

André
arsaraiva

(usa Ubuntu)

Enviado em 13/05/2017 - 13:19h

Grande Marcelo,

quem sabe faz e faz ao vivo.
Ficou maravilhoso e realmente pesei em muito mais linhas de código e com poucas linhas você resolveu um problema.
Definitivamente é a MELHOR RESPOSTA.
Queria agradecer por perder seu tempo com isso e com os inúmeros ensinamentos que me passou.
OBRIGADO!!!


21. Re: Manipulação de Logs [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 13/05/2017 - 15:44h

arsaraiva escreveu:

Grande Marcelo,

quem sabe faz e faz ao vivo.
Ficou maravilhoso e realmente pensei em muito mais linhas de código e com poucas linhas você resolveu um problema.
Definitivamente é a MELHOR RESPOSTA.
Queria agradecer por perder seu tempo com isso e com os inúmeros ensinamentos que me passou.
OBRIGADO!!!



Boa tarde André.
Agradeço os elogios . . . .
A minha "tecnica" é:
Entender o que se quer na "saída/resultado"
Analisar os dados disponíveis, se não tiver um padrão, padroniza-los.
Definir a "lógica"
Usar o "minimo" de comandos, extraindo o máximo . . .
Ao meu ver "a lógica", esta relacionada aos comandos que vc conhece associada a criatividade....

Para marcar como a MELHOR RESPOSTA, vc deve marcar o tópico como resolvido, feito isso, te dá a opção de eleger A MELHOR RESPOSTA....
É mais ou menos assim . . .
Não sei ao certo pq somente "respondo" . . . Rsrsrsrsr

Interessante:
echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -n '/^[ ]\+Se/,/dou/p')\n" 

Abç.:
MSO



22. Manipulação de Logs

André
arsaraiva

(usa Ubuntu)

Enviado em 14/05/2017 - 15:56h

Boa tarde Marcelo,


Consegui fazer rodar aqui, porém, ainda gera na raiz os arquivos arq_sorv, arq_pkt_dados e latencia, todos apenas com um número 1 (na pasta output ficou tudo certo).


Agora, encontrei uma falha na subtração.

Gerei um log aqui:

ARQ_SORV (primeira linha)
147620256368 0 11 11 1 2 15020 (corretíssimo)


ARQ_Pkt_Dados (linha 83 que faz casa com a linha do sorvedouro, já que o nó é o 11 e controle 2)
147517815531 11 0 1 2 15048

Latência (primeira linha)
11 2 147620256368


Repare que o tempo é o mesmo do sorvedouro, onde na verdade deveria ser 102440837 (147620256368 - 147517815531).


Acho que está linha é a responsável pela subtração

echo "$orig $cont $((inic-fina))" >> output/$ARQ_SAI 


Mais nem achei onde inic e fina são carregadas. kkk

Se puder me dar uma luz, o restante está maravilhoso.


Abraços






23. Manipulação de Logs

André
arsaraiva

(usa Ubuntu)

Enviado em 05/07/2017 - 13:42h

Olá Marcelo, tudo bom?

Olha só o que aconteceu: durante a execução da simulação, ele era chamado e criava os arquivos ARQ_SORVE, ARQ_PKT_DADOS e LATENCIA. Bem, eu não reparei na hora, porém diversas rodadas apresentava erro de indexação e parava a criação do arquivo de LATENCIA.
Agora eu tenho os arquivos ARQ_SORVE_xxx e ARQ_PKT_DADOS_xxx e preciso varrer os dois procurando os nós e calculando o tempo. Só para lembrar:
Tenho dois arquivos: ARQ_PKT_DADOS_grid_*.log e ARQ_SORVE_grid_*.log e em um deles tenho o tempo em que o sorvedouro recebeu o pacote e no outro o envio pelo nó do pacote.
Por exemplo:
ARQ_SORVE
65620419488 0 12 12 579 0 6370 //nó que enviou o pacote e o número de controle
127828030169 0 8 16 1158 0 12740 //nó que enviou o pacote e o número de controle
127846409021 0 3 3 1158 1 12741
127865729904 0 7 7 1158 1 12743
....

ARQ_PKT_DADOS
65260043063 30 0 579 0 6633
65275141913 13 0 579 0 6402
65292240729 33 0 579 0 6611
65298153863 34 0 579 0 6446
65303209818 17 0 579 0 6270
65308498919 21 0 579 0 6369
65405166883 6 0 579 0 6380
65407550568 16 0 579 0 6402 //nó transmissor e o controle
65409444195 24 0 579 0 6677
65411232994 23 0 579 0 6479
65478403883 1 0 579 0 6479
65484767022 12 0 579 0 6490 //nó transmissor e o controle
...

O que eu preciso é fazer justamente essa comparação e depois subtrair os tempos. Verifico o ARQ_SORVE linha a linha, peguei a primeira linha, carrego 3 variáveis (tempo, nó e cont, por exemplo) com o tempo (este valor no início da linha (65620419488), o valor do nó que enviou(12) e o número de controle(0) (estes exemplos são da primeira linha do arquivo ARQ_SORVE. Com esses dados, abro o ARQ_PKT_DADOS e vou varrendo linha por linha até achar o valor do nó (12) e o controle corretos(0) (só existe uma entrada e nunca se repete), achando eu carrego o valor do tempo em uma variável qualquer e faço a subtração do tempo armazenado na vaiável tempo (do ARQ_SORVE) com este tempo do ARQ_PKT_DADOS e sai só com o resultado em um arquivo latência.txt (por exemplo).
Olhando as linhas coloridas, a subtração é:
65620419488 – 65484767022 = 135652466
127828030169 – 65407550568 = 6242047960

O script original é:
#!/bin/bash
CVM='\x1B[0;38;5;196m'
FC='\x1B[m'
ARQ_LOG=$1

PEGA_ARQ() {
ARQ_LOG=$1
TSTAMP=$(basename "$ARQ_LOG"|cut -d"." -f1)
ARQ_SOR="ARQ_SORVE_${TSTAMP}";>output/$ARQ_SOR
ARQ_PKT="ARQ_PKT_DADOS_${TSTAMP}";>output/$ARQ_PKT
ARQ_SAI="LATENCIA_${TSTAMP}";>output/$ARQ_SAI
PROCESSA
}

PROCESSA() {
grep -E -B1 'SORVEDOURO:' $ARQ_LOG |sed '/--/d'|sed 'N;s/\n/ /'|sed -r 's/[[:alpha:]]|[[:punct:]]//g;s/[ ]+/ /g;s/^ //' >> output/$ARQ_SOR
grep -E -B2 'ENVIAR_PKT_DADOS:' $ARQ_LOG|sed '/SLOT_ATIVO:\|--/d'|sed 'N;s/\n/ /'|sed -r 's/[[:alpha:]]|[[:punct:]]//g;s/[ ]+/ /g;s/^ //' >> output/$ARQ_PKT
while IFS=" " read -r inic debug trans orig slot cont time;do
DADOS_PKT=$(awk '{if($2=="'$orig'" && $5=="'$cont'") print $0}' output/$ARQ_PKT)
if ((${#DADOS_PKT} > 0));then
fina=$(cut -d" " -f1 <<< "$DADOS_PKT")
echo "$orig $cont $((inic-fina))" >> output/$ARQ_SAI
else
echo "$orig $cont 0 (não foi encontrado)" >> output/$ARQ_SAI
fi
done<output/$ARQ_SOR
}

PEGA_ARQ $1

Mudei para tentar fazer funcionar por chamada, porém não funcionou:
#!/bin/bash
CVM='\x1B[0;38;5;196m'
FC='\x1B[m'

PEGA_ARQ() {
ARQ_SOR="ARQ_SORVE_${TSTAMP}";>output/$ARQ_SOR
ARQ_PKT="ARQ_PKT_DADOS_${TSTAMP}";>output/$ARQ_PKT
ARQ_SAI="LATENCIA_${TSTAMP}";>output/$ARQ_SAI
PROCESSA
}

PROCESSA() {
while IFS=" " read -r inic debug trans orig slot cont time;do
DADOS_PKT=$(awk '{if($2=="'$orig'" && $5=="'$cont'") print $0}' output/$ARQ_PKT)
if ((${#DADOS_PKT} > 0));then
fina=$(cut -d" " -f1 <<< "$DADOS_PKT")
echo "$orig $cont $((inic-fina))" >> output/$ARQ_SAI
else
echo "$orig $cont 0 (não foi encontrado)" >> output/$ARQ_SAI
fi
done<output/$ARQ_SOR
}

PEGA_ARQ

Os arquivos tem sempre o mesmo padrão de saída:
ARQ_SORVE_bd-030617-191958
ARQ_PKT_DADOS_bd-030617-191958

Então acho que errei aí, pois tinha que fazer uma Verificação se o final do arquivo (bd-030617-191958) são iguais para os dois.
Tentei fazer chamando arquivo por arquivo dando o nome completo, mais também não funcionou.

Poderia me ajudar a ajustar este script? Se for difícil verificar os nomes dos arquivos, eu faço manualmente, pois preciso muito é refazer os arquivos de latência.

Mais uma vez obrigado.

Abçs






01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts