diff options
-rw-r--r-- | bot.py | 12 | ||||
-rw-r--r-- | downloader.py | 14 | ||||
-rw-r--r-- | main.py | 11 | ||||
-rw-r--r-- | util.py | 4 |
4 files changed, 30 insertions, 11 deletions
@@ -1,5 +1,6 @@ import os import sqlite3 +import urllib.error from urllib import parse import requests from dotenv import load_dotenv @@ -59,10 +60,13 @@ class Bot: def pollUpdate(self): self.isProcessingPolling = True - url = f'https://api.telegram.org/bot{self.token}/getUpdates' - response = requests.get(url) - if response.status_code == 200: - self._dbUpdate(response.json()) + try: + url = f'https://api.telegram.org/bot{self.token}/getUpdates' + response = requests.get(url) + if response.status_code == 200: + self._dbUpdate(response.json()) + except requests.exceptions.ConnectionError as e: + logger.error("Connection error during polling update") self._checkUnreadDb() self.isProcessingPolling = False diff --git a/downloader.py b/downloader.py index 7ab3c79..5515b66 100644 --- a/downloader.py +++ b/downloader.py @@ -4,6 +4,7 @@ Ini nanti periodik import os import time +import selenium from dotenv import load_dotenv from selenium import webdriver from selenium.common import TimeoutException @@ -31,7 +32,12 @@ class Browser: op.add_argument("--no-sandbox") op.add_argument("--disable-dev-shm-usage") self.driver = webdriver.Chrome(options=op) - self.driver.get(url) + try: + self.driver.get(url) + self.connectionSuccess = True + except selenium.common.exceptions.WebDriverException: + self.connectionSuccess = False + logger.error(f"Selenium couldn't connect to {url}") def getDriver(self): return self.driver @@ -42,7 +48,10 @@ class Browser: def downloadCsv(): + downloadSuccess = False browser = Browser(os.getenv('URL')) + if not browser.connectionSuccess: + return False driver = browser.getDriver() action = ActionChains(driver) @@ -66,12 +75,15 @@ def downloadCsv(): time.sleep(5) logger.info("REPORT FILE DOWNLOADED") + downloadSuccess = True except TimeoutException: logger.error("Timed out while downloading report") + downloadSuccess = False finally: browser.close() + return downloadSuccess if __name__ == '__main__': @@ -14,7 +14,9 @@ bot = Bot() def getScore(): - downloadCsv() + isSuccess = downloadCsv() + if not isSuccess: + return -1 myScore = readCSV() try: myScore = 100 * float(myScore) @@ -27,7 +29,8 @@ def processMessages(messages): if 'update' in (msg.lower() for msg in messages): logger.info("EXPLICIT SCORE UPDATE REQUESTED") score = getScore() - bot.sendMessage(f"Score leantime bulan ini = {score}%") + msg = f"Score leantime bulan ini = {score}%" if score >= 0 else "Connection problem with report dashboard" + bot.sendMessage(msg) @repeat(every().day.at("09:00")) @@ -37,8 +40,8 @@ def main(): weekday = today.weekday() if weekday not in [5, 6]: # jangan ganggu aku di akhir pekan myScore = getScore() - msg = f"Leantime score = {myScore}%. <i>Jangan lupa isi leantime</i>" - if (17 <= today.day <= 24) and myScore < 70: # seminggu sebelumnya udah ngingetin + msg = f"Leantime score = {myScore}%. <i>Jangan lupa isi leantime</i>" if myScore >= 0 else "Connection problem with report dashboard" + if (17 <= today.day <= 24) and (0 <= myScore < 70): # seminggu sebelumnya udah ngingetin msg = f'<b>WARNING!</b> SEKARANG UDAH TANGGAL {today.day}, SCORE LEANTIME MASIH {myScore}%' bot.sendMessage(msg) @@ -6,13 +6,13 @@ from dotenv import load_dotenv load_dotenv() -dbFile = os.getenv('DB_FILENAME') +dbFile = os.getenv('DB_FILENAME', 'db.sqlite3') def setupLogger(): logger = logging.getLogger(__name__) logging.basicConfig( - filename=os.getenv('LOGFILE'), + filename=os.getenv('LOGFILE', "watcher.log"), encoding='utf-8', level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s' |