2323)
2424from elasticsearch_metrics .tests .dummy8app .metrics import (
2525 Dummy8Event ,
26- Dummy8EventWithExplicitNamePrefix ,
26+ Monthly8Event ,
2727 ThingHappened ,
2828 ThingHappeningsReport ,
2929)
@@ -37,55 +37,103 @@ def _es8_client(
3737 return _backend .elastic8_client
3838
3939
40- class TestFormatIndexName (SimpleDjelmeTestCase ):
40+ class TestNamesAndPatterns (SimpleDjelmeTestCase ):
4141 def test_format_timeseries_index_name (self ):
4242 date = dt .date (2020 , 2 , 14 )
4343 self .assertEqual (
4444 Dummy8Event .format_timeseries_index_name (date ),
4545 "dummy8app_dummy8event_2020_02_14_" ,
4646 )
47-
48- def test_format_timeseries_index_name__cls_timedepth (self ):
49- date = dt .date (2020 , 2 , 14 )
47+ self .assertEqual (
48+ Monthly8Event .format_timeseries_index_name (date ),
49+ "dummy8evenz_eventlog_2020_02_" ,
50+ )
5051 self .assertEqual (
5152 ThingHappened .format_timeseries_index_name (date ),
5253 "dummy8app_happen_2020_" ,
5354 )
5455 self .assertEqual (
5556 ThingHappeningsReport .format_timeseries_index_name (date ),
56- "blarg_thinghappeningsreport_2020_02_14_ " ,
57+ "blarg_thinghappeningsreport_2020_02_ " ,
5758 )
5859
5960 def test_format_index_name_respects_date_format_setting (self ):
6061 with self .settings (DJELME_DEFAULT_TIMEDEPTH = 4 ):
6162 date = dt .date (2020 , 2 , 14 )
63+ # no timedepth set; use default setting
6264 self .assertEqual (
6365 Dummy8Event .format_timeseries_index_name (date ),
6466 "dummy8app_dummy8event_2020_02_14_00_" ,
6567 )
68+ # timedepth set; ignore default setting
69+ self .assertEqual (
70+ Monthly8Event .format_timeseries_index_name (date ),
71+ "dummy8evenz_eventlog_2020_02_" ,
72+ )
6673 self .assertEqual (
6774 ThingHappened .format_timeseries_index_name (date ),
68- "dummy8app_happen_2020_" , # ThingHappened.Meta has timedepth=1
75+ "dummy8app_happen_2020_" ,
76+ )
77+ self .assertEqual (
78+ ThingHappeningsReport .format_timeseries_index_name (date ),
79+ "blarg_thinghappeningsreport_2020_02_" ,
6980 )
7081
71-
72- class TestFormatIndexPattern (SimpleDjelmeTestCase ):
73- def test_format_timeseries_index_pattern (self ):
82+ def test_format_timeseries_index_pattern__lotsa_parts (self ):
7483 _timeparts = (2020 , 2 , 14 , 0 , 1 , 2 )
7584 self .assertEqual (
7685 Dummy8Event .format_timeseries_index_pattern (_timeparts ),
7786 "dummy8app_dummy8event_2020_02_14_*" ,
7887 )
88+ self .assertEqual (
89+ Monthly8Event .format_timeseries_index_pattern (_timeparts ),
90+ "dummy8evenz_eventlog_2020_02_*" ,
91+ )
92+ self .assertEqual (
93+ ThingHappened .format_timeseries_index_pattern (_timeparts ),
94+ "dummy8app_happen_2020_*" ,
95+ )
96+ self .assertEqual (
97+ ThingHappeningsReport .format_timeseries_index_pattern (_timeparts ),
98+ "blarg_thinghappeningsreport_2020_02_*" ,
99+ )
79100
80- def test_format_timeseries_index_pattern__cls_timedepth (self ):
101+ def test_format_timeseries_index_pattern__some_parts (self ):
81102 _timeparts = (2020 , 2 , 14 )
103+ self .assertEqual (
104+ Dummy8Event .format_timeseries_index_pattern (_timeparts ),
105+ "dummy8app_dummy8event_2020_02_14_*" ,
106+ )
107+ self .assertEqual (
108+ Monthly8Event .format_timeseries_index_pattern (_timeparts ),
109+ "dummy8evenz_eventlog_2020_02_*" ,
110+ )
82111 self .assertEqual (
83112 ThingHappened .format_timeseries_index_pattern (_timeparts ),
84113 "dummy8app_happen_2020_*" ,
85114 )
86115 self .assertEqual (
87116 ThingHappeningsReport .format_timeseries_index_pattern (_timeparts ),
88- "blarg_thinghappeningsreport_2020_02_14_*" ,
117+ "blarg_thinghappeningsreport_2020_02_*" ,
118+ )
119+
120+ def test_format_timeseries_index_pattern__one_part (self ):
121+ _timeparts = (2020 ,)
122+ self .assertEqual (
123+ Dummy8Event .format_timeseries_index_pattern (_timeparts ),
124+ "dummy8app_dummy8event_2020_*" ,
125+ )
126+ self .assertEqual (
127+ Monthly8Event .format_timeseries_index_pattern (_timeparts ),
128+ "dummy8evenz_eventlog_2020_*" ,
129+ )
130+ self .assertEqual (
131+ ThingHappened .format_timeseries_index_pattern (_timeparts ),
132+ "dummy8app_happen_2020_*" ,
133+ )
134+ self .assertEqual (
135+ ThingHappeningsReport .format_timeseries_index_pattern (_timeparts ),
136+ "blarg_thinghappeningsreport_2020_*" ,
89137 )
90138
91139 def test_format_index_pattern_respects_date_format_setting (self ):
@@ -95,9 +143,13 @@ def test_format_index_pattern_respects_date_format_setting(self):
95143 Dummy8Event .format_timeseries_index_pattern (_timeparts ),
96144 "dummy8app_dummy8event_2020_02_14_00_*" ,
97145 )
146+ self .assertEqual (
147+ Monthly8Event .format_timeseries_index_pattern (_timeparts ),
148+ "dummy8evenz_eventlog_2020_02_*" ,
149+ )
98150 self .assertEqual (
99151 ThingHappened .format_timeseries_index_pattern (_timeparts ),
100- "dummy8app_happen_2020_*" , # ThingHappened.Meta has timedepth=1
152+ "dummy8app_happen_2020_*" ,
101153 )
102154
103155
@@ -138,12 +190,9 @@ def test_get_index_template_creates_template_with_mapping(self):
138190 assert properties ["thing_id" ] == {"type" : "keyword" }
139191 assert properties ["happen_code" ] == {"type" : "keyword" }
140192
141- # regression test
142193 def test_mappings_are_not_shared (self ):
143194 template1 = Dummy8Event .get_timeseries_template ().to_dict ()
144- template2 = (
145- Dummy8EventWithExplicitNamePrefix .get_timeseries_template ().to_dict ()
146- )
195+ template2 = Monthly8Event .get_timeseries_template ().to_dict ()
147196 assert "intensity" in template1 ["template" ]["mappings" ]["properties" ]
148197 assert "intenzity" not in template1 ["template" ]["mappings" ]["properties" ]
149198 assert "intensity" not in template2 ["template" ]["mappings" ]["properties" ]
@@ -169,7 +218,7 @@ class Meta:
169218 def test_template_name_defined_with_no_template_falls_back_to_default_template (
170219 self ,
171220 ):
172- template = Dummy8EventWithExplicitNamePrefix .get_timeseries_template ()
221+ template = Monthly8Event .get_timeseries_template ()
173222 # prefix and recordtype specified in class Meta
174223 assert template ._template_name == "dummy8evenz_eventlog__template"
175224 # template pattern generated using same options
@@ -338,7 +387,7 @@ def test_init(self):
338387 self .assertEqual (_properties ["thing_id" ], {"type" : "keyword" })
339388 self .assertEqual (_properties ["happen_code" ], {"type" : "keyword" })
340389 # no indexes; only the template
341- self .assertFalse (list (ThingHappened .each_index ()))
390+ self .assertFalse (list (ThingHappened .each_timeseries_index ()))
342391
343392 def test_check_djelme_setup (self ):
344393 with self .assertRaises (IndexTemplateNotFoundError ):
@@ -371,10 +420,10 @@ def setUp(self):
371420 Dummy8Event .record (timestamp = dt .datetime (1235 , 5 , 6 ), intensity = 111 )
372421 Dummy8Event .record (timestamp = dt .datetime (2345 , 6 , 9 ), intensity = 11 )
373422 Dummy8Event .record (timestamp = dt .datetime (2345 , 7 , 9 ), intensity = 13 )
374- Dummy8Event .refresh_all ()
423+ Dummy8Event .refresh_timeseries_indexes ()
375424
376425 def test_indexes (self ):
377- _index_names = {_name for _name , _ in Dummy8Event .each_index ()}
426+ _index_names = {_name for _name , _ in Dummy8Event .each_timeseries_index ()}
378427 self .assertEqual (
379428 _index_names ,
380429 {
@@ -414,3 +463,121 @@ def _assert_intens(hits, expected_intensities):
414463 Dummy8Event .search_timeseries_range ((1234 , 6 ), dt .date (2345 , 7 , 1 )),
415464 {7 , 111 , 11 },
416465 )
466+ _assert_intens (
467+ Dummy8Event .search_timeseries_range ((1234 , 5 , 6 , 2 ), (1234 , 5 , 7 )),
468+ {2 },
469+ )
470+
471+
472+ class TestMonthlyIndexes (RealElasticTestCase , autosetup_djelme_backends = True ):
473+ def setUp (self ):
474+ super ().setUp ()
475+ Monthly8Event .record (timestamp = dt .datetime (1234 , 5 , 6 ), intenzity = 1 )
476+ Monthly8Event .record (timestamp = dt .datetime (1234 , 5 , 6 , 7 ), intenzity = 2 )
477+ Monthly8Event .record (timestamp = dt .datetime (1234 , 5 , 7 ), intenzity = 3 )
478+ Monthly8Event .record (timestamp = dt .datetime (1234 , 6 , 1 ), intenzity = 7 )
479+ Monthly8Event .record (timestamp = dt .datetime (1235 , 5 , 6 ), intenzity = 111 )
480+ Monthly8Event .record (timestamp = dt .datetime (2345 , 6 , 9 ), intenzity = 11 )
481+ Monthly8Event .record (timestamp = dt .datetime (2345 , 7 , 9 ), intenzity = 13 )
482+ Monthly8Event .refresh_timeseries_indexes ()
483+
484+ def test_indexes (self ):
485+ _index_names = {_name for _name , _ in Monthly8Event .each_timeseries_index ()}
486+ self .assertEqual (
487+ _index_names ,
488+ {
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_" ,
494+ },
495+ )
496+
497+ def test_search (self ):
498+ def _assert_intenz (hits , expected_intenzities ):
499+ _actual = {_hit .intenzity for _hit in hits }
500+ self .assertEqual (_actual , expected_intenzities )
501+
502+ _assert_intenz (
503+ Monthly8Event .search (),
504+ {1 , 2 , 3 , 7 , 11 , 13 , 111 },
505+ )
506+ _assert_intenz (
507+ Monthly8Event .search_timeseries_range ((1234 ,), (1235 ,)),
508+ {1 , 2 , 3 , 7 },
509+ )
510+ _assert_intenz (
511+ Monthly8Event .search_timeseries_range ((1233 ,), (1234 ,)),
512+ set (),
513+ )
514+ _assert_intenz (
515+ Monthly8Event .search_timeseries_range (
516+ dt .date (1234 , 5 , 6 ), dt .date (1234 , 5 , 7 )
517+ ),
518+ {1 , 2 },
519+ )
520+ _assert_intenz (
521+ Monthly8Event .search_timeseries_range ((1234 , 6 ), dt .date (2345 , 7 , 1 )),
522+ {7 , 111 , 11 },
523+ )
524+ _assert_intenz (
525+ Monthly8Event .search_timeseries_range ((1234 , 5 , 6 , 2 ), (1234 , 5 , 7 )),
526+ {2 },
527+ )
528+
529+
530+ class TestYearlyIndexes (RealElasticTestCase , autosetup_djelme_backends = True ):
531+ def setUp (self ):
532+ super ().setUp ()
533+ ThingHappened .record (timestamp = dt .datetime (1234 , 5 , 6 ), thing_id = "a" )
534+ ThingHappened .record (timestamp = dt .datetime (1234 , 5 , 6 , 7 ), thing_id = "b" )
535+ ThingHappened .record (timestamp = dt .datetime (1234 , 5 , 7 ), thing_id = "c" )
536+ ThingHappened .record (timestamp = dt .datetime (1234 , 6 , 1 ), thing_id = "d" )
537+ ThingHappened .record (timestamp = dt .datetime (1235 , 5 , 6 ), thing_id = "e" )
538+ ThingHappened .record (timestamp = dt .datetime (2345 , 6 , 9 ), thing_id = "f" )
539+ ThingHappened .record (timestamp = dt .datetime (2345 , 7 , 9 ), thing_id = "g" )
540+ ThingHappened .refresh_timeseries_indexes ()
541+
542+ def test_indexes (self ):
543+ _index_names = {_name for _name , _ in ThingHappened .each_timeseries_index ()}
544+ self .assertEqual (
545+ _index_names ,
546+ {
547+ "dummy8app_happen_1234_" ,
548+ "dummy8app_happen_1235_" ,
549+ "dummy8app_happen_2345_" ,
550+ },
551+ )
552+
553+ def test_search (self ):
554+ def _assert_things (hits , expected_thing_ids ):
555+ _actual = {_hit .thing_id for _hit in hits }
556+ self .assertEqual (_actual , expected_thing_ids )
557+
558+ _assert_things (
559+ ThingHappened .search (),
560+ {"a" , "b" , "c" , "d" , "e" , "f" , "g" },
561+ )
562+ _assert_things (
563+ ThingHappened .search_timeseries_range ((1234 ,), (1235 ,)),
564+ {"a" , "b" , "c" , "d" },
565+ )
566+ _assert_things (
567+ ThingHappened .search_timeseries_range ((1233 ,), (1234 ,)),
568+ set (),
569+ )
570+ _assert_things (
571+ ThingHappened .search_timeseries_range (
572+ dt .date (1234 , 5 , 6 ), dt .date (1234 , 5 , 7 )
573+ ),
574+ {"a" , "b" },
575+ )
576+ _assert_things (
577+ ThingHappened .search_timeseries_range ((1234 , 6 ), dt .date (2345 , 7 , 1 )),
578+ {"d" , "e" , "f" },
579+ )
580+ _assert_things (
581+ ThingHappened .search_timeseries_range ((1234 , 5 , 6 , 2 ), (1234 , 5 , 7 )),
582+ {"b" },
583+ )
0 commit comments