Маленький помощник. Ч.001 пингует и отвечает

Завалялась у меня raspberry pi первой модели, и решил я научить её говорить со мной а за одно и помогать мне в работе.

Я не буду писать про то как включить и настроить малину, таких статей полным полно, вот например.

Для начала стоит поставить python и pyTelegramBotAPI

т.к. у меня установлена raspbian выглядит это так:

sudo apt update && sudo apt upgrade
sudo apt install python
sudo pip install pyTelegramBotAPI

Можно приступить к написанию скрипта благодаря которому малинка будет отвечать мне в телеграм по запросу живы ли мои сервера.

для начала создадим файл с константами в который пропишем токен бота (как его получать смотрим тут), и ip адреса серверов которые надо пинговать.

token = "TBOTTOKEN"
chatid = "CHATID"
hostname1 = "IPorHOSTNAME"
hostname2 = "IPorHOSTNAME"
hostname3 = "IPorHOSTNAME"
hostname4 = "IPorHOSTNAME"

Далее создадим скрипт который будем позже вызывать основным скриптом чтобы проверять состояние скриптов.

import os
import constants

def startp():

    alert1 = 0
    alert2 = 0
    alert3 = 0
    alert4 = 0
    response1 = os.system("ping -c 1 " + constants.hostname1)
    response2 = os.system("ping -c 1 " + constants.hostname2)
    response3 = os.system("ping -c 1 " + constants.hostname3)
    response4 = os.system("ping -c 1 " + constants.hostname4)

    if response1 ==0:
        globals()["text1"] = 'srv1 10.0.1.10 is up'
    else:
        globals()["text1"] = 'srv1 10.0.1.10 is down'
        alert1 = 1
    if response2 ==0:
        globals()["text2"] = 'srv2 10.0.1.11 is up'
    else:
        globals()["text2"] = 'srv2 10.0.1.11 is down'
    if response3 ==0:
        globals()["text3"] = 'storage 10.0.1.12 is up'
    else:
        globals()["text3"] = 'storage 10.0.1.12 is down'
        alert3 = 1
    if response4 ==0:
        globals()["text4"] = 'mail 10.0.1.16 is up'
    else:
        globals()["text4"] = 'mail 10.0.1.16 is down'
        alert4 = 1

И последний, самый главный скрипт, основной скрипт который будем запускать

import telebot
import constants
import pinger

bot = telebot.TeleBot(constants.token)

@bot.message_handler(commands=['ping'])

def handle_text (message):
    pinger.startp()
    bot.send_message(constants.chatid, "pong")
    bot.send_message(constants.chatid, "pong")
    bot.send_message(constants.chatid, "pong")
    bot.send_message(constants.chatid, pinger.text1)
    bot.send_message(constants.chatid, pinger.text2)
    bot.send_message(constants.chatid, pinger.text3)
    bot.send_message(constants.chatid, pinger.text4)

bot.polling(none_stop=True, interval=0)

Теперь остаётся только запустить скрипт и поставить его на автозапуск.

2016-03-15 14-15-12 Telegram (92)

В дальнейшем я научу бота кидать аллерты при падении сервака даже если я его об этом не просил, сообщать мне о присутствии рабочей почты и кто его знает чему ещё, следите за обновлениями на этом блоге а так же код доступен на github.

Разговорчивый сервер

Накидал себе небольшой скрипт на питоне который пингует мои сервера и отправляет сообщение на email об их состоянии

import os
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

hostname = "10.0.1.1"
response = os.system("ping -c 1 " + hostname)
hostname2 = "10.0.1.2"
response2 = os.system("ping -c 1 " + hostname2)
subj2 = ''
subj1 = ''
if response ==0:
    print(hostname, 'is up!')
    text1 = '10.0.1.1 is up\n'
    subj1 = 'server says OK'
else:
    print(hostname, 'is down!')
    text1 = '10.0.1.1 is down\n'
    subj1 = 'server says ALLERT'
if response2 ==0:
    print(hostname2, 'is up!')
    text2 = '10.0.1.2 is up'
    subj2 = 'server says OK'
else:
    print(hostname2, 'is down!')
    text2 = '10.0.1.2 is down'
    subj2 = 'server says ALLERT'

me = 'example@mail.ru'
you = 'example@mail.ru'
text = text1 + text2
subj = subj2 + subj1
server = "smtp.mail.ru"
port = 25
user_name = "example@mail.ru"
user_passwd = "password"
msg = MIMEText(text, "", "utf-8")
msg['Subject'] = subj
msg['From'] = me
msg['To'] = you
s = smtplib.SMTP(server, port)
s.ehlo()
s.starttls()
s.ehlo()
s.login(user_name, user_passwd)
s.sendmail(me, you, msg.as_string())
s.quit()
[YadiskFiles label=»Скачать autopinger.py с Яндекс.Диск» href=»https://yadi.sk/d/b7fYl5GojQv2a» name=»autopinger.py» size=»1.1 KB» path_hash=»4b975e4e1fcc7682a6af7e2703c6aea9″ counter=»true»]

пользуйтесь на здоровье..