-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMonitorADSL.py
More file actions
153 lines (135 loc) · 6.01 KB
/
MonitorADSL.py
File metadata and controls
153 lines (135 loc) · 6.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#coding: utf-8
#===================================================================================
# Script para monitoramento de quedas de conexão ADSL
# Monitora o modem ADSL2+ TP-LINK TD-8816 via Telnet
# O referido modem tem alguns comportamentos anormais quando o ADSL cai
# Logo não estranhe algumas checagem que parecem redundantes entre outros
#===================================================================================
import sys
import telnetlib
import time
import socket
host = "192.168.0.253"
password = "seu_password_aqui"
uptime = ""
uptime_antigo = []
uptime_atual = []
tempo_maximo_conectado = []
quantidade_quedas_adsl = 0
quantidade_voltou_ar_adsl = 0
def conecta_no_servidor():
tn = telnetlib.Telnet(host)
return tn
def autentica_no_servidor(tn):
resposta = tn.read_until("Password: ")
tn.write(password + "\n")
def obtem_resposta_do_servidor(tn):
resposta = "Erro"
try:
resposta = tn.read_until("TP-LINK> ", 5)
except EOFError:
print "Aconteceu algum erro!"
except socket.error:
print "Erro na obtenção da resposta. Provavelmente o servidor fechou a conexão!"
return "Erro"
return resposta
def envia_comando_para_servidor(tn):
# QUANDO A NET CAI, ELE FICA BOMBARDEANDO O MODEM COM ESTE COMANDO
try:
tn.write("show wan adsl uptime\n")
except socket.error:
print "Provavelmente o servidor fechou a conexão!"
def transforma_em_tempo(tempo_modem):
horas = tempo_modem[tempo_modem.find(':')-2:tempo_modem.find(':')]
minutos = tempo_modem[tempo_modem.find(':')+1:tempo_modem.find(':')+3]
segundos = tempo_modem[tempo_modem.find(':')+4:tempo_modem.find(':')+6]
print "Horas: ", horas
print "Minutos: ", minutos
print "Segundos: ", segundos
tempo = [horas, minutos, segundos]
return tempo
def modem_caiu():
global quantidade_quedas_adsl
global quantidade_voltou_ar_adsl
global tempo_maximo_conectado
global uptime
if(quantidade_voltou_ar_adsl == 0) or (uptime_antigo[0] > uptime_atual[0]) or (uptime_antigo[0] == uptime_atual[0]) and (uptime_antigo[1] > uptime_atual[1]):
quantidade_quedas_adsl = quantidade_quedas_adsl + 1
quantidade_voltou_ar_adsl = 1
calcula_uptime(uptime)
print ""
print "Caiu internet do Modem ADSL!"
print "Tempo maximo conectado: ", tempo_maximo_conectado
print "Tempo maximo conectado: %s:%s:%s" % (tempo_maximo_conectado[0], tempo_maximo_conectado[1], tempo_maximo_conectado[2])
print "Tempo máximo funcionando com defasagem de dez segundos: %s:%s:%s" % (uptime_antigo[0], uptime_antigo[1], uptime_antigo[2])
print "Tempo atual reportado pelo modem: %s:%s:%s" % (uptime_atual[0], uptime_atual[1], uptime_atual[2])
print "Total de quedas ADSL até o momento: %d" % quantidade_quedas_adsl
def calcula_uptime(tempo_modem):
global uptime_antigo
global uptime_atual
global tempo_maximo_conectado
if not uptime_antigo:
uptime_antigo = transforma_em_tempo(tempo_modem)
else:
uptime_antigo = uptime_atual
uptime_atual = transforma_em_tempo(tempo_modem)
if not tempo_maximo_conectado:
tempo_maximo_conectado = uptime_atual
elif(uptime_atual[0] > tempo_maximo_conectado[0]) or (uptime_atual[0] == tempo_maximo_conectado[0]) and (uptime_atual[1] > tempo_maximo_conectado[1]):
tempo_maximo_conectado = uptime_atual
print ""
print "======================================================"
print "UPTIME"
print "quantidade_voltou_ar_adsl: ", quantidade_voltou_ar_adsl
print "Tempo maximo conectado: ", tempo_maximo_conectado
print "uptime_antigo: ", uptime_antigo
print "uptime_atual: ", uptime_atual
print "quantidade_quedas_adsl: ", quantidade_quedas_adsl
print "======================================================"
print ""
def inicio():
global quantidade_voltou_ar_adsl
tn = conecta_no_servidor()
autentica_no_servidor(tn)
n = 1
while(n != 0):
resposta = obtem_resposta_do_servidor(tn)
if(resposta.find('ADSL') > 0):
uptime = resposta[resposta.find(':')-2:resposta.rfind('\r\n')]
print ""
print "======================================================"
print "Uptime: ", uptime
calcula_uptime(uptime)
print "======================================================"
time.sleep(10)
if(quantidade_voltou_ar_adsl == 1):
quantidade_voltou_ar_adsl = 0
elif(resposta == "Erro"):
tn = conecta_no_servidor()
autentica_no_servidor(tn)
elif(resposta.find('adsl modem not up') > 0):
print ""
print "======================================================"
print "ADSL MODEM NOT UP"
print "quantidade_voltou_ar_adsl: ", quantidade_voltou_ar_adsl
print "Tempo maximo conectado: ", tempo_maximo_conectado
print "uptime_antigo: ", uptime_antigo
print "uptime_atual: ", uptime_atual
print "quantidade_quedas_adsl: ", quantidade_quedas_adsl
print "======================================================"
print ""
print ""
print "======================================================"
print "CAIU MESMO"
print "quantidade_voltou_ar_adsl: ", quantidade_voltou_ar_adsl
print "Tempo maximo conectado: ", tempo_maximo_conectado
print "Tempo máximo funcionando com defasagem de dez segundos: %s:%s:%s" % (uptime_antigo[0], uptime_antigo[1], uptime_antigo[2])
print "Tempo atual reportado pelo modem: %s:%s:%s" % (uptime_atual[0], uptime_atual[1], uptime_atual[2])
print "Total de quedas ADSL até o momento: %d" % quantidade_quedas_adsl
print "======================================================"
modem_caiu()
if(quantidade_voltou_ar_adsl == 1):
quantidade_voltou_ar_adsl = 0
time.sleep(10)
envia_comando_para_servidor(tn)
inicio()