You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
calculate-utils-3-core/pym/core/variables/backup.py.bak

168 lines
5.0 KiB

# -*- coding: utf-8 -*-
# Copyright 2016 Mir Calculate. http://www.calculate-linux.org
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0 #
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import sys
from os import path
from calculate.lib.datavars import (Variable, ReadonlyVariable)
from calculate.lib.utils.files import get_free_dirname, listDirectory
from calculate.lib.cl_lang import setLocalTranslate
import datetime
from action import Actions
_ = lambda x: x
setLocalTranslate('cl_core3', sys.modules[__name__])
class VariableClBackupPath(Variable):
"""
Путь до каталога, где будет подготавливаться backup
"""
preferred_dn = '/var/calculate/tmp/backup_prepare'
def get(self):
return get_free_dirname(self.preferred_dn)
class VariableClBackupContentsName(Variable):
"""
Названия файла CONTENTS в архиве
"""
value_format = "CONTENTS"
class VariableClBackupRootName(Variable):
"""
Названия каталога, куда сохраняются конфигурационные файлы
"""
value_format = "root"
class VariableClBackupFileContents(ReadonlyVariable):
"""
CONTENTS в архиве настроек
"""
value_format = "{cl_backup_path}/{cl_backup_contents_name}"
class VariableClBackupIniEnv(Variable):
"""
Названия файла CONTENTS в архиве [install] init =
"""
value_format = "{cl_backup_path}/ini.env"
class VariableClBackupBasePath(Variable):
"""
Директория в которой будет создан архив
"""
value = "/var/calculate/backup"
class VariableClBackupTime(ReadonlyVariable):
"""
Переменная содержащая информацию: время создания backup
"""
def init(self):
self.label = _("Backup created")
def get(self):
backup_fn = self.Get('cl_backup_file')
if backup_fn and path.exists(backup_fn):
try:
dt = datetime.datetime.strptime(
path.basename(backup_fn).rpartition("-")[2],
"%Y%m%d%H%M%S.tar.bz2")
return dt.strftime("%s")
except ValueError:
pass
return ""
def humanReadable(self):
ts = self.Get()
if ts:
ret = []
backup_tm = datetime.datetime.fromtimestamp(int(ts))
now_tm = datetime.datetime.now()
backup_diff = now_tm - backup_tm
if backup_diff.days:
ret.append(_("%d days") % backup_diff.days)
minute = 60
hour = 60 * minute
times = backup_diff.seconds
if times >= hour:
ret.append(_("%d hours") % (times / hour))
times %= hour
if times >= minute:
ret.append(_("%d minutes") % (times / minute))
times %= minute
if times:
ret.append(_("%d seconds") % times)
return _("%s ago") % (" ".join(ret))
return _("Unknown")
class VariableClBackupFile(Variable):
"""
Путь до создаваемое архива резервной копии
"""
def init(self):
self.label = _("Backup file")
def get_backup(self):
"""
Получить путь для подготовки архива настроек
:return:
"""
dn = self.Get('cl_backup_base_path')
dt = datetime.datetime.now().strftime(
"calculate-backup-%Y%m%d%H%M%S.tar.bz2")
return path.join(dn, dt)
def get_restore(self):
"""
Получить путь для распаковки архива настроек
:return:
"""
dn = self.Get('cl_backup_base_path')
for fn in sorted((x for x in listDirectory(dn, fullPath=True)
if x.endswith(".tar.bz2")),
reverse=True):
# получить самый свежий файл
return fn
return ""
def get(self):
action = self.Get('cl_action')
if action == Actions.Backup:
return self.get_backup()
elif action == Actions.BackupRestore:
return self.get_restore()
class VariableClBackupVerboseSet(Variable):
"""
Verbose output for backup
"""
type = "bool"
opt = ["-v", "--verbose"]
value = "off"
def init(self):
self.help = _("verbose output")
self.label = _("Verbose output")