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

1"""data_stream Entity Manager Class""" 

2 

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 

9 

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 

13 

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

15 

16 

17class DataStreamMgr(IndexMgr): 

18 kind = 'data_stream' 

19 listname = 'data_stream' 

20 

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

32 

33 @property 

34 def suffix(self): 

35 """Return nothing, as there is no index count suffix to a data_stream name""" 

36 return '' 

37 

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] 

42 

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

47 

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) 

54 

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 

75 

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) 

81 

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)