8000 new: `get/put /_admin/log/structured` (#307) · arangodb/python-arango@8127f33 · GitHub
[go: up one dir, main page]

Skip to content

Commit 8127f33

Browse files
authored
new: get/put /_admin/log/structured (#307)
* new: structured log settings * fix lint
1 parent 99f5d9b commit 8127f33

File tree

3 files changed

+76
-2
lines changed

3 files changed

+76
-2
lines changed

arango/database.py

Lines changed: 52 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
from datetime import datetime
1010
from numbers import Number
11-
from typing import Any, List, Optional, Sequence, Union
11+
from typing import Any, Dict, List, Optional, Sequence, Union
1212
from warnings import warn
1313

1414
from arango.api import ApiGroup
@@ -48,6 +48,8 @@
4848
ServerLicenseSetError,
4949
ServerLogLevelError,
5050
ServerLogLevelSetError,
51+
ServerLogSettingError,
52+
ServerLogSettingSetError,
5153
ServerMetricsError,
5254
ServerReadLogError,
5355
ServerReloadRoutingError,
@@ -749,6 +751,52 @@ def response_handler(resp: Response) -> Json:
749751

750752
return self._execute(request, response_handler)
751753

754+
def log_settings(self) -> Result[Json]:
755+
"""Return the structured log settings.
756+
757+
:return: Current log settings. False values are not returned.
758+
:rtype: dict
759+
"""
760+
request = Request(method="get", endpoint="/_admin/log/structured")
761+
762+
def response_handler(resp: Response) -> Json:
763+
if not resp.is_success:
764+
raise ServerLogSettingError(resp, request)
765+
result: Json = resp.body
766+
return result
767+
768+
return self._execute(request, response_handler)
769+
770+
def set_log_settings(self, **kwargs: Dict[str, Any]) -> Result[Json]:
771+
"""Set the structured log settings.
772+
773+
This method takes arbitrary keyword arguments where the keys are the
774+
structured log parameters and the values are true or false, for either
775+
enabling or disabling the parameters.
776+
777+
.. code-block:: python
778+
779+
arango.set_log_settings(
780+
database=True,
781+
url=True,
782+
username=False,
783+
)
784+
785+
:param kwargs: Structured log parameters.
786+
:type kwargs: Dict[str, Any]
787+
:return: New log settings. False values are not returned.
788+
:rtype: dict
789+
"""
790+
request = Request(method="put", endpoint="/_admin/log/structured", data=kwargs)
791+
792+
def response_handler(resp: Response) -> Json:
793+
if not resp.is_success:
794+
raise ServerLogSettingSetError(resp, request)
795+
result: Json = resp.body
796+
return result
797+
798+
return self._execute(request, response_handler)
799+
752800
def log_levels(self, server_id: Optional[str] = None) -> Result[Json]:
753801
"""Return current logging levels.
754802
@@ -775,7 +823,7 @@ def response_handler(resp: Response) -> Json:
775823
return self._execute(request, response_handler)
776824

777825
def set_log_levels(
778-
self, server_id: Optional[str] = None, **kwargs: str
826+
self, server_id: Optional[str] = None, **kwargs: Dict[str, Any]
779827
) -> Result[Json]:
780828
"""Set the logging levels.
781829
@@ -797,6 +845,8 @@ def set_log_levels(
797845
JWT authentication whereas Coordinators also support authentication
798846
using usernames and passwords.
799847
:type server_id: str | None
848+
E864 :param kwargs: Logging levels.
849+
:type kwargs: Dict[str, Any]
800850
:return: New logging levels.
801851
:rtype: dict
802852
"""

arango/exceptions.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -666,10 +666,18 @@ class ServerLogLevelError(ArangoServerError):
666666
"""Failed to retrieve server log levels."""
667667

668668

669+
class ServerLogSettingError(ArangoServerError):
670+
"""Failed to retrieve server log settings."""
671+
672+
669673
class ServerLogLevelSetError(ArangoServerError):
670674
"""Failed to set server log levels."""
671675

672676

677+
class ServerLogSettingSetError(ArangoServerError):
678+
"""Failed to set server log settings."""
679+
680+
673681
class ServerReloadRoutingError(ArangoServerError):
674682
"""Failed to reload routing details."""
675683

tests/test_database.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,22 @@ def test_database_misc_methods(sys_db, db, bad_db, cluster):
253253
with assert_raises(ServerLogLevelSetError):
254254
bad_db.set_log_levels(**new_levels)
255255

256+
# Test Log Settings
257+
result_1 = sys_db.set_log_settings(database=True, url=True, username=True)
258+
result_2 = sys_db.log_settings()
259+
assert isinstance(result_1, dict)
260+
assert "database" in result_1
261+
assert "url" in result_1
262+
assert "username" in result_1
263+
assert result_1 == result_2
264+
265+
result_1 = sys_db.set_log_settings(database=True, username=False)
266+
result_2 = sys_db.log_settings()
267+
assert "database" in result_1
268+
assert "url" in result_1
269+
assert "username" not in result_1
270+
assert result_1 == result_2
271+
256272
# Test get storage engine
257273
engine = db.engine()
258274
assert engine["name"] in ["rocksdb"]

0 commit comments

Comments
 (0)
0