Coverage for /Users/buh/.pyenv/versions/3.12.2/envs/es-testbed/lib/python3.12/site-packages/es_testbed/mgrs/data_streammgr.py: 100%

54 statements  

« prev     ^ index     » next       coverage.py v7.4.4, created at 2024-05-02 11:57 -0600

1"""data_stream Entity Manager Class""" 

2 

3import typing as t 

4from .indexmgr import IndexMgr 

5from .snapshotmgr import SnapshotMgr 

6from ..entities import DataStream, Index 

7from ..helpers.es_api import create_data_stream 

8from ..helpers.utils import getlogger, prettystr 

9 

10if t.TYPE_CHECKING: 

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 snapmgr: t.Union[SnapshotMgr, None] = None, 

26 ): 

27 self.ds = None 

28 self.index_trackers = [] 

29 self.logger = getlogger('es_testbed.DataStreamMgr') 

30 super().__init__(client=client, plan=plan, snapmgr=snapmgr) 

31 

32 @property 

33 def suffix(self): 

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

35 return '' 

36 

37 @property 

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

39 """Get the current list of indices in the data_stream""" 

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

41 

42 def add(self, value): 

43 """Create a data stream and track it""" 

44 create_data_stream(self.client, value) 

45 self.track_data_stream() 

46 

47 def searchable(self): 

48 """If the indices were marked as searchable snapshots, we do that now""" 

49 for idx, scheme in enumerate(self.plan.entities): 

50 self.index_trackers[idx].mount_ss(scheme) 

51 self.logger.info('Completed backing index promotion to searchable snapshots.') 

52 self.logger.info( 

53 'data_stream backing indices: %s', prettystr(self.ds.backing_indices) 

54 ) 

55 

56 def setup(self) -> None: 

57 """Setup the entity manager""" 

58 self.index_trackers = [] # Inheritance oddity requires redeclaration here 

59 for scheme in self.plan.entities: 

60 if not self.entity_list: 

61 self.add(self.name) 

62 else: 

63 self.ds.rollover() 

64 self.filler(scheme) 

65 self.logger.debug('Created data_stream: %s', self.ds.name) 

66 self.logger.debug( 

67 'Created data_stream backing indices: %s', 

68 prettystr(self.ds.backing_indices), 

69 ) 

70 for index in self.ds.backing_indices: 

71 self.track_index(index) 

72 self.ds.verify(self.indexlist) 

73 self.searchable() 

74 self.ds.verify(self.indexlist) 

75 self.logger.info('Successfully completed data_stream buildout.') 

76 self.success = True 

77 

78 def track_data_stream(self) -> None: 

79 """Add a DataStream entity and append it to entity_list""" 

80 self.logger.debug('Tracking data_stream: %s', self.name) 

81 self.ds = DataStream(client=self.client, name=self.name) 

82 self.appender(self.name) 

83 

84 def track_index(self, name: str) -> None: 

85 """Add an Index entity and append it to index_trackers""" 

86 self.logger.debug('Tracking index: %s', name) 

87 entity = Index( 

88 client=self.client, 

89 name=name, 

90 snapmgr=self.snapmgr, 

91 policy_name=self.policy_name, 

92 ) 

93 entity.track_ilm(name) 

94 self.index_trackers.append(entity)