tools.win_pg_dump_controller

Yohn Y. 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]