diff --git a/ydb/_apis.py b/ydb/_apis.py index 827a71a4..859952ce 100644 --- a/ydb/_apis.py +++ b/ydb/_apis.py @@ -11,6 +11,7 @@ ydb_operation_v1_pb2_grpc, ydb_topic_v1_pb2_grpc, ydb_query_v1_pb2_grpc, + ydb_monitoring_v1_pb2_grpc, ) from ._grpc.v4.protos import ( @@ -22,6 +23,7 @@ ydb_operation_pb2, ydb_common_pb2, ydb_query_pb2, + ydb_monitoring_pb2, ) else: @@ -33,6 +35,7 @@ ydb_operation_v1_pb2_grpc, ydb_topic_v1_pb2_grpc, ydb_query_v1_pb2_grpc, + ydb_monitoring_v1_pb2_grpc, ) from ._grpc.common.protos import ( @@ -44,6 +47,7 @@ ydb_operation_pb2, ydb_common_pb2, ydb_query_pb2, + ydb_monitoring_pb2, ) @@ -56,6 +60,7 @@ ydb_discovery = ydb_discovery_pb2 ydb_operation = ydb_operation_pb2 ydb_query = ydb_query_pb2 +ydb_monitoring = ydb_monitoring_pb2 class CmsService(object): @@ -134,3 +139,9 @@ class QueryService(object): ExecuteQuery = "ExecuteQuery" ExecuteScript = "ExecuteScript" FetchScriptResults = "FetchScriptResults" + + +class MonitoringService(object): + Stub = ydb_monitoring_v1_pb2_grpc.MonitoringServiceStub + + SelfCheck = "SelfCheck" diff --git a/ydb/monitoring.py b/ydb/monitoring.py new file mode 100644 index 00000000..8fa7b799 --- /dev/null +++ b/ydb/monitoring.py @@ -0,0 +1,64 @@ +# -*- coding: utf-8 -*- +import abc +import enum +from abc import abstractmethod +from . import issues, operation, settings as settings_impl, _apis + + +class SelfCheckSettings(settings_impl.BaseRequestSettings): + pass + + +def _self_check_request_factory(return_verbose_status=None, minimum_status=None, maximum_level=None): + request = _apis.ydb_monitoring.SelfCheckRequest() + if return_verbose_status is not None: + request.return_verbose_status = return_verbose_status + if minimum_status is not None: + request.minimum_status = minimum_status + if maximum_level is not None: + request.maximum_level = maximum_level + return request + + +def _wrap_self_check_response(rpc_state, response): + issues._process_response(response.operation) + message = _apis.ydb_monitoring.SelfCheckResult() + response.operation.result.Unpack(message) + return message + + +class IMonitoringClient(abc.ABC): + @abstractmethod + def __init__(self, driver): + pass + + @abstractmethod + def self_check(self, return_verbose_status=None, minimum_status=None, maximum_level=None, settings=None): + pass + + +class BaseMonitoringClient(IMonitoringClient): + __slots__ = ("_driver",) + + def __init__(self, driver): + self._driver = driver + + def self_check(self, return_verbose_status=None, minimum_status=None, maximum_level=None, settings=None): + return self._driver( + _self_check_request_factory(return_verbose_status, minimum_status, maximum_level), + _apis.MonitoringService.Stub, + _apis.MonitoringService.SelfCheck, + _wrap_self_check_response, + settings, + ) + + +class MonitoringClient(BaseMonitoringClient): + def async_self_check(self, return_verbose_status=None, minimum_status=None, maximum_level=None, settings=None): + return self._driver.future( + _self_check_request_factory(return_verbose_status, minimum_status, maximum_level), + _apis.MonitoringService.Stub, + _apis.MonitoringService.SelfCheck, + _wrap_self_check_response, + settings, + )