summaryrefslogtreecommitdiff
path: root/day9/task5_vue/backend/database/database.py
diff options
context:
space:
mode:
Diffstat (limited to 'day9/task5_vue/backend/database/database.py')
-rw-r--r--day9/task5_vue/backend/database/database.py34
1 files changed, 27 insertions, 7 deletions
diff --git a/day9/task5_vue/backend/database/database.py b/day9/task5_vue/backend/database/database.py
index 87982cf..44554c7 100644
--- a/day9/task5_vue/backend/database/database.py
+++ b/day9/task5_vue/backend/database/database.py
@@ -1,27 +1,47 @@
from backend.database.wrappers import Wrapper, MySQLWrapper
+from backend.logger import Logger
-import logging
+from time import sleep
def initialize_databases(configs, schemes):
+ timeout = 5
+ max_retries = 7
+
for config in configs:
if config['type'] == 'mysql':
- logger = logging.getLogger('backendDebug')
-
- logger.debug('Connected')
- logger.debug(f'Trying to connect to database "{config["db_name"]}@{config["host"]}"...')
+ for _ in range(max_retries):
+ try:
+ Logger.get_logger().info(f'Trying to connect to database "{config["db_name"]}@{config["host"]}"...')
+ wrapper = MySQLWrapper(config['host'], config['username'], config['password'], config['db_name'])
+ Logger.get_logger().info('Connected.')
+ break
+ except Exception as e:
+ Logger.get_logger().info(f'Connection failed. Reason: "{e}";\nTrying again...')
+ sleep(timeout)
+ else:
+ Logger.get_logger().critical(
+ f'Failed to connect to "{config["db_name"]}@{config["host"]}". '
+ f'Check that database and then restart this service.'
+ )
+ continue
- wrapper = MySQLWrapper(config['host'], config['username'], config['password'], config['db_name'])
wrappers[config['name']] = wrapper
cursor = wrapper.connection.cursor()
for scheme in schemes:
- logger.debug(f'Preparing table "{scheme.meta["name"]}"...')
+ Logger.get_logger().info(f'Preparing table "{scheme.meta["name"]}"...')
cursor.execute('START TRANSACTION; {} COMMIT;'.format(scheme.get_create_line()))
wrapper.schemes[scheme.meta['name']] = scheme
cursor.close()
+def shutdown_databases():
+ Logger.get_logger().info('Shutting down databases...')
+ for wrapper in wrappers:
+ wrapper.close_connection()
+
+
def get_wrapper_for(database_name) -> Wrapper:
return wrappers.get(database_name, None)