mirror of
https://github.com/miloszowi/everyone-mention-telegram-bot.git
synced 2025-05-20 01:04:05 +00:00
Singleton mongo client, added mongosh easy enter command, better logging, added idle time to mongo connection
This commit is contained in:
parent
ea2fddff40
commit
9c8f5795f8
@ -22,7 +22,6 @@ services:
|
||||
- ./docker/config/app.env
|
||||
volumes:
|
||||
- ./src:/src
|
||||
- ./logs:/var/log/bot
|
||||
ports:
|
||||
- $APP_EXPOSED_PORT:$APP_INTERNAL_PORT
|
||||
depends_on:
|
||||
|
8
docker/mongosh
Executable file
8
docker/mongosh
Executable file
@ -0,0 +1,8 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
if [ -f docker/config/app.env ]
|
||||
then
|
||||
source docker/config/app.env
|
||||
fi
|
||||
|
||||
docker-compose exec database mongosh --port $MONGODB_PORT --host $MONGODB_HOSTNAME --username $MONGODB_USERNAME --password $MONGODB_PASSWORD --authenticationDatabase admin $MONGODB_DATABASE
|
5
docker/start
Executable file
5
docker/start
Executable file
@ -0,0 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
docker-compose stop
|
||||
docker-compose up -d
|
||||
docker logs -f $(docker-compose ps -q app) &> app.log &
|
@ -1,4 +1,5 @@
|
||||
import os
|
||||
from urllib.parse import quote_plus
|
||||
|
||||
from dotenv import load_dotenv
|
||||
|
||||
@ -8,10 +9,10 @@ BOT_TOKEN = os.environ['BOT_TOKEN']
|
||||
WEBHOOK_URL = os.environ['WEBHOOK_URL']
|
||||
PORT = os.environ['PORT']
|
||||
|
||||
MONGODB_DATABASE = os.environ['MONGODB_DATABASE']
|
||||
MONGODB_USERNAME = os.environ['MONGODB_USERNAME']
|
||||
MONGODB_PASSWORD = os.environ['MONGODB_PASSWORD']
|
||||
MONGODB_HOSTNAME = os.environ['MONGODB_HOSTNAME']
|
||||
MONGODB_PORT = os.environ['MONGODB_PORT']
|
||||
MONGO_DATABASE = os.environ['MONGODB_DATABASE']
|
||||
MONGO_CONNECTION_STRING = "mongodb://%s:%s@%s:%s/%s?authSource=admin" % (
|
||||
os.environ['MONGODB_USERNAME'], quote_plus(os.environ['MONGODB_PASSWORD']),
|
||||
os.environ['MONGODB_HOSTNAME'], os.environ['MONGODB_PORT'], MONGO_DATABASE
|
||||
)
|
||||
|
||||
BANNED_USERS = os.environ['BANNED_USERS'].split(',') or []
|
||||
|
@ -1,25 +1,25 @@
|
||||
from urllib.parse import quote_plus
|
||||
|
||||
from __future__ import annotations
|
||||
from pymongo import MongoClient
|
||||
from pymongo.database import Database
|
||||
|
||||
from config.envs import (MONGODB_DATABASE, MONGODB_HOSTNAME,
|
||||
MONGODB_PASSWORD, MONGODB_PORT,
|
||||
MONGODB_USERNAME)
|
||||
from config.envs import MONGO_CONNECTION_STRING, MONGO_DATABASE
|
||||
from decorators.singleton import Singleton
|
||||
|
||||
|
||||
class Client:
|
||||
class Client(metaclass=Singleton):
|
||||
mongo_client: MongoClient
|
||||
database: Database
|
||||
|
||||
def __init__(self) -> None:
|
||||
uri = "mongodb://%s:%s@%s:%s/%s?authSource=admin" % (
|
||||
MONGODB_USERNAME, quote_plus(MONGODB_PASSWORD),
|
||||
MONGODB_HOSTNAME, MONGODB_PORT, MONGODB_DATABASE
|
||||
)
|
||||
# allow only 10 minutes on idle, close connection after
|
||||
max_idle_time: int = 10 * (60 * 1000)
|
||||
|
||||
self.mongo_client = MongoClient(uri)
|
||||
self.database = self.mongo_client[MONGODB_DATABASE]
|
||||
def __init__(self) -> None:
|
||||
self.mongo_client = MongoClient(
|
||||
MONGO_CONNECTION_STRING,
|
||||
connect=False,
|
||||
maxIdleTimeMS=self.max_idle_time
|
||||
)
|
||||
self.database = self.mongo_client[MONGO_DATABASE]
|
||||
|
||||
def insert_one(self, collection: str, data: dict) -> None:
|
||||
self.database.get_collection(collection).insert_one(data)
|
||||
|
8
src/decorators/singleton.py
Normal file
8
src/decorators/singleton.py
Normal file
@ -0,0 +1,8 @@
|
||||
class Singleton(type):
|
||||
_instances: dict = {}
|
||||
|
||||
def __call__(cls, *args, **kwargs):
|
||||
if cls not in cls._instances:
|
||||
cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs)
|
||||
|
||||
return cls._instances[cls]
|
@ -14,9 +14,6 @@ class Logger:
|
||||
main_logger: str = 'main-logger'
|
||||
main_logger_file: str = '/var/log/bot/app.log'
|
||||
|
||||
# noinspection SpellCheckingInspection
|
||||
formatter: logging.Formatter = logging.Formatter('%(asctime)s[%(levelname)s]: %(message)s')
|
||||
|
||||
def __init__(self):
|
||||
self.configure(self.action_logger, self.action_logger_file, logging.INFO)
|
||||
self.configure(self.main_logger, self.main_logger_file, logging.ERROR)
|
||||
@ -27,10 +24,13 @@ class Logger:
|
||||
os.makedirs(directory)
|
||||
|
||||
logger = logging.getLogger(logger_name)
|
||||
logger.propagate = False
|
||||
|
||||
file_handler = logging.FileHandler(log_file, mode='w')
|
||||
file_handler.setFormatter(self.formatter)
|
||||
formatter = logging.Formatter('%(asctime)s [%(levelname)s]: %(message)s', datefmt='%H:%M:%S %Y/%m/%d')
|
||||
file_handler.setFormatter(formatter)
|
||||
stream_handler = logging.StreamHandler()
|
||||
stream_handler.setFormatter(self.formatter)
|
||||
stream_handler.setFormatter(formatter)
|
||||
|
||||
logger.setLevel(level)
|
||||
logger.addHandler(file_handler)
|
||||
|
Loading…
x
Reference in New Issue
Block a user