mirror of
https://github.com/tuna/tunasync.git
synced 2025-04-21 04:42:46 +00:00
delay starting, based on from status file
This commit is contained in:
parent
eecd8628cc
commit
c4c6d44987
@ -19,6 +19,14 @@ def run_job(sema, child_q, manager_q, provider, **settings):
|
||||
sys.exit(0)
|
||||
|
||||
signal.signal(signal.SIGTERM, before_quit)
|
||||
if provider.delay > 0:
|
||||
try:
|
||||
msg = child_q.get(timeout=provider.delay)
|
||||
if msg == "terminate":
|
||||
manager_q.put(("CONFIG_ACK", (provider.name, "QUIT")))
|
||||
return
|
||||
except Queue.Empty:
|
||||
pass
|
||||
|
||||
max_retry = settings.get("max_retry", 1)
|
||||
while 1:
|
||||
|
@ -1,6 +1,7 @@
|
||||
#!/usr/bin/env python2
|
||||
# -*- coding:utf-8 -*-
|
||||
import os
|
||||
from datetime import datetime
|
||||
from .mirror_provider import RsyncProvider, ShellProvider
|
||||
from .btrfs_snapshot import BtrfsHook
|
||||
from .loglimit import LogLimitHook
|
||||
@ -83,6 +84,16 @@ class MirrorConfig(object):
|
||||
hooks=hooks
|
||||
)
|
||||
|
||||
sm = self._parent.status_manager
|
||||
last_update = sm.get_info(self.name, 'last_update')
|
||||
if last_update not in (None, '-'):
|
||||
last_update = datetime.strptime(last_update, '%Y-%m-%d %H:%M:%S')
|
||||
delay = int(last_update.strftime("%s")) \
|
||||
+ self.interval * 60 - int(datetime.now().strftime("%s"))
|
||||
if delay < 0:
|
||||
delay = 0
|
||||
provider.set_delay(delay)
|
||||
|
||||
return provider
|
||||
|
||||
def compare(self, other):
|
||||
|
@ -19,6 +19,7 @@ class MirrorProvider(object):
|
||||
self.interval = interval
|
||||
self.hooks = hooks
|
||||
self.p = None
|
||||
self.delay = 0
|
||||
|
||||
# deprecated
|
||||
def ensure_log_dir(self):
|
||||
@ -35,6 +36,10 @@ class MirrorProvider(object):
|
||||
ctx['log_file'] = log_file
|
||||
return log_file
|
||||
|
||||
def set_delay(self, sec):
|
||||
''' Set start delay '''
|
||||
self.delay = sec
|
||||
|
||||
def run(self, ctx={}):
|
||||
raise NotImplementedError("run method should be implemented")
|
||||
|
||||
|
@ -27,6 +27,19 @@ class StatusManager(object):
|
||||
}
|
||||
self.mirrors = mirrors
|
||||
|
||||
def get_info(self, name, key):
|
||||
_m = self.mirrors.get(name, {})
|
||||
return _m.get(key, None)
|
||||
|
||||
def update_info(self, name, key, value):
|
||||
_m = self.mirrors.get(name, {
|
||||
'name': name,
|
||||
'last_update': '-',
|
||||
'status': '-',
|
||||
})
|
||||
_m[key] = value
|
||||
self.mirrors[name] = dict(_m.items())
|
||||
|
||||
def update_status(self, name, status):
|
||||
|
||||
_m = self.mirrors.get(name, {
|
||||
@ -42,16 +55,14 @@ class StatusManager(object):
|
||||
else:
|
||||
print("Invalid status: {}, from {}".format(status, name))
|
||||
|
||||
self.mirrors[name] = {
|
||||
'name': name,
|
||||
'last_update': update_time,
|
||||
'status': status,
|
||||
}
|
||||
_m['last_update'] = update_time
|
||||
_m['status'] = status
|
||||
self.mirrors[name] = dict(_m.items())
|
||||
|
||||
with open(self.dbfile, 'wb') as f:
|
||||
_mirrors = self.list_status()
|
||||
print("Updated status file, {}:{}".format(name, status))
|
||||
json.dump(_mirrors, f)
|
||||
json.dump(_mirrors, f, indent=2, separators=(',', ':'))
|
||||
|
||||
def list_status(self, _format=False):
|
||||
_mirrors = sorted(
|
||||
|
Loading…
x
Reference in New Issue
Block a user