🧙Конкурс сказок!
(OFF) Lolbefree (B) 15 июн 2018

Не получается подобрать логику

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import telebot
import config
from ping3 import ping
import time
import Hosts


bot = telebot.TeleBot(config.token)

response_host = ''

count = 0

def not_available():
for host in Hosts.host:
response_host = ping(host, )
if response_host == None:
bot.send_message(config.chat_id, f"{host} ,— хост не доступен")
time.sleep(3)
print('недоступен')
if response_host != None:
is_available()


def is_available():
for index, host in enumerate(Hosts.host, start=0):
index = index + 1
print(index)
response_host = ping(host, )
if response_host != None:
bot.send_message(config.chat_id, f"{host} ,— хост доступен")
print('доступен')
time.sleep(3)
elif index == len(Hosts.host):
pass

def main_program():
while True:
not_available()
is_available()


if __name__ == "__main__":
main_program()

работает так:
есть список в который записаны хосты, с помощью библиотеки ping3
проверяет их на доступность, если не доступен отсылает название хоста и то что он не доступен в мой телеграм, и на оборот.
отправку не доступности- решить легко, каждые 15 мин с помощью библиотеки тайм.
а вот когда подымутся, я хочу знать один раз. и то и то должно опрашиваться постоянно.
я пробывал считать итерации, пробывал считать индексы...
не могу придумать. подскажите, может у кого-то есть идеи?

Комментарии (45)

А индекс глобальный?
А блин...это питон штоле?...
По программе всё норм, в чём вопрос не пойму...
Пусть каждый хост в списке это словарь, один из ключей в нём available с состояниями True и False. Когда проходишь по списку и состояние изменяется, то отправляешь сообщение в [запрещён], если не изменяется, то не отправляешь.

P.S. Логику не нужно подбирать, её нужно понимать.
Так, дело в том что у меня мало опыта. Вообще я системный администратор. Программа должна работать так: если не пингуется сервер, то телеграм бот отправляет это в мой телеграм- что сервак лёг. Затем если он сам поднялся по какой то причине, отправить один раз! Ну если авария, то сервер может упасть ещё раз, и я хочу что бы он резолвился раз в 15 мин- это просто реализовать с помощью библиотеки тайм
-2
Блин, только не получается у меня написать код так, что бы отсылалось поднятие сервера один раз, по тому и пишу сюда, вдруг тут есть люди умнее меня) и подскажут как реализовать мой мини проект. В дальнейшем я и смтп приделаю, что бы письма слал
-2
Ясно, как постебатся- мы гаразд. А дельный совет ни кто не дал, ясно
-2
Я видимо белым на белом написал. Извините пожалуйста.
видно я не правильно дал понять, что она должна делать..
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import telebot
import config
from ping3 import ping
import time
import Hosts
bot = telebot.TeleBot(config.token)
response_host = ''
def not_available():
cnt = 0
cnt2 = len(Hosts.host)
print(cnt2)
print(type(cnt2))
hostbot = ""
while True:
for host in Hosts.host:
response_host = ping(host, )
if response_host == None:
cnt2 = len(Hosts.host)
bot.send_message(config.chat_id, f"{host} ,— хост не доступен")
hostbot = f"{host}"
print(hostbot)
time.sleep(10)
print('недоступен')
if response_host != None and hostbot != response_host and cnt2 != 0:
cnt2 = cnt2 - 1
bot.send_message(config.chat_id, f"{host} ,— хост доступен")
print(f"{host}{cnt2}")
print('доступен')
time.sleep(3)
def main_program():
not_available()
if __name__ == "__main__":
main_program()
удалось победить отправку 1 раз но, когда какой-то хост стает не доступен, переменная cnt2 = len(Hosts.host) опять стает больше нуля. и опять постоянная отправка что хост доступен.
Помогите разобраться
Показать комментарий
Скрыть комментарий
Назад 1 из 5 Вперёд
Для добавления комментариев необходимо авторизоваться
Назад
Легенды Крови
Удивительный мир фантазий, сражений и тайн... Битв
Тема: Светлая | Тёмная
Версия: Mobile | Lite | Touch | Доступно в Google Play