Coverage for /Users/buh/.pyenv/versions/3.12.2/envs/es-testbed/lib/python3.12/site-packages/es_testbed/classes/entitymgrs/data_streammgr.py: 96%
55 statements
« prev ^ index » next coverage.py v7.4.4, created at 2024-04-27 20:59 -0600
« prev ^ index » next coverage.py v7.4.4, created at 2024-04-27 20:59 -0600
1"""data_stream Entity Manager Class"""
3import typing as t
4from es_testbed.helpers import es_api
5from es_testbed.helpers.utils import getlogger
6from .indexmgr import IndexMgr
7from .snapshotmgr import SnapshotMgr
8from ..entities import DataStream, Index
10if t.TYPE_CHECKING: 10 ↛ 11line 10 didn't jump to line 11, because the condition on line 10 was never true
11 from elasticsearch8 import Elasticsearch
12 from dotmap import DotMap
14# pylint: disable=missing-docstring,too-many-arguments,broad-exception-caught
17class DataStreamMgr(IndexMgr):
18 kind = 'data_stream'
19 listname = 'data_stream'
21 def __init__(
22 self,
23 client: t.Union['Elasticsearch', None] = None,
24 plan: t.Union['DotMap', None] = None,
25 autobuild: t.Optional[bool] = True,
26 snapmgr: t.Union[SnapshotMgr, None] = None,
27 ):
28 self.ds = None
29 self.index_trackers = []
30 super().__init__(client=client, plan=plan, autobuild=autobuild, snapmgr=snapmgr)
31 self.logger = getlogger('es_testbed.DataStreamMgr')
33 @property
34 def suffix(self):
35 """Return nothing, as there is no index count suffix to a data_stream name"""
36 return ''
38 @property
39 def indexlist(self) -> t.Sequence[str]:
40 """Get the current list of indices in the data_stream"""
41 return [x.name for x in self.index_trackers]
43 def add(self, value):
44 """Create a data stream and track it"""
45 es_api.create_data_stream(self.client, value)
46 self.track_data_stream()
48 def searchable(self):
49 """If the indices were marked as searchable snapshots, we do that now"""
50 for idx, scheme in enumerate(self.plan.entities):
51 self.index_trackers[idx].mount_ss(scheme)
52 self.logger.info('Completed backing index promotion to searchable snapshots.')
53 self.logger.info('data_stream backing indices: %s', self.ds.backing_indices)
55 def setup(self) -> None:
56 """Setup the entity manager"""
57 self.index_trackers = [] # Inheritance oddity requires redeclaration here
58 for scheme in self.plan.entities:
59 if not self.entity_list:
60 self.add(self.name)
61 else:
62 self.ds.rollover()
63 self.filler(scheme)
64 self.logger.debug('Created data_stream: %s', self.ds.name)
65 self.logger.debug(
66 'Created data_stream backing indices: %s', self.ds.backing_indices
67 )
68 for index in self.ds.backing_indices:
69 self.track_index(index)
70 self.ds.verify(self.indexlist)
71 self.searchable()
72 self.ds.verify(self.indexlist)
73 self.logger.info('Successfully completed data_stream buildout.')
74 self.success = True
76 def track_data_stream(self) -> None:
77 """Add a DataStream entity and append it to entity_list"""
78 self.logger.debug('Tracking data_stream: %s', self.name)
79 self.ds = DataStream(client=self.client, name=self.name)
80 self.appender(self.name)
82 def track_index(self, name: str) -> None:
83 """Add an Index entity and append it to index_trackers"""
84 self.logger.debug('Tracking index: %s', name)
85 entity = Index(
86 client=self.client,
87 name=name,
88 snapmgr=self.snapmgr,
89 policy_name=self.policy_name,
90 )
91 self.index_trackers.append(entity)