Skip to content

Commit f905d6e

Browse files
authored
[DE-554] serverId query param (GET/PUT /_admin/log/level) (#262)
* initial commit * new: test get/set log levels w/ `server_id`
1 parent 5fdf941 commit f905d6e

File tree

2 files changed

+37
-4
lines changed

2 files changed

+37
-4
lines changed

arango/database.py

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -572,13 +572,22 @@ def response_handler(resp: Response) -> Json:
572572

573573
return self._execute(request, response_handler)
574574

575-
def log_levels(self) -> Result[Json]:
575+
def log_levels(self, server_id: Optional[str] = None) -> Result[Json]:
576576
"""Return current logging levels.
577577
578+
:param server_id: Forward log level to a specific server. This makes it
579+
easier to adjust the log levels in clusters because DB-Servers require
580+
JWT authentication whereas Coordinators also support authentication
581+
using usernames and passwords.
582+
:type server_id: str
578583
:return: Current logging levels.
579584
:rtype: dict
580585
"""
581-
request = Request(method="get", endpoint="/_admin/log/level")
586+
params: Params = {}
587+
if server_id is not None:
588+
params["serverId"] = server_id
589+
590+
request = Request(method="get", endpoint="/_admin/log/level", params=params)
582591

583592
def response_handler(resp: Response) -> Json:
584593
if not resp.is_success:
@@ -588,7 +597,9 @@ def response_handler(resp: Response) -> Json:
588597

589598
return self._execute(request, response_handler)
590599

591-
def set_log_levels(self, **kwargs: str) -> Result[Json]:
600+
def set_log_levels(
601+
self, server_id: Optional[str] = None, **kwargs: str
602+
) -> Result[Json]:
592603
"""Set the logging levels.
593604
594605
This method takes arbitrary keyword arguments where the keys are the
@@ -604,10 +615,21 @@ def set_log_levels(self, **kwargs: str) -> Result[Json]:
604615
605616
Keys that are not valid logger names are ignored.
606617
618+
:param server_id: Forward log level to a specific server. This makes it
619+
easier to adjust the log levels in clusters because DB-Servers require
620+
JWT authentication whereas Coordinators also support authentication
621+
using usernames and passwords.
622+
:type server_id: str | None
607623
:return: New logging levels.
608624
:rtype: dict
609625
"""
610-
request = Request(method="put", endpoint="/_admin/log/level", data=kwargs)
626+
params: Params = {}
627+
if server_id is not None:
628+
params["serverId"] = server_id
629+
630+
request = Request(
631+
method="put", endpoint="/_admin/log/level", params=params, data=kwargs
632+
)
611633

612634
def response_handler(resp: Response) -> Json:
613635
if not resp.is_success:

tests/test_database.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,10 @@ def test_database_misc_methods(sys_db, db, bad_db):
199199
# Test get log levels
200200
assert isinstance(sys_db.log_levels(), dict)
201201

202+
# Test get log levels (with server_id)
203+
server_id = sys_db.replication.server_id()
204+
assert isinstance(sys_db.log_levels(server_id), dict)
205+
202206
# Test get log levels with bad database
203207
with assert_raises(ServerLogLevelError) as err:
204208
bad_db.log_levels()
@@ -212,6 +216,13 @@ def test_database_misc_methods(sys_db, db, bad_db):
212216
for key, value in sys_db.log_levels().items():
213217
assert result[key] == value
214218

219+
# Test set log levels (with server_id)
220+
result = sys_db.set_log_levels(server_id, **new_levels)
221+
for key, value in new_levels.items():
222+
assert result[key] == value
223+
for key, value in sys_db.log_levels(server_id).items():
224+
assert result[key] == value
225+
215226
# Test set log levels with bad database
216227
with assert_raises(ServerLogLevelSetError):
217228
bad_db.set_log_levels(**new_levels)

0 commit comments

Comments
 (0)