From 978683d21cb04f2b61fb80f9ef5d9c8567b93da0 Mon Sep 17 00:00:00 2001 From: 4x10m Date: Thu, 21 Apr 2022 10:24:31 +0000 Subject: [PATCH 1/3] added port parsing in database connection string --- zlog_sql.py | 36 ++++++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/zlog_sql.py b/zlog_sql.py index 0a10212..c22ba84 100644 --- a/zlog_sql.py +++ b/zlog_sql.py @@ -357,19 +357,35 @@ def parse_args(self, args): else: return SQLiteDatabase({'database': match.group(1)}) - match = re.search('^\s*mysql://(.+?):(.+?)@(.+?)/(.+)\s*$', args) + match = re.search('^\s*mysql://(.+?):(.+?)@(.+?)(?::(.*))?/(.+)\s*$', args) if match: + parsedPort = match.group(4) return MySQLDatabase({'host': match.group(3), - 'user': match.group(1), - 'passwd': match.group(2), - 'db': match.group(4)}) - - match = re.search('^\s*postgres://(.+?):(.+?)@(.+?)/(.+)\s*$', args) + 'port': int(parsedPort), + 'user': match.group(1), + 'passwd': match.group(2), + 'db': match.group(5)} + ) if parsedPort != None else MySQLDatabase({'host': match.group(3), + 'user': match.group(1), + 'passwd': match.group(2), + 'db': match.group(5)} + ) + + match = re.search('^\s*postgres://(.+?):(.+?)@(.+?)(?::(.*))?/(.+)\s*$', args) if match: - return PostgresDatabase({'host': match.group(3), - 'user': match.group(1), - 'password': match.group(2), - 'database': match.group(4)}) + parsedPort = match.group(4) + return PostgresDatabase({ + 'host': match.group(3), + 'port': int(parsedPort), + 'user': match.group(1), + 'password': match.group(2), + 'database': match.group(5) + }) if parsedPort != None else PostgresDatabase({ + 'host': match.group(3), + 'user': match.group(1), + 'password': match.group(2), + 'database': match.group(5) + }) raise Exception('Unrecognized connection string. Check the documentation.') From a20313bedbf545057e71aa295c0243037447c9ec Mon Sep 17 00:00:00 2001 From: 4x10m Date: Thu, 21 Apr 2022 11:38:58 +0000 Subject: [PATCH 2/3] notes --- README.md | 4 ++-- zlog_sql.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 075fe40..6ed1893 100644 --- a/README.md +++ b/README.md @@ -25,14 +25,14 @@ MySQL gives great compression ratio and is easily searchable. SQLite database do ### MySQL For MySQL, set module argument matching following format: ``` -mysql://username:password@localhost/database_name +mysql://username:password@localhost:port/database_name ``` **Important:** you need [`PyMySQL`](https://github.com/PyMySQL/PyMySQL) pip package for MySQL logging. Install it with `pip3 install PyMySQL` command. ### PostgreSQL For PostgreSQL, set module argument matching following format: ``` -postgres://username:password@localhost/database_name +postgres://username:password@localhost:port/database_name ``` **Important:** you need [`psycopg2`](https://github.com/psycopg/psycopg2) pip package for PostgreSQL logging. Install it with `pip3 install psycopg2` command. diff --git a/zlog_sql.py b/zlog_sql.py index c22ba84..e72739d 100644 --- a/zlog_sql.py +++ b/zlog_sql.py @@ -20,8 +20,8 @@ class zlog_sql(znc.Module): wiki_page = 'ZLog_SQL' has_args = True - args_help_text = ('Connection string in format: mysql://user:pass@host/database_name' - ' or postgres://user:pass@host/database_name' + args_help_text = ('Connection string in format: mysql://user:pass@host:port/database_name' + ' or postgres://user:pass@host:port/database_name' ' or sqlite://path/to/db.sqlite') log_queue = multiprocessing.SimpleQueue() From 119ee52ca99952ea38fd2d6e48d8c30ea6a734fb Mon Sep 17 00:00:00 2001 From: 4x10m Date: Thu, 21 Apr 2022 12:48:59 +0000 Subject: [PATCH 3/3] update master readme since main repo seems to be inactive --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 6ed1893..387dac1 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,10 @@ # zlog-sql MySQL/SQLite logging plugin for ZNC IRC bouncer written in Python 3 +## Update 21/04/2022 + +I added the ability to parse port in database connection string specified as this module argument + ## Features * Supports MySQL, PostgreSQL and SQLite databases. * Asynchronous database writes on separate thread. Guarantees that ZNC won't hang during SQL connection timeout.