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

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 

11 

12# pylint: disable=missing-docstring,too-many-arguments,broad-exception-caught 

13 

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') 

27 

28 @property 

29 def suffix(self): # Remapping this to send no suffix for data_streams 

30 return '' 

31 

32 @property 

33 def indexlist(self) -> t.Sequence[str]: 

34 return [x.name for x in self.index_trackers] 

35 

36 def add(self, value): 

37 es_api.create_data_stream(self.client, value) 

38 self.track_data_stream() 

39 

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] 

43 

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) 

50 

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 

68 

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) 

73 

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)