Datenverlust - Telegram Warnsystem

Heute musste ich mit Schrecken feststellen, dass der Crawl während den letzten zwei Wochen keine Daten mehr gespeichert hat. Wahrscheinlich ist mir ein Fehler bei der Datenübertragung an mein NAS schiefgegangen, denn während dieser Zeit habe ich aus Angst den Pi zu überlasten den Crawl ausgeschaltet. Aufgrund der sehr positiven Performance und Zuverlässigkeit des Crawlers habe ich in dieser Zeit nicht regelmässig Kontrolliert, ob die Daten ankommen. Fazit: Das Dashboard reicht nicht aus, ich benötige etwas, das mich aktiv benachrichtigt, wenn keine Daten mehr im Backend ankommen.

Die Lösung: Ein Telegram-Bot, der mir automatisch eine Nachricht schreibt, wenn in einem gewissen Zeitabstand keine neue Artikel gespeichert werden. Ich hatte bisher nur wenig erfahrung mit dem programmieren von Telegram-Bots, aber die einfache und gut dokumentierte API reichte aus, um mir ein sehr einfaches Programm zu basteln.

tg_bot.PNG

Aktuell läuft das Programm alle halbe Stunde und schaut ob der Data-Ordner in der letzten Stunde aktualisiert wurde. Falls ja geschieht nichts, und falls nein wird mir per Telegramm eine nachricht mit dem Timestamp des Fehlers und des letzten Aktualiserungsdatums des Ordners zugestellt. So kommt es hoffentlich in der Zukunft nicht mehr zu so grossen Lücken im Datenset. Den Code findet Ihr anbei:


#Policman
import operator
import os, sys, time
from datetime import datetime
import requests

path_hook = str(os.getcwd())+'/data/'
def tg_send_msg(bot_message):
    bot_token = ''
    bot_chatID = ''
    send_text = 'https://api.telegram.org/bot' + bot_token + '/sendMessage?chat_id=' + bot_chatID + '&parse_mode=Markdown&text=' + bot_message
    
    response = requests.get(send_text)
    return response.json()

def check_files():
    last_update = os.path.getctime(path_hook)
    last_update = datetime.fromtimestamp(last_update)
    #print(last_update)

    #current time
    current_time = datetime.now()
    #print(current_time)

    #timedelta
    delta = current_time - last_update
    #print(delta)

    #alertime 60 min
    timer = datetime.fromtimestamp(3601) - datetime.fromtimestamp(1)

    #if delta greater than timer --> alert
    if (delta > timer):
        print("alarm")
        bot_message = '*Error! No incomming Articles.* \nTime of Error: '+str(current_time)+'\nLast Update: '+str(last_update)+'\nNo articles since: '+str(delta)
        test = tg_send_msg(bot_message)
        print(test)

while True:
    check_files()
    print('Check Successful: '+str(datetime.now()))
    time.sleep(1800)
Previous
Previous

Better Faster Stronger

Next
Next

Dashboard