Coverage for /Users/buh/.pyenv/versions/3.12.2/envs/es-testbed/lib/python3.12/site-packages/es_testbed/classes/entitymgrs/snapshotmgr.py: 90%

35 statements  

« prev     ^ index     » next       coverage.py v7.4.4, created at 2024-04-25 19:21 -0600

1"""Snapshot Entity Manager Class""" 

2import typing as t 

3from dotmap import DotMap 

4from elasticsearch8 import Elasticsearch 

5from es_testbed.helpers import es_api 

6from es_testbed.helpers.utils import getlogger 

7from .entitymgr import EntityMgr 

8 

9# pylint: disable=missing-docstring 

10 

11class SnapshotMgr(EntityMgr): 

12 kind = 'snapshot' 

13 listname = 'snapshots' 

14 def __init__( 

15 self, 

16 client: Elasticsearch = None, 

17 plan: DotMap = None, 

18 autobuild: t.Optional[bool] = False, 

19 ): 

20 super().__init__(client=client, plan=plan, autobuild=autobuild) 

21 self.logger = getlogger('es_testbed.SnapshotMgr') 

22 

23 def add(self, index: str, tier: str) -> None: 

24 msg = f'Creating snapshot of index {index} and mounting in the {tier} tier...' 

25 self.logger.info(msg) 

26 es_api.do_snap( 

27 self.client, 

28 self.plan.repository, 

29 self.name, 

30 index, 

31 tier=tier 

32 ) 

33 self.appender(self.name) 

34 self.logger.info('Successfully created snapshot "%s"', self.last) 

35 self.success = True 

36 

37 def add_existing(self, name: str) -> None: 

38 """Add a snapshot that's already been created, e.g. by ILM promotion""" 

39 self.logger.info('Adding snapshot %s to list...', name) 

40 self.appender(name) 

41 self.success = True 

42 

43 def setup(self): 

44 pass 

45 

46 def teardown(self): # We override the parent method here to speed things up. 

47 if self.entity_list: 

48 if not self.success: 48 ↛ 49line 48 didn't jump to line 49

49 msg = ( 

50 f'Setup did not complete successfully. ' 

51 f'Manual cleanup of {self.kind}s may be necessary.' 

52 ) 

53 self.logger.warning(msg) 

54 self.logger.info('Cleaning up any existing snapshots...') 

55 es_api.delete( 

56 self.client, self.kind, ','.join(self.entity_list), repository=self.plan.repository) 

57 self.logger.info('Cleanup of snapshots completed.') 

58 self.entity_list = [] 

59 self.failsafe = []