58e9b1d66c
* Introduced service time metrics to opensearch-py client Signed-off-by: saimedhi <saimedhi@amazon.com> * Introduced service time metrics to opensearch-py client Signed-off-by: saimedhi <saimedhi@amazon.com> * Introduced service time metrics to opensearch-py client Signed-off-by: saimedhi <saimedhi@amazon.com> * Added service time metrics Signed-off-by: saimedhi <saimedhi@amazon.com> --------- Signed-off-by: saimedhi <saimedhi@amazon.com> Signed-off-by: Sai Medhini Reddy Maryada <117196660+saimedhi@users.noreply.github.com>
62 lines
1.7 KiB
Python
62 lines
1.7 KiB
Python
# SPDX-License-Identifier: Apache-2.0
|
|
#
|
|
# The OpenSearch Contributors require contributions made to
|
|
# this file be licensed under the Apache-2.0 license or a
|
|
# compatible open source license.
|
|
#
|
|
# Modifications Copyright OpenSearch Contributors. See
|
|
# GitHub history for details.
|
|
|
|
import time
|
|
from typing import Optional
|
|
|
|
from events import Events
|
|
|
|
from opensearchpy.metrics.metrics import Metrics
|
|
|
|
|
|
class MetricsEvents(Metrics):
|
|
"""
|
|
The MetricsEvents class implements the Metrics abstract base class
|
|
and tracks metrics such as start time, end time, and service time
|
|
during request processing.
|
|
"""
|
|
|
|
@property
|
|
def start_time(self) -> Optional[float]:
|
|
return self._start_time
|
|
|
|
@property
|
|
def end_time(self) -> Optional[float]:
|
|
return self._end_time
|
|
|
|
@property
|
|
def service_time(self) -> Optional[float]:
|
|
return self._service_time
|
|
|
|
def __init__(self) -> None:
|
|
self.events = Events()
|
|
self._start_time: Optional[float] = None
|
|
self._end_time: Optional[float] = None
|
|
self._service_time: Optional[float] = None
|
|
|
|
# Subscribe to the request_start and request_end events
|
|
self.events.request_start += self._on_request_start
|
|
self.events.request_end += self._on_request_end
|
|
|
|
def request_start(self) -> None:
|
|
self.events.request_start()
|
|
|
|
def _on_request_start(self) -> None:
|
|
self._start_time = time.perf_counter()
|
|
self._end_time = None
|
|
self._service_time = None
|
|
|
|
def request_end(self) -> None:
|
|
self.events.request_end()
|
|
|
|
def _on_request_end(self) -> None:
|
|
self._end_time = time.perf_counter()
|
|
if self._start_time is not None:
|
|
self._service_time = self._end_time - self._start_time
|