From 3042225ff9f56e244ba84575bd78c9c359bdb532 Mon Sep 17 00:00:00 2001 From: Johannes Findeisen Date: Mon, 21 Aug 2023 19:08:19 +0200 Subject: [PATCH] Added MySQL support and first code for testing the connection. (0.24.1) --- bin/linspector | 4 +- etc/linspector.conf | 2 +- linspector/database.py | 3 +- linspector/databases/{mariadb.py => dummy.py} | 14 +++++-- linspector/databases/mysql.py | 41 +++++++++++++++++++ requirements.txt | 3 ++ 6 files changed, 58 insertions(+), 9 deletions(-) rename linspector/databases/{mariadb.py => dummy.py} (55%) create mode 100644 linspector/databases/mysql.py diff --git a/bin/linspector b/bin/linspector index 4923c68..e87cb6b 100755 --- a/bin/linspector +++ b/bin/linspector @@ -19,7 +19,7 @@ from linspector.environment import Environment from linspector.linspector import Linspector from linspector.monitors import Monitors -__version__ = '0.24.0' +__version__ = '0.24.1' __author__ = 'Johannes Findeisen ' @@ -105,7 +105,7 @@ def linspector(): try: if configuration.get_option('linspector', 'databases'): - log.info('Loading databases: ' + configuration.get_option('linspector', 'databases')) + log.info('loading databases: ' + configuration.get_option('linspector', 'databases')) database_list = configuration.get_option('linspector', 'databases') database_list = database_list.split(',') for database_name in database_list: diff --git a/etc/linspector.conf b/etc/linspector.conf index 3bb3835..052e71b 100644 --- a/etc/linspector.conf +++ b/etc/linspector.conf @@ -24,7 +24,7 @@ logfile_level = DEBUG ; size of logfiles (default: 1MB) logfile_size = 10MB -databases = mariadb +databases = mysql notifications = diff --git a/linspector/database.py b/linspector/database.py index 2dc8e4e..3627882 100644 --- a/linspector/database.py +++ b/linspector/database.py @@ -6,8 +6,7 @@ See LICENSE (MIT license). class Database: - def __init__(self, configuration, environment, log, **kwargs): - self._args = {} + def __init__(self, configuration, environment, log): self._configuration = configuration self._environment = environment self._log = log diff --git a/linspector/databases/mariadb.py b/linspector/databases/dummy.py similarity index 55% rename from linspector/databases/mariadb.py rename to linspector/databases/dummy.py index 51d0a33..d95733c 100644 --- a/linspector/databases/mariadb.py +++ b/linspector/databases/dummy.py @@ -7,10 +7,16 @@ from linspector.database import Database def create(configuration, environment, log): - return MariaDBDatabase(configuration, environment, log) + return DummyDBDatabase(configuration, environment, log) -class MariaDBDatabase(Database): +class DummyDBDatabase(Database): + """ + This is a dummy database + """ - def execute(self): - self._log.debug("Hello from MariaDB Database...") + def connect(self): + pass + + def insert(self): + pass diff --git a/linspector/databases/mysql.py b/linspector/databases/mysql.py new file mode 100644 index 0000000..17b62f7 --- /dev/null +++ b/linspector/databases/mysql.py @@ -0,0 +1,41 @@ +""" +This file is part of Linspector (https://linspector.org/) +Copyright (c) 2022-2023 Johannes Findeisen . All Rights Reserved. +See LICENSE (MIT license). +""" +#from mysql.connector import connect, Error +import pymysql.cursors + +from linspector.database import Database + + +def create(configuration, environment, log): + return MySQLDatabase(configuration, environment, log) + + +class MySQLDatabase(Database): + + def __init__(self, configuration, environment, log): + super().__init__(configuration, environment, log) + + try: + self._connection = pymysql.connect(host='127.0.0.1', + user='linspector', + password='password', + database='linspector', + cursorclass=pymysql.cursors.DictCursor) + log.debug(self._connection) + except Exception as err: + log.warning('database connection failed: {0}'.format(err)) + + try: + with self._connection.cursor() as cursor: + sql = 'SELECT CURDATE()' + cursor.execute(sql) + result = cursor.fetchone() + log.info(result) + except Exception as err: + log.warning('database query failed: {0}'.format(err)) + + def insert(self): + pass diff --git a/requirements.txt b/requirements.txt index 91fe720..af047b5 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,13 +4,16 @@ asyncssh==2.13.2 fastapi==0.101.1 fritzconnection==1.13.1 loguru==0.7.0 +mysql-connector-python==8.1.0 paramiko==3.3.1 pydantic==2.2.1 +pymysql==1.1.0 pysnmp==4.4.12 python-gammu==3.2.4 pytz==2023.3 requests==2.31.0 rich==13.5.2 +SQLAlchemy==2.0.20 syslog2==0.5.0 textual==0.33.0 typer==0.9.0