Coverage for /Users/buh/.pyenv/versions/3.12.2/envs/es-testbed/lib/python3.12/site-packages/es_testbed/mgrs/data_stream.py: 100%
54 statements
« prev ^ index » next coverage.py v7.4.4, created at 2024-05-02 18:19 -0600
« prev ^ index » next coverage.py v7.4.4, created at 2024-05-02 18:19 -0600
1"""data_stream Entity Manager Class"""
3import typing as t
4import logging
5from es_testbed.entities import DataStream, Index
6from es_testbed.helpers.es_api import create_data_stream
7from es_testbed.helpers.utils import prettystr
8from es_testbed.mgrs.index import IndexMgr
9from es_testbed.mgrs.snapshot import SnapshotMgr
11if t.TYPE_CHECKING:
12 from elasticsearch8 import Elasticsearch
13 from dotmap import DotMap
15logger = logging.getLogger(__name__)
18class DataStreamMgr(IndexMgr):
19 """data_stream Entity Manager Class"""
21 kind = 'data_stream'
22 listname = 'data_stream'
24 def __init__(
25 self,
26 client: t.Union['Elasticsearch', None] = None,
27 plan: t.Union['DotMap', None] = None,
28 snapmgr: t.Union[SnapshotMgr, None] = None,
29 ):
30 self.ds = None
31 self.index_trackers = []
32 super().__init__(client=client, plan=plan, snapmgr=snapmgr)
34 @property
35 def suffix(self):
36 """Return nothing, as there is no index count suffix to a data_stream name"""
37 return ''
39 @property
40 def indexlist(self) -> t.Sequence[str]:
41 """Get the current list of indices in the data_stream"""
42 return [x.name for x in self.index_trackers]
44 def add(self, value):
45 """Create a data stream and track it"""
46 create_data_stream(self.client, value)
47 self.track_data_stream()
49 def searchable(self):
50 """If the indices were marked as searchable snapshots, we do that now"""
51 for idx, scheme in enumerate(self.plan.entities):
52 self.index_trackers[idx].mount_ss(scheme)
53 logger.info('Completed backing index promotion to searchable snapshots.')
54 logger.info(
55 'data_stream backing indices: %s', prettystr(self.ds.backing_indices)
56 )
58 def setup(self) -> None:
59 """Setup the entity manager"""
60 self.index_trackers = [] # Inheritance oddity requires redeclaration here
61 for scheme in self.plan.entities:
62 if not self.entity_list:
63 self.add(self.name)
64 else:
65 self.ds.rollover()
66 self.filler(scheme)
67 logger.debug('Created data_stream: %s', self.ds.name)
68 logger.debug(
69 'Created data_stream backing indices: %s',
70 prettystr(self.ds.backing_indices),
71 )
72 for index in self.ds.backing_indices:
73 self.track_index(index)
74 self.ds.verify(self.indexlist)
75 self.searchable()
76 self.ds.verify(self.indexlist)
77 logger.info('Successfully completed data_stream buildout.')
79 def track_data_stream(self) -> None:
80 """Add a DataStream entity and append it to entity_list"""
81 logger.debug('Tracking data_stream: %s', self.name)
82 self.ds = DataStream(client=self.client, name=self.name)
83 self.appender(self.name)
85 def track_index(self, name: str) -> None:
86 """Add an Index entity and append it to index_trackers"""
87 logger.debug('Tracking index: "%s"', name)
88 entity = Index(
89 client=self.client,
90 name=name,
91 snapmgr=self.snapmgr,
92 policy_name=self.policy_name,
93 )
94 entity.track_ilm(name)
95 self.index_trackers.append(entity)