Мониторинг сайтов и уведомление по почте без установленного почтового сервера

По независящим от нас причинам упал сайт, спустя несколько часов только узнали об этом, поэтому было решено, для “быстрого реагирования”, сделать мониторинг на локальном сервере, одна беда, он в интранете и почтового сервера на нем нет. В результате был сделан несложный скрипт, позволяющий отправлять отчеты о падении с любого доступного вам почтового адреса (gmail.com, mail.ru, yandex.ru). Поддерживается TLS авторизация для SMTP и HTTPS для протокола мониторинга.

Инструкция по эксплуатации:

Usage: site_down_notifier.py -s http://site.com -n email@site.com
Options:
  --version             show program's version number and exit
  -h, --help            show this help message and exit
  -s SITE, --site=SITE  define site for monitoring (url like http://site.com/)
  -n EMAILS, --notify=EMAILS
                        emails for notification (comma separated)
  -r STR, --str=STR     phrase for checking on your site page
  -t TLS, --mailtls=TLS
                        use secure email connection (True/1, False/0)
  -m SERVER, --mailserver=SERVER
                        mail server (smtp.gmail.com)
  -p PORT, --mailport=PORT
                        smtp port of mail server (25)
  -w PASSWORD, --mailpass=PASSWORD
                        password for mail server
  -b EMAIL, --mailbox=EMAIL
                        account for mail server

Исходный код скрипта:


#! /usr/bin/python

import smtplib
import httplib
import sys
import re
from optparse import OptionParser
from pprint import pprint

class GMailer:
    
    def __init__(self, server, port, login, password, tls = False):
        if tls:            
            self._server = smtplib.SMTP_SSL(server, port)
        else:
            self._server = smtplib.SMTP(server, port)
            
        self._login = login
        self._server.set_debuglevel(1)        
        self._server.login(login, password)
        
    def send(self, to, subject, message):
        msg = ("From: %s\r\nTo: %s\r\nSubject: %s\r\n\r\n%s"
               % (self._login, to, subject, message))
        
        return self._server.sendmail(self._login, to, msg) 

    def close(self):
        self._server.quit()

parser = OptionParser(usage = "%prog -s http://site.com -n email@site.com", version="%prog 1.0")
parser.add_option("-s", "--site", dest="site",help="define site for monitoring (url like http://site.com/)", metavar="SITE")
parser.add_option("-n", "--notify", dest="emails", help="emails for notification (comma separated)", metavar="EMAILS")
parser.add_option("-r", "--str", dest="sitestr", help="phrase for checking on your site page", metavar="STR", default = "")
parser.add_option("-t", "--mailtls", dest="tls", help="use secure email connection (True/1, False/0)", metavar="TLS", default=False)
parser.add_option("-m", "--mailserver", dest="mailserver", help="mail server (smtp.gmail.com)", metavar="SERVER")
parser.add_option("-p", "--mailport", dest="mailport", help="smtp port of mail server (25)", metavar="PORT", default=25)
parser.add_option("-w", "--mailpass", dest="mailpass", help="password for mail server", metavar="PASSWORD")
parser.add_option("-b", "--mailbox", dest="mailbox", help="account for mail server", metavar="EMAIL")

(options, args) = parser.parse_args()

if options.site and options.emails and options.mailserver and options.mailpass:
    error = ""
        
    result = re.search("^(http|https)://([\w.-]*)(.*)", options.site)
    
    
    if result.lastindex < 3:
        print("Wrong url: %s" % (options.site))
        exit()
    else:                                    
        try:
            if result.group(1) == "https":
                conn = httplib.HTTPSConnection(result.group(2), timeout=100)
            else:
                conn = httplib.HTTPConnection(result.group(2), timeout=100)
            conn.request("GET", result.group(3))
            r1 = conn.getresponse()    
            
            if(r1.status != 200):
                error = "host unavailable"
            elif (options.sitestr != "") and (r1.read().find(options.sitestr) <= 0):
                error = "wrong content on home"
        except:
            error = "host not found"
            
        if error != "":
            mailer = GMailer(options.mailserver, options.mailport, options.mailbox, options.mailpass, options.tls)
            for email in options.emails.split(","):
                if mailer.send(email, "psycare", error):
                    print("Report to %s sent" % (email))                
            mailer.close()
            print("errors sent")
        else:
            print("everything is ok")
else:
    print "not enough parameters"    

Comments

comments

10 comments On Мониторинг сайтов и уведомление по почте без установленного почтового сервера

  • ээээ, а зачем такие сложности?

    >man mail

    NAME
    mail, Mail, mailx — send and receive mail

    SYNOPSIS
    mail [-dEiInv] [-s subject] [-c cc-addr] [-b bcc-addr] [-F]

    зы: ну и банальный пхп мейл делает это в двух строках кода :)

  • Ну, что делает mail я знаю, а теперь смотри что делает эта штука:
    – дергает сайт по http / https
    – проверяет наличие тестовой фразы (может там вместо ошибка отдалась но по http)
    – если что-то не так, то шлет письма с пояснениями в чем была проблема пользуя smtp (включая поддержку tsl)
    – работает на любой платформе (win/nix), т.е. – технически может работать на десктопе под виндой, периодически стартуя.

    Так что, давайте пример банального пхпмейла в студию :)

  • ну, он, конечно не так гибок, но свою задачу сделает :)

  • На PHP / bash всё это тоже делается, только в ущерб объему / читабельности, потому, собственно, и код привел.

  • И как это автору не влом столько времени на написание статей тратить, мы конечно очень благодарны, но вот я на такой альтруизм не способен :)

  • А не проще пользоваться готовим сервисом, без ненужной установки кодов и скриптов?
    Вот новый сервис для мониторинга сервера: http://webpinger.ru/
    Автоматическая проверка сайтов на доступность

  • Отвечу, – учтановить и настроить довольно просто. Лично меня привлекает безграничная гибкость моего решения по сравнению с неповоротливостью коммерческих продуктов. Тем более, что мне не так уж и много надо.

  • современная интернет реклама ivendo

  • Материалы об НЛО: фото, видео, рассказы очевидцев.

