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.
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)