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-03 15:56 -0600

1"""data_stream Entity Manager Class""" 

2 

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 

10 

11if t.TYPE_CHECKING: 

12 from elasticsearch8 import Elasticsearch 

13 from dotmap import DotMap 

14 

15logger = logging.getLogger(__name__) 

16 

17 

18class DataStreamMgr(IndexMgr): 

19 """data_stream Entity Manager Class""" 

20 

21 kind = 'data_stream' 

22 listname = 'data_stream' 

23 

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) 

33 

34 @property 

35 def suffix(self): 

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

37 return '' 

38 

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] 

43 

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

48 

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 ) 

57 

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

78 

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) 

84 

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)