Skip to content

Commit 7a7f664

Browse files
committed
prefix test index names
1 parent 39dc25f commit 7a7f664

File tree

4 files changed

+78
-43
lines changed

4 files changed

+78
-43
lines changed

elasticsearch_metrics/imps/elastic6.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -251,14 +251,21 @@ def get_timeseries_index_template(cls):
251251
template_name=cls._template_name, pattern=cls._template_pattern
252252
)
253253

254+
@classmethod
255+
def get_timeseries_name_prefix(cls) -> str:
256+
return ""
257+
254258
@classmethod
255259
def get_index_name(cls, date: datetime.date | None = None) -> str:
256260
date = date or timezone.now().date()
257261
dateformat = getattr(
258262
settings, "ELASTICSEARCH_METRICS_DATE_FORMAT", DEFAULT_DATE_FORMAT
259263
)
260264
date_formatted = date.strftime(dateformat)
261-
return "{}_{}".format(cls._template_name, date_formatted)
265+
_name_parts = (cls._template_name, date_formatted)
266+
if _prefix := cls.get_timeseries_name_prefix():
267+
_name_parts = (_prefix, *_name_parts)
268+
return "_".join(_name_parts)
262269

263270

264271
class Metric(Document, BaseMetric):

elasticsearch_metrics/imps/elastic8.py

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -158,28 +158,12 @@ def record(
158158

159159
@classmethod
160160
def check_djelme_setup(cls, using: str | None = None) -> bool:
161+
# this base class has only a single index -- does it exist?
161162
return bool(cls._index.get(using=using))
162163

163-
@classmethod
164-
def refresh_timeseries_indexes(cls, using: str | None = None) -> None:
165-
cls._get_connection(using).indices.refresh(
166-
index=cls.format_timeseries_index_pattern()
167-
)
168-
169-
@classmethod
170-
def each_timeseries_index(
171-
cls, using: str | None = None
172-
) -> collections.abc.Iterator[tuple[str, dict[str, typing.Any]]]:
173-
_resp = cls._get_connection(using).indices.get(
174-
index=cls.format_timeseries_index_pattern(),
175-
)
176-
for _index_name, _index_info in _resp.items():
177-
assert isinstance(_index_name, str)
178-
assert isinstance(_index_info, dict)
179-
yield _index_name, _index_info
180-
181164
@classmethod
182165
def _djelme_teardown(cls, es_client):
166+
# this base class has only a single index -- delete it
183167
cls._index.delete(using=es_client)
184168

185169
@classmethod
@@ -263,13 +247,12 @@ class Meta:
263247

264248
@classmethod
265249
def init(cls, index=None, using=None) -> None:
266-
"""Create the index and populate the mappings in elasticsearch.
250+
"""Create an index template with mappings for timeseries indexes
267251
268252
overrides elasticsearch.Document.init
253+
(but doesn't call super().init(), which would create a "now" index)
269254
"""
270255
assert not cls.is_abstract
271-
# to init timeseries indexes, create only the template
272-
# (don't call super().init(), which would create a "now" index)
273256
cls.sync_index_template(using=using)
274257

275258
@classmethod
@@ -297,6 +280,24 @@ def search_timeseries_range(
297280
)
298281
return cls.search(index=_index_pattern).filter(_timestamp_q)
299282

283+
@classmethod
284+
def refresh_timeseries_indexes(cls, using: str | None = None) -> None:
285+
cls._get_connection(using).indices.refresh(
286+
index=cls.format_timeseries_index_pattern()
287+
)
288+
289+
@classmethod
290+
def each_timeseries_index(
291+
cls, using: str | None = None
292+
) -> collections.abc.Iterator[tuple[str, dict[str, typing.Any]]]:
293+
_resp = cls._get_connection(using).indices.get(
294+
index=cls.format_timeseries_index_pattern(),
295+
)
296+
for _index_name, _index_info in _resp.items():
297+
assert isinstance(_index_name, str)
298+
assert isinstance(_index_info, dict)
299+
yield _index_name, _index_info
300+
300301
@classmethod
301302
def _djelme_teardown(cls, es8_client: Elastic8Client) -> None:
302303
_indexname_wildcard = cls.format_timeseries_index_pattern()

elasticsearch_metrics/tests/_test_util.py

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from unittest import mock
33
import types
44
import typing
5+
import uuid
56

67
from django.core.management import call_command
78
from django.core.management.base import BaseCommand
@@ -52,18 +53,29 @@ def __init_subclass__(
5253

5354
def setUp(self):
5455
super().setUp()
56+
_name_prefix = uuid.uuid4().hex
57+
self.enterContext(
58+
mock.patch(
59+
"elasticsearch_metrics.imps.elastic8.TimeseriesRecord.get_timeseries_name_prefix",
60+
return_value=_name_prefix,
61+
)
62+
)
63+
self.enterContext(
64+
mock.patch(
65+
"elasticsearch_metrics.imps.elastic6.BaseMetric.get_timeseries_name_prefix",
66+
return_value=_name_prefix,
67+
),
68+
)
5569
if self.__autosetup_backends:
5670
self.setup_backends()
5771

5872
def tearDown(self):
59-
super().tearDown()
6073
if self.__autoteardown_backends:
6174
self.teardown_backends()
75+
super().tearDown()
6276

6377
def setup_backends(self):
64-
# TODO: prefix index names, avoid collisions across test runs
65-
# get settings from elasticsearch_metrics.tests.settings.DJELME_BACKENDS
66-
# self.teardown_backends() # in case any already exist
78+
# backends based on settings in django.conf.settings.DJELME_BACKENDS
6779
for _backend_name, _recordtypes in djelme_registry.each_recordtype_by_backend():
6880
djelme_registry.get_backend(_backend_name).djelme_setup(_recordtypes)
6981

elasticsearch_metrics/tests/test_imps_elastic8.py

Lines changed: 32 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -423,16 +423,19 @@ def setUp(self):
423423
Dummy8Event.refresh_timeseries_indexes()
424424

425425
def test_indexes(self):
426-
_index_names = {_name for _name, _ in Dummy8Event.each_timeseries_index()}
426+
_index_names = {
427+
_strip_test_prefix(_name)
428+
for _name, _ in Dummy8Event.each_timeseries_index()
429+
}
427430
self.assertEqual(
428431
_index_names,
429432
{
430-
"dummy8app_dummy8event_1234_05_06_",
431-
"dummy8app_dummy8event_1234_05_07_",
432-
"dummy8app_dummy8event_1234_06_01_",
433-
"dummy8app_dummy8event_1235_05_06_",
434-
"dummy8app_dummy8event_2345_06_09_",
435-
"dummy8app_dummy8event_2345_07_09_",
433+
"dummy8event_1234_05_06_",
434+
"dummy8event_1234_05_07_",
435+
"dummy8event_1234_06_01_",
436+
"dummy8event_1235_05_06_",
437+
"dummy8event_2345_06_09_",
438+
"dummy8event_2345_07_09_",
436439
},
437440
)
438441

@@ -482,15 +485,18 @@ def setUp(self):
482485
Monthly8Event.refresh_timeseries_indexes()
483486

484487
def test_indexes(self):
485-
_index_names = {_name for _name, _ in Monthly8Event.each_timeseries_index()}
488+
_index_names = {
489+
_strip_test_prefix(_name)
490+
for _name, _ in Monthly8Event.each_timeseries_index()
491+
}
486492
self.assertEqual(
487493
_index_names,
488494
{
489-
"dummy8evenz_eventlog_1234_05_",
490-
"dummy8evenz_eventlog_1234_06_",
491-
"dummy8evenz_eventlog_1235_05_",
492-
"dummy8evenz_eventlog_2345_06_",
493-
"dummy8evenz_eventlog_2345_07_",
495+
"eventlog_1234_05_",
496+
"eventlog_1234_06_",
497+
"eventlog_1235_05_",
498+
"eventlog_2345_06_",
499+
"eventlog_2345_07_",
494500
},
495501
)
496502

@@ -540,13 +546,16 @@ def setUp(self):
540546
ThingHappened.refresh_timeseries_indexes()
541547

542548
def test_indexes(self):
543-
_index_names = {_name for _name, _ in ThingHappened.each_timeseries_index()}
549+
_index_names = {
550+
_strip_test_prefix(_name)
551+
for _name, _ in ThingHappened.each_timeseries_index()
552+
}
544553
self.assertEqual(
545554
_index_names,
546555
{
547-
"dummy8app_happen_1234_",
548-
"dummy8app_happen_1235_",
549-
"dummy8app_happen_2345_",
556+
"happen_1234_",
557+
"happen_1235_",
558+
"happen_2345_",
550559
},
551560
)
552561

@@ -581,3 +590,9 @@ def _assert_things(hits, expected_thing_ids):
581590
ThingHappened.search_timeseries_range((1234, 5, 6, 2), (1234, 5, 7)),
582591
{"b"},
583592
)
593+
594+
595+
def _strip_test_prefix(index_name: str) -> str:
596+
# strip uuid test prefix
597+
(_, _, _without_prefix) = index_name.partition("_")
598+
return _without_prefix

0 commit comments

Comments
 (0)