Coverage for src/es_testbed/classes/entitymgrs/data_streammgr.py: 100%
54 statements
« prev ^ index » next coverage.py v7.5.0, created at 2024-04-23 15:01 -0600
« prev ^ index » next coverage.py v7.5.0, created at 2024-04-23 15:01 -0600
1"""data_stream Entity Manager Class"""
2import typing as t
3from elasticsearch8 import Elasticsearch
4from es_testbed.defaults import NAMEMAPPER
5from es_testbed.helpers import es_api
6from es_testbed.helpers.utils import getlogger
7from .indexmgr import IndexMgr
8from .snapshotmgr import SnapshotMgr
9from ..entities import DataStream, Index
10from ..testplan import TestPlan
12# pylint: disable=missing-docstring,too-many-arguments,broad-exception-caught
14class DataStreamMgr(IndexMgr):
15 def __init__(
16 self,
17 client: Elasticsearch = None,
18 plan: TestPlan = None,
19 autobuild: t.Optional[bool] = True,
20 snapmgr: SnapshotMgr = None,
21 policy_name: str = None,
22 ):
23 super().__init__(
24 client=client, plan=plan, autobuild=autobuild, snapmgr=snapmgr, policy_name=policy_name)
25 self.kind = 'data_stream'
26 self.logger = getlogger('es_testbed.DataStreamMgr')
28 @property
29 def suffix(self): # Remapping this to send no suffix for data_streams
30 return ''
32 @property
33 def indexlist(self) -> t.Sequence[str]:
34 return [x.name for x in self.index_trackers]
36 def add(self, value):
37 es_api.create_data_stream(self.client, value)
38 self.track_data_stream()
40 # Some weird inheritance here was not picking up self.kind properly, so I override here
41 def ident(self, dkey='data_stream'):
42 return NAMEMAPPER[dkey]
44 def searchable(self):
45 """If the indices were marked as searchable snapshots, we do that now"""
46 for idx, scheme in enumerate(self.plan.entities):
47 self.index_trackers[idx].mount_ss(scheme)
48 self.logger.info('Completed backing index promotion to searchable snapshots.')
49 self.logger.info('data_stream backing indices: %s', self.ds.backing_indices)
51 def setup(self) -> bool:
52 self.index_trackers = [] # Inheritance oddity requires redeclaration here
53 for scheme in self.plan.entities:
54 if not self.entity_list:
55 self.add(self.name)
56 else:
57 self.ds.rollover()
58 self.filler(scheme)
59 self.logger.debug('Created data_stream: %s', self.ds.name)
60 self.logger.debug('Created data_stream backing indices: %s', self.ds.backing_indices)
61 for index in self.ds.backing_indices:
62 self.track_index(index)
63 self.ds.verify(self.indexlist)
64 self.searchable()
65 self.ds.verify(self.indexlist)
66 self.logger.info('Successfully completed data_stream buildout.')
67 self.success = True
69 def track_data_stream(self) -> None:
70 self.logger.debug('Tracking data_stream: %s', self.name)
71 self.ds = DataStream(client=self.client, name=self.name)
72 self.entity_list.append(self.name)
74 def track_index(self, name: str) -> None:
75 self.logger.debug('Tracking index: %s', name)
76 entity = Index(
77 client=self.client,
78 name=name,
79 snapmgr=self.snapmgr,
80 policy_name=self.policy_name
81 )
82 self.index_trackers.append(entity)