From 44e45794327d9a54d227c3242231025db37518bb Mon Sep 17 00:00:00 2001 From: Artyom Abakumov Date: Mon, 20 Apr 2026 16:00:59 +0300 Subject: [PATCH 1/3] Add plugin parsing to tracemgr output --- src/firebird/driver/core.py | 2 ++ src/firebird/driver/types.py | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/firebird/driver/core.py b/src/firebird/driver/core.py index 211188c..ebc6bc9 100644 --- a/src/firebird/driver/core.py +++ b/src/firebird/driver/core.py @@ -5581,6 +5581,8 @@ def store(): '%Y-%m-%d %H:%M:%S') elif line.lstrip().startswith('flags:'): current['flags'] = line.split(':')[1].strip().split(',') + elif line.lstrip().startswith('plugins:'): + current['plugins'] = line.split(':')[1].strip().split(',') else: # pragma: no cover raise InterfaceError(f"Unexpected line in trace session list: {line}") store() diff --git a/src/firebird/driver/types.py b/src/firebird/driver/types.py index 7077aed..7ad83b7 100644 --- a/src/firebird/driver/types.py +++ b/src/firebird/driver/types.py @@ -1372,12 +1372,14 @@ class TraceSession: timestamp (datetime.datetime): Session start timestamp name (str): Session name (if defined) flags (list): List with session flag names + plugins (list): List with trace plugins for this session """ id: int user: str timestamp: datetime.datetime name: str = '' flags: list = field(default_factory=list) + plugins: list = field(default_factory=list) @dataclass class ImpData: From c6b03484e5b365bc05a9924a98297b6d8ccf9644 Mon Sep 17 00:00:00 2001 From: Artyom Abakumov Date: Wed, 22 Apr 2026 17:30:01 +0300 Subject: [PATCH 2/3] Add ability to specify plugins names for user trace session --- src/firebird/driver/core.py | 8 +++++++- src/firebird/driver/types.py | 1 + 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/firebird/driver/core.py b/src/firebird/driver/core.py index ebc6bc9..ab143f7 100644 --- a/src/firebird/driver/core.py +++ b/src/firebird/driver/core.py @@ -5496,12 +5496,13 @@ def __action(self, action: ServerAction, label: str, session_id: int) -> str: # response should contain the error message raise DatabaseError(response) return response - def start(self, *, config: str, name: str | None=None) -> int: + def start(self, *, config: str, name: str | None=None, plugins: str | list[str] | None) -> int: """Start new trace session. **(ASYNC service)** Arguments: config: Trace session configuration. name: Trace session name. + plugins: Plugins to use for the session (only for FIREBIRD 6+) Returns: Trace session ID. @@ -5511,6 +5512,11 @@ def start(self, *, config: str, name: str | None=None) -> int: spb.insert_tag(ServerAction.TRACE_START) if name is not None: spb.insert_string(SrvTraceOption.NAME, name) + if plugins is not None: + if isinstance(plugins, list): + plugins = ",".join(plugins) + spb.insert_string(SrvTraceOption.PLUGINS, plugins) + spb.insert_string(SrvTraceOption.CONFIG, config, encoding=self._srv().encoding) self._srv()._svc.start(spb.get_buffer()) response = self._srv()._fetch_line() diff --git a/src/firebird/driver/types.py b/src/firebird/driver/types.py index 7ad83b7..c95abfa 100644 --- a/src/firebird/driver/types.py +++ b/src/firebird/driver/types.py @@ -830,6 +830,7 @@ class SrvTraceOption(IntEnum): ID = 1 NAME = 2 CONFIG = 3 + PLUGINS = 4 class SrvPropertiesOption(IntEnum): """Parameters for ServerAction.PROPERTIES. From 4ae7d0c97fa234037ddaadbf7fdfae5201fda3db Mon Sep 17 00:00:00 2001 From: Artyom Abakumov Date: Wed, 22 Apr 2026 17:58:44 +0300 Subject: [PATCH 3/3] Add missing default value for plugins --- src/test.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 src/test.py diff --git a/src/test.py b/src/test.py new file mode 100644 index 0000000..467953a --- /dev/null +++ b/src/test.py @@ -0,0 +1,24 @@ +import sys +import os + +from firebird.driver.fbapi import load_api +sys.path.append(os.getcwd()) +script_dir = os.path.dirname(os.path.abspath(__file__)) +sys.path.append(script_dir) +from firebird.driver.core import connect_server + +load_api("/home/artmkn/wspace/reps/rdb5trace/gen/Debug/firebird/lib/libfbclient.so") + +with connect_server('', user='SYSDBA', password='masterkey') as srv: + + trace_session_id = srv.trace.start(config="#MESSAGETRACE\ndatabase\n{\nenabled = true\n}", name="messagetrace") + print(trace_session_id) + + a = input() + # K = 1 + # V = TraceSession(id=1, user='SYSDBA', timestamp=..., name=, flags=['active', ' trace']) + # for k,v in srv.trace.sessions.items(): + # if v.flags[0] == 'active': + # print(f"Trace {v.name}: Plugins: {v.plugins}") + +