Возникла следующая проблема — при опросе ip адресов, которые берутся с БД, на некоторых ip адресах зависает метод подключения.
Суть следующая — как можно игнорировать данные ip адреса?
Например, если при запросе на ip адрес не получаем ответа в течении 1 минуты, то записываем его в отдельный файл (к другим таким же).
# !/usr/bin/python3
import pypyodbc
import paramiko
import socket
from datetime import datetime
def get_all_logs(file_name):
good = []
good.append("\t\tONLINE\n")
bad = []
bad.append("\t\tOFF-LINE\n")
data = []
for x in getAllIpAndNameFromDataBase():
data.append(x)
for i in range(0, len(data)):
tmp_data = get_logg(data[i][0], data[i][1])
print(data[i][1], data[i][0])
if tmp_data.__contains__("ONLINE"):
good.append(tmp_data[9:])
else:
bad.append(tmp_data)
with open(file_name, 'a') as File:
File.writelines(good)
File.writelines(bad)
def get_logg(ip, magaz):
try:
socket.inet_aton(ip)
tmp_str = ''
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname=ip, username='admin', password='admin', port=22)
stdin, stdout, stderr = client.exec_command('system package update check-for-updates')
data = stdout.read() + stderr.read()
log = [data]
tmp_str += ("\n\t\tONLINE\n")
tmp_str += (magaz)
tmp_str += ("\n")
tmp_str += ("IP - " + ip);
tmp_str += ("\n")
for i in log:
tmp = str(i).split(' ');
tmp_str += (tmp[6][:-4] + '\n')
tmp_str += (tmp[7][:-4] + '\n')
tmp_str += ((tmp[22][:-4]).lstrip() + '\n')
except socket.error:
tmp_str += ("\n\t\tOFF-LINE\n")
tmp_str += (magaz)
tmp_str += ("\n")
tmp_str += ("IP - " + ip);
tmp_str += ("\n")
finally:
client.close()
return tmp_str
def getAllIpAndNameFromDataBase():
connection = pypyodbc.connect(
'Driver={SQL Server};'
'Server=server;'
'Database=BD;'
'uid=admin;'
'pwd=admin;'
)
curson = connection.cursor()
mySQLQuery = ("""
ЗАПРОС В БД
""")
curson.execute(mySQLQuery)
results = curson.fetchall()
connection.close()
return results
if __name__ == '__main__':
file_name = str(datetime.now().strftime("%d-%m-%Y %H-%M-%S")) + ".txt"
get_all_logs(file_name)
Вот здесь пишут, что можно выставить таймауты. В документации можно посмотреть подробнее. Попробуйте добавить все три вида таймаута (вроде бы они указываются в секундах):
client.connect(hostname=ip, username='admin', password='admin', port=22, timeout=60, banner_timeout=60, auth_timeout=60)
При превышении таймаутов должны выбрасываться исключения, не забудьте их поймать через except
, сейчас у вас ловится только один вид исключения (хотя может оно и будет выкинуто - это надо проверять).
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Имеются города city, автомойки wash и посты на них bfrs
У меня на сайте(DRUPAL) есть модуль цитата дня, каждый день меняется цитата, мне надо что бы она менялась один раз в неделю, как реализовать, я что-то...
Пример беру c интернет магазинf alloua