From 087a1baf57f64be29703447d4dd15f238a00d9a1 Mon Sep 17 00:00:00 2001 From: Andrew Date: Sun, 23 Feb 2020 23:17:16 +0400 Subject: Added docker and reworked logging. --- .dockerignore | 2 ++ Dockerfile | 17 +++++++++++++++++ backend_api.py | 5 +---- bot.py | 18 ++++++++++-------- botlogging.py | 22 ++++++++++++++++++++++ docker-compose.yml | 7 +++++++ rules.jpg | Bin 1216722 -> 3760725 bytes states.py | 14 +++++--------- 8 files changed, 64 insertions(+), 21 deletions(-) create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100644 botlogging.py create mode 100644 docker-compose.yml diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..5237f0f --- /dev/null +++ b/.dockerignore @@ -0,0 +1,2 @@ +venv +db.sqlite3 \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..8489469 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,17 @@ +FROM python:3.7-alpine + +WORKDIR /app +COPY . . + +RUN apk add --update --no-cache --virtual .build-deps \ + openssl-dev \ + g++ \ + libffi-dev && \ + apk add --update --no-cache \ + tzdata \ + git && \ + pip install --no-cache-dir -r requirements.txt && \ + apk del .build-deps && \ + rm -rf /var/cache/apk/* + +CMD [ "python3", "bot.py" ] \ No newline at end of file diff --git a/backend_api.py b/backend_api.py index a8270a4..94841f9 100644 --- a/backend_api.py +++ b/backend_api.py @@ -1,15 +1,12 @@ import requests import urllib from config import BACKEND_URL -import logging import json import datetime as dt from typing import Tuple, Dict - -logger = logging.getLogger(__name__) -logger.setLevel(logging.DEBUG) +from botlogging import logger def make_request(method: str, url: str, **kwargs) -> Tuple[int, Dict]: diff --git a/bot.py b/bot.py index 9609bb9..92b8a12 100644 --- a/bot.py +++ b/bot.py @@ -4,8 +4,7 @@ from telegram import ReplyKeyboardMarkup, ReplyKeyboardRemove, InlineKeyboardMar # Typing from telegram import Update, User, Bot -import logging -from os import environ +from os import getenv import json from config import TG_TOKEN, REQUEST_KWARGS @@ -17,11 +16,7 @@ from keyboards import ( from utils import * from states import States, AdminStates -logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s') -logger = logging.getLogger(__name__) -logger.setLevel(logging.DEBUG) - -raiseExceptions = True +from botlogging import logger def start(bot: Bot, update: Update, user_data: dict): @@ -77,7 +72,14 @@ def error(bot, update, error): def main(): - updater = Updater(TG_TOKEN, request_kwargs=REQUEST_KWARGS) + is_prod = getenv('production', '') + + if is_prod: + print('PRODUCTION ENVIRONMENT') + updater = Updater(TG_TOKEN) + else: + print('DEVELOPMENT ENVIRONMENT') + updater = Updater(TG_TOKEN, request_kwargs=REQUEST_KWARGS) dp = updater.dispatcher dp.add_error_handler(error) diff --git a/botlogging.py b/botlogging.py new file mode 100644 index 0000000..6dc9d37 --- /dev/null +++ b/botlogging.py @@ -0,0 +1,22 @@ +import logging + + +fh = logging.FileHandler("logs/log.log") +fh.setLevel(logging.DEBUG) + +ch = logging.StreamHandler() +ch.setLevel(logging.DEBUG) + +log_format = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") +fh.setFormatter(log_format) +ch.setFormatter(log_format) + +logging.basicConfig( + level=logging.DEBUG, handlers=[fh, ch], + format='%(asctime)s - %(name)s - %(levelname)s - %(message)s' +) + +logger = logging.getLogger(__name__) +logger.setLevel(logging.DEBUG) +logger.addHandler(fh) +logger.addHandler(ch) \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..15fe287 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,7 @@ +version: '3' + +services: + tgquiz-bot: + build: . + container_name: tgquiz_bot + command: sh -c "python3 bot.py" diff --git a/rules.jpg b/rules.jpg index 3e40f8b..99ca7f7 100644 Binary files a/rules.jpg and b/rules.jpg differ diff --git a/states.py b/states.py index bb1455d..00203b0 100644 --- a/states.py +++ b/states.py @@ -9,16 +9,12 @@ import backend_api from time import sleep import datetime as dt from decimal import Decimal -import logging # Typing from telegram import Update, User, Bot from typing import List - -logger = logging.getLogger(__name__) -logger.setLevel(logging.DEBUG) -raiseExceptions = True +from botlogging import logger def save_state(func): @@ -476,7 +472,7 @@ class AdminStates: for profile in profiles: ids.append(int(profile["tg_id"])) - return AdminStates.send_to_ids(ids, update.message.text, bot, update) + return AdminStates.send_to_ids(ids, "ОБЪЯВЛЕНИЕ ОТ МОДЕРАТОРОВ:", update.message.text, bot, update) @staticmethod @save_state @@ -504,14 +500,14 @@ class AdminStates: return ADMIN_TASK_PUBLISHED else: - return AdminStates.send_to_ids(ids, msg, bot, update) + return AdminStates.send_to_ids(ids, "СООБЩЕНИЕ ОТ МОДЕРАТОРОВ:", msg, bot, update) @staticmethod - def send_to_ids(ids: List[int], message: str, bot: Bot, update: Update): + def send_to_ids(ids: List[int], prefix: str, message: str, bot: Bot, update: Update): errors = [] for tg_id in ids: try: - bot.send_message(tg_id, message) + bot.send_message(tg_id, f"*{prefix}*\n\n{message}", parse_mode="Markdown") print(tg_id) except Exception as e: logger.debug(f"Got exception while announcing message: {e}") -- cgit v1.2.3