117 lines
4.6 KiB
Python
117 lines
4.6 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
|
||
|
|
|
||
|
|
import pytest
|
||
|
|
|
||
|
|
from opensearchpy import RequestsHttpConnection
|
||
|
|
from opensearchpy.metrics.metrics_events import MetricsEvents
|
||
|
|
from opensearchpy.metrics.metrics_none import MetricsNone
|
||
|
|
|
||
|
|
from . import OpenSearchTestCase, get_client
|
||
|
|
|
||
|
|
|
||
|
|
class TestMetrics(OpenSearchTestCase):
|
||
|
|
def tearDown(self) -> None:
|
||
|
|
client = get_client()
|
||
|
|
client.indices.delete(index=["test-index"], ignore_unavailable=True)
|
||
|
|
|
||
|
|
def test_metrics_default_behavior(self) -> None:
|
||
|
|
# Test default behavior when metrics is not passed to the client
|
||
|
|
client = get_client()
|
||
|
|
index_name = "test-index"
|
||
|
|
index_body = {"settings": {"index": {"number_of_shards": 4}}}
|
||
|
|
try:
|
||
|
|
client.indices.create(index=index_name, body=index_body)
|
||
|
|
except Exception as e:
|
||
|
|
assert False, f"Error creating index: {e}"
|
||
|
|
|
||
|
|
def test_metrics_raises_error_when_value_is_none(self) -> None:
|
||
|
|
# Test behavior when metrics is given None.
|
||
|
|
metrics = None
|
||
|
|
with pytest.raises(AttributeError):
|
||
|
|
get_client(metrics=metrics)
|
||
|
|
|
||
|
|
def test_metrics_none_behavior(self) -> None:
|
||
|
|
# Test behavior when metrics is an instance of MetricsNone
|
||
|
|
metrics = MetricsNone()
|
||
|
|
client = get_client(metrics=metrics)
|
||
|
|
index_name = "test-index"
|
||
|
|
index_body = {"settings": {"index": {"number_of_shards": 4}}}
|
||
|
|
client.indices.create(index=index_name, body=index_body)
|
||
|
|
assert metrics.service_time is None
|
||
|
|
|
||
|
|
|
||
|
|
class TestMetricsEvents(OpenSearchTestCase):
|
||
|
|
def tearDown(self) -> None:
|
||
|
|
client = get_client()
|
||
|
|
client.indices.delete(index=["test-index"], ignore_unavailable=True)
|
||
|
|
|
||
|
|
def test_metrics_events_with_urllib3_connection(self) -> None:
|
||
|
|
# Test MetricsEvents behavior with urllib3 connection
|
||
|
|
metrics = MetricsEvents()
|
||
|
|
client = get_client(metrics=metrics)
|
||
|
|
|
||
|
|
# Calculate service time for create index operation
|
||
|
|
index_name = "test-index"
|
||
|
|
index_body = {"settings": {"index": {"number_of_shards": 4}}}
|
||
|
|
start1 = time.perf_counter()
|
||
|
|
client.indices.create(index=index_name, body=index_body)
|
||
|
|
duration1 = time.perf_counter() - start1
|
||
|
|
create_index_service_time = metrics.service_time
|
||
|
|
assert (
|
||
|
|
isinstance(create_index_service_time, float)
|
||
|
|
and create_index_service_time < duration1
|
||
|
|
)
|
||
|
|
|
||
|
|
# Calculate service time for adding document operation
|
||
|
|
document = {"title": "Moneyball", "director": "Bennett Miller", "year": "2011"}
|
||
|
|
id = "1"
|
||
|
|
start2 = time.perf_counter()
|
||
|
|
client.index(index=index_name, body=document, id=id, refresh=True)
|
||
|
|
duration2 = time.perf_counter() - start2
|
||
|
|
assert (
|
||
|
|
isinstance(metrics.service_time, float)
|
||
|
|
and metrics.service_time < duration2
|
||
|
|
and metrics.service_time != create_index_service_time
|
||
|
|
# Above check is to confirm service time differs from the previous API call.
|
||
|
|
)
|
||
|
|
|
||
|
|
def test_metrics_events_with_requests_http_connection(self) -> None:
|
||
|
|
# Test MetricsEvents behavior with requests HTTP connection
|
||
|
|
metrics = MetricsEvents()
|
||
|
|
client = get_client(metrics=metrics, connection_class=RequestsHttpConnection)
|
||
|
|
|
||
|
|
# Calculate service time for create index operation
|
||
|
|
index_name = "test-index"
|
||
|
|
index_body = {"settings": {"index": {"number_of_shards": 4}}}
|
||
|
|
start1 = time.perf_counter()
|
||
|
|
client.indices.create(index_name, body=index_body)
|
||
|
|
duration1 = time.perf_counter() - start1
|
||
|
|
create_index_service_time = metrics.service_time
|
||
|
|
assert (
|
||
|
|
isinstance(create_index_service_time, float)
|
||
|
|
and create_index_service_time < duration1
|
||
|
|
)
|
||
|
|
|
||
|
|
# Calculate service time for adding document operation
|
||
|
|
document = {"title": "Moneyball", "director": "Bennett Miller", "year": "2011"}
|
||
|
|
id = "1"
|
||
|
|
start2 = time.perf_counter()
|
||
|
|
client.index(index=index_name, body=document, id=id, refresh=True)
|
||
|
|
duration2 = time.perf_counter() - start2
|
||
|
|
assert (
|
||
|
|
isinstance(metrics.service_time, float)
|
||
|
|
and metrics.service_time < duration2
|
||
|
|
and metrics.service_time != create_index_service_time
|
||
|
|
# Above check is to confirm service time differs from the previous API call.
|
||
|
|
)
|