Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 1, 2023 13:32:23

Borovkovich
Зарегистрирован: 2023-06-01
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Ping bot для сервера

Доброго дня. Пытаюсь сбрать чат-бот в телеге для пинга сервера во внутренней сети. Вроде всё правильно прописал, код начинает работать. При запуске в телегу приходит сразу сообщение, которое я пишу “192.168.67.227 не работает”. При попытке отрубить от сети и включить обратно ничего не происходит. Сообщения не присылаются. Подскажите плиз, куда копнуть

 #----------------------------------------------------
import os
import requests
import time
#-------------------------
hostname = ['192.168.67.227']
time_pause = 10
#-------------------------
def SendMsgToTelegramChanel(msg):
    token="Мой токен"
    chat_id = 'мой чат id'
    params = {'chat_id': chat_id,'text': msg}
    response = requests.get('https://api.telegram.org/bot'+token+'/sendMessage', params=params)
def IsHostAlive(host):
    ret = os.system('ping -c 2 {} > /dev/null'.format(host))
    if ret == 0:
        return True
    return False
while True:
    for i in range(len(hostname)):
        file_signal = hostname[i] +'_down'
        if IsHostAlive(hostname[i]):
            if os.path.isfile(file_signal):
               os.remove(file_signal)
               SendMsgToTelegramChanel(hostname[i] + ' работает')
               #print(hostname + ' is up!')
        else:
            if not os.path.isfile(file_signal):
                open(file_signal,'tw').close()
                SendMsgToTelegramChanel(hostname[i] + ' не работает')
                #print(hostname + ' is down!')
    time.sleep(time_pause)
#------------------------------------------------

Офлайн

#2 Июнь 1, 2023 13:41:28

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9849
Репутация: +  853  -
Профиль   Отправить e-mail  

Ping bot для сервера

Borovkovich
Пытаюсь сбрать чат-бот в телеге для пинга сервера во внутренней сети.
Ты знаешь, что такое внутренняя сеть? Если ты запустишь это в Telegram, запрос будет относиться к внутренней сети Telegram.



Офлайн

#3 Июнь 1, 2023 15:45:10

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Ping bot для сервера

py.user.next
С чего бы это? Где будет запущен исполняемый код - там и будет сеть
К сети Телеги ты точно не получишь доступ


2Borovkovich
Если заменить отправку в телегу обычным принтом - выводит данные?

если в отправку в телегу передать обычный текст - отправляет?



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#4 Июнь 1, 2023 23:08:35

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9849
Репутация: +  853  -
Профиль   Отправить e-mail  

Ping bot для сервера

ZerG
Где будет запущен исполняемый код - там и будет сеть
Чтобы бот работал, его надо будет запускать на хостинге. Даже если у него хостинг свой собственный, это надо двухкомпонентную систему делать. В боте просто не должно быть этой внутренней сети.

Про Telegram я имел в виду вот это - что бот на хостинге когда запустится, он будет на хостинге искать внутреннюю сеть, а не у него где-то там.



Офлайн

#5 Июнь 2, 2023 10:13:19

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Ping bot для сервера

py.user.next
Да почему же на хостинге то? Ну вот у человека локалка - какая-то мини-фирма! У него есть там полюбому сервера которые не выключаются или даже если он дома то скажем какой нить RaspberryPi
Что мешает запустить бота на балалайке дома или в оффисе на сервере?



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#6 Июнь 2, 2023 14:23:50

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9849
Репутация: +  853  -
Профиль   Отправить e-mail  

Ping bot для сервера

ZerG
Да почему же на хостинге то?
Если ты пишешь бота так, что его нельзя поставить на хостинг, то его нельзя поставить на хостинг. Что в этом хорошего?

ZerG
если он дома то скажем какой нить RaspberryPi
А если его выключить, то бот что будет делать в Telegram? Он даже /help не сможет вывести, ведь он же не на хостинге.

Так что бот должен быть отвязан от этих сетей и стоять хоть где. При этом команда, данная боту, должна посылать запрос на программную часть, которая стоит на каком-то компьютере где-то, имеющем доступ к сетям 192.168.*.* и имеющем внешний IP-адрес, с которым и будет взаимодействовать бот с хостинга или откуда-то ещё. А если из бота начать соединяться с сетью 192.168.*.*, то этот бот и сможет только на одном компьютере стоять и только на том, который доступ к этим внутренним сетям имеет.



Офлайн

#7 Июнь 3, 2023 08:24:18

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Ping bot для сервера

Абсолютно верно
Если мы говорим о боте общего назначения то разумеется держать его на хостинге самый верный вариант для обеспечения отказоустойчивости

Но если мы говорим о внутренних сетях то это явно не бот для общего пользования
К примеру есть предприятие и мы хотим отслеживать состояние сервисов - использовать Телегу для таких задач очень удобно - и тут стоит рассматривать команду пинг только как пример;

На предприятиях пусть и минисерверная с упсами и инетом 24/7
Вот он там и живет - а если уж там все сломалось - то нерабочий бот это тот же показатель алярма

Ну и на конец = даже если бот на хостинге? Ну запусти на нем же WireGuard и получи доступ в свои внутренние сети; Да хоть проброс порта на роутере сделай

Ну а если предприятие больше чем три калеки с ноутами - то как я сказал выше нет никаких проблем поднять в сети виртуалку и повесить на нее бота, забикс итд



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#8 Июнь 3, 2023 12:49:06

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9849
Репутация: +  853  -
Профиль   Отправить e-mail  

Ping bot для сервера

ZerG
Если мы говорим о боте общего назначения то разумеется держать его на хостинге самый верный вариант для обеспечения отказоустойчивости
Там даже не в отказоустойчивости дело. Бот - это функция. Поэтому не должно в одной функции быть всё. Мы же не программисты на Basic'е. Опросник внутренней сети - это функция. Поэтом функция-бот запускает функцию-опросник.

Вот так оно выглядит
  
>>> def bot():
...     result = pinger()
...     if result:
...         return 'ping ok'
...     else:
...         return 'ping fail'
... 
>>> def pinger():
...     host = '192.168.0.1'
...     if ping_host(host):
...         return True
...     else:
...         return False
... 
>>> def ping_host(host):
...     return True
... 
>>> bot()
'ping ok'
>>>
Как видишь, bot() ничего не знает о том, как происходит опрос в pinger(). Это инкапсуляция. А pinger() ничего не знает о том, как именно опрашивается узел в ping_host(). Это инкапсуляция.

Ты же предлагаешь вот такое
  
>>> def bot():
...     host = '192.168.0.1'
...     result = True
...     if result:
...         return 'ping ok'
...     else:
...         return 'ping fail'
... 
>>> bot()
'ping ok'
>>>
Но если адрес изменится, бот сразу сломается весь, потому что он привязан к этому адресу исходному.

А теперь представь, что после создания бота и его работы тебе говорят “к нам присоединились ещё две сети, нужно их опрашивать тоже”.

Я делаю что
  
def bot():
    result = all((pinger1(), pinger2(), pinger3()))
    if result:
        return 'ping ok'
    else:
        return 'ping fail'

  
def pinger1():
    host = '192.168.0.1'
    if ping_host(host):
        return True
    else:
        return False
 
def pinger2():
    host = '192.168.0.2'
    if ping_host(host):
        return True
    else:
        return False
 
def pinger3():
    host = '192.168.0.3'
    if ping_host(host):
        return True
    else:
        return False

А ты что делаешь? Монолит на сто строк? У меня бот меняется минимально. А потом на каждой сети своя шарманка заводится, хоть с одной подсетью, хоть с десятью. Бот просто спрашивает у каждой такой штуки “ты как? видишь что-нибудь?” и они ему отвечают “я вижу один узел!”, “я вижу десять узлов!”, “я вижу сто узлов!”. И бот тогда говорит “всё пропинговалось, хозяин”. При этом что там пинговалось и сколько, зависит от этих отдельных частей, которые бот просто опрашивает по-простому.



Офлайн

#9 Июнь 3, 2023 12:52:48

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9849
Репутация: +  853  -
Профиль   Отправить e-mail  

Ping bot для сервера

ZerG
Но если мы говорим о внутренних сетях то это явно не бот для общего пользования
Этот бот может много функций иметь. Одна из них - опрос сетей каких-то. А другая - заказать кофе в офис в автоматическом режиме. Собрать всех на митинг. Позвать эникейщика в отдел такой-то.

Ты же зациклился на этих десяти строчках. Мол если строчек десять, то это и есть хорошо. Это хорошо тогда, когда ты ничего не делаешь особого. Но когда ты строишь систему, которая умеет делать дохрена всего, надо наплевать на количество строчек и сконцентрироваться на количестве функций, на количестве фич, на том, какие поведения у этой системы будут в наличии.



Отредактировано py.user.next (Июнь 3, 2023 12:54:02)

Офлайн

#10 Июнь 3, 2023 15:20:10

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Ping bot для сервера

ЭЭЭ я совершенно не понял откудова ты взял монолит и 10-1000 строк, я мимо этого магазина даже в гугле не проходил(акелла промахнулся)

У меня отдельный класс на бота и логика обработки задач
Бот же в конечном итоге используется как принт/лог типа

 from bot import send_mess
...
some checkers actions
send_mess(message, group, file, e.t.c)

То есть непосредственно тело тг бота никакой рабочей логики не содержит
Я импортирую его в нужный модуль и луплю в него сообщения и мне пофиг ляжет бот или чекер
при том что в супервизоре это разные процессы вобще

Топик же не я создавал



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version