mirror of
https://github.com/tuna/tunasync.git
synced 2025-06-15 14:12:47 +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)
|
sys.exit(0)
|
||||||
|
|
||||||
signal.signal(signal.SIGTERM, before_quit)
|
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)
|
max_retry = settings.get("max_retry", 1)
|
||||||
while 1:
|
while 1:
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
#!/usr/bin/env python2
|
#!/usr/bin/env python2
|
||||||
# -*- coding:utf-8 -*-
|
# -*- coding:utf-8 -*-
|
||||||
import os
|
import os
|
||||||
|
from datetime import datetime
|
||||||
from .mirror_provider import RsyncProvider, ShellProvider
|
from .mirror_provider import RsyncProvider, ShellProvider
|
||||||
from .btrfs_snapshot import BtrfsHook
|
from .btrfs_snapshot import BtrfsHook
|
||||||
from .loglimit import LogLimitHook
|
from .loglimit import LogLimitHook
|
||||||
@ -83,6 +84,16 @@ class MirrorConfig(object):
|
|||||||
hooks=hooks
|
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
|
return provider
|
||||||
|
|
||||||
def compare(self, other):
|
def compare(self, other):
|
||||||
|
@ -19,6 +19,7 @@ class MirrorProvider(object):
|
|||||||
self.interval = interval
|
self.interval = interval
|
||||||
self.hooks = hooks
|
self.hooks = hooks
|
||||||
self.p = None
|
self.p = None
|
||||||
|
self.delay = 0
|
||||||
|
|
||||||
# deprecated
|
# deprecated
|
||||||
def ensure_log_dir(self):
|
def ensure_log_dir(self):
|
||||||
@ -35,6 +36,10 @@ class MirrorProvider(object):
|
|||||||
ctx['log_file'] = log_file
|
ctx['log_file'] = log_file
|
||||||
return log_file
|
return log_file
|
||||||
|
|
||||||
|
def set_delay(self, sec):
|
||||||
|
''' Set start delay '''
|
||||||
|
self.delay = sec
|
||||||
|
|
||||||
def run(self, ctx={}):
|
def run(self, ctx={}):
|
||||||
raise NotImplementedError("run method should be implemented")
|
raise NotImplementedError("run method should be implemented")
|
||||||
|
|
||||||
|
@ -27,6 +27,19 @@ class StatusManager(object):
|
|||||||
}
|
}
|
||||||
self.mirrors = mirrors
|
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):
|
def update_status(self, name, status):
|
||||||
|
|
||||||
_m = self.mirrors.get(name, {
|
_m = self.mirrors.get(name, {
|
||||||
@ -42,16 +55,14 @@ class StatusManager(object):
|
|||||||
else:
|
else:
|
||||||
print("Invalid status: {}, from {}".format(status, name))
|
print("Invalid status: {}, from {}".format(status, name))
|
||||||
|
|
||||||
self.mirrors[name] = {
|
_m['last_update'] = update_time
|
||||||
'name': name,
|
_m['status'] = status
|
||||||
'last_update': update_time,
|
self.mirrors[name] = dict(_m.items())
|
||||||
'status': status,
|
|
||||||
}
|
|
||||||
|
|
||||||
with open(self.dbfile, 'wb') as f:
|
with open(self.dbfile, 'wb') as f:
|
||||||
_mirrors = self.list_status()
|
_mirrors = self.list_status()
|
||||||
print("Updated status file, {}:{}".format(name, 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):
|
def list_status(self, _format=False):
|
||||||
_mirrors = sorted(
|
_mirrors = sorted(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user