Leave a reply:

Site Footer

Sliding Sidebar

About Me

About Me

Для кого этот блог?

Для тех кого интересуют современные интернет технологи, IT бизнес, стартапы, менеджмент, контроль качества, личная эффективность, мотивация. Здесь я буду писать о том, что в первую очередь будет интересно мне, о проблемах и решениях. О том что пригодилось мне, и возможно будет интересно Вам.

Что заставило меня создать его?

Желание совершенствоваться. Достигать успеха. Находить людей со схожими проблемами и задачами, вместе искать выходы и решения.

Немного о себе.

Мой первый серьезный опыт в IT это работа над desktop приложениями в компании «Эксперт-Софт». У истоков её стояли несколько амбициозных и талантливых молодых людей, с огнем в глазах и желанием работать «как майкрософт». То чем мы там занимались вполне могли бы сегодня назвать «стартапом». Рук было откровенно мало, поэтому приходилось заниматься всем: кодированием на Delphi, написанием скриптов на VBA, дизайном, вёрсткой и поддержкой вебсайта, работой над рекламной полиграфией, проектированием интерфейсов и БД. Работы было много, но запал был велик, команда очень разношерстная, гармонично дополняя друг-друга в решении нетривиальных задач. Благодаря тому что пришлось попробовать многое, постепенно вырисовалось понимание того чем хочется заниматься, и как. Софтверным программированием я был сыт по горло. Массы проблем десктопного софта в вебе просто не было, по определению. Зато был четкий фокус на дизайне, юзабилити, скорости. Поэтому когда пришла пора уходить из «Эксперт-Софт», я без всякого сожаления стал искать работу как разработчик для web. Поскольку городишко у нас не очень большой, выбор был практически предопределен. Так я стал работать в «Оникс-Системз», где и продолжаю работать поныне. За время работы в компании я как разработчик принимал участие в работе над несколькими десятками проектов. Несколько десятков проектов было сделано мною как фрилансером. Самым большим проектом в котором я сыграл роль менеджера, считаю свою семью. Также довольно большой проект мы сейчас поднимаем с командой разработчиков (на данный момент команда состоит из четырех php разработчиков, одного flex кодера и тестировщика). Отсюда, большой интерес к современным практикам и методологиям, разным подходам в управлении командой, повышению эффективности и качества работы. По мере сил, вдохновения и свободного времени, я буду писать об этом.

Если у Вас возникли какие-то вопросы ко мне лично, буду рад если Вы свяжетесь со мной:

e-mail:
skype: denis.sheremetov
Старый сайт, с музычкой и флешом

Прочая онлайновая деятельность: