tools.win_pg_dump_controller
2022-07-11
Parent:26558a3ee4f3
7:92c88f8fb6c9 tip Browse Files
.. import D6
win_pg_dump_controller/executor.py win_pg_dump_controller/store_controller.py
1.1 --- a/win_pg_dump_controller/executor.py Mon Jun 13 19:14:44 2022 +0300 1.2 +++ b/win_pg_dump_controller/executor.py Mon Jul 11 22:36:06 2022 +0300 1.3 @@ -50,10 +50,12 @@ 1.4 1.5 except: 1.6 stor.remove(backup_item) 1.7 + stor.status(False) 1.8 raise 1.9 1.10 else: 1.11 stor.add_item(backup_item) 1.12 + stor.status(True) 1.13 1.14 cleaned = stor.clean(config.teir1_days, config.tier2_store_days, config.teir2_copies_interval) 1.15
2.1 --- a/win_pg_dump_controller/store_controller.py Mon Jun 13 19:14:44 2022 +0300 2.2 +++ b/win_pg_dump_controller/store_controller.py Mon Jul 11 22:36:06 2022 +0300 2.3 @@ -2,9 +2,11 @@ 2.4 2.5 import json 2.6 from datetime import datetime 2.7 -from os.path import exists, join as p_join, basename 2.8 +from os.path import exists, join as p_join 2.9 from os import remove as file_remove 2.10 from typing import Dict, List 2.11 +from dataclasses import dataclass, asdict 2.12 +from os import stat as f_stat 2.13 2.14 from .error import Error 2.15 from .config import DBTask 2.16 @@ -74,10 +76,18 @@ 2.17 ) 2.18 2.19 2.20 +@dataclass() 2.21 +class TaskStatus(object): 2.22 + status: bool = False 2.23 + size: int = 0 2.24 + time: int = 0 2.25 + 2.26 + 2.27 class StoreController(StoreControllerBase): 2.28 def __init__(self, task: DBTask): 2.29 self.task = task 2.30 self.index_name = self.get_filename(f'{task.name}.index') 2.31 + self.status_name = self.get_filename(f'{task.name}.status') 2.32 self.idx: Dict[int, IndexItem] = {} 2.33 self.op_adv_status = [] 2.34 2.35 @@ -128,6 +138,18 @@ 2.36 if item.is_exists(): 2.37 file_remove(item.get_path()) 2.38 2.39 + def status(self, last_status: bool): 2.40 + res = TaskStatus(status=last_status) 2.41 + 2.42 + for i in self.idx.values(): 2.43 + if res.time < i.time: 2.44 + res.time = i.time 2.45 + 2.46 + res.size += f_stat(i.get_path()).st_size 2.47 + 2.48 + with open(self.status_name, 'w') as OUT: 2.49 + json.dump(asdict(res), OUT) 2.50 + 2.51 def __iter__(self): 2.52 for i in sorted(self.idx, reverse=True): 2.53 yield self.idx[i]