implemented status file

This commit is contained in:
bigeagle 2014-10-20 16:26:37 +08:00
parent 0a0800fe63
commit 732f27ff8f
3 changed files with 62 additions and 4 deletions

View File

@ -3,7 +3,8 @@ tunasync
## TODO ## TODO
- [ ] status file - [x] status file
- [x] btrfs backend (create snapshot before syncing) - [x] btrfs backend (create snapshot before syncing)
- [x] add mirror job online - [x] add mirror job online
- [ ] use toml as configuration
- [ ] debmirror provider - [ ] debmirror provider

View File

@ -2,12 +2,65 @@
# -*- coding:utf-8 -*- # -*- coding:utf-8 -*-
import os import os
import argparse import argparse
import json
from datetime import datetime
from tunasync import TUNASync from tunasync import TUNASync
from tunasync.hook import JobHook
class IndexPageHook(JobHook):
def __init__(self, parent, dbfile):
self.parent = parent
self.dbfile = dbfile
self.mirrors = {}
try:
with open(self.dbfile) as f:
_mirrors = json.load(f)
for m in _mirrors:
self.mirrors[m["name"]] = m
except:
for name, _ in self.parent.mirrors.iteritems():
self.mirrors[name] = {
'name': name,
'last_update': '-',
'status': 'unknown',
}
def before_job(self, *args, **kwargs):
pass
def after_job(self, name='unknown', status="unknown", *args, **kwargs):
print("Updating tunasync.json")
now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
self.mirrors[name] = {
'name': name,
'last_update': now,
'status': status
}
with open(self.dbfile, 'wb') as f:
_mirrors = sorted(
[m for _, m in self.mirrors.items()],
key=lambda x: x['name']
)
json.dump(_mirrors, f)
if __name__ == "__main__": if __name__ == "__main__":
here = os.path.abspath(os.path.dirname(__file__))
parser = argparse.ArgumentParser(prog="tunasync") parser = argparse.ArgumentParser(prog="tunasync")
parser.add_argument("-c", "--config", default="tunasync.ini", help="config file") parser.add_argument("-c", "--config",
parser.add_argument("--pidfile", default="/var/run/tunasync.pid", help="pidfile") default="tunasync.ini", help="config file")
parser.add_argument("--dbfile",
default="tunasync.json",
help="mirror status db file")
parser.add_argument("--pidfile", default="/var/run/tunasync.pid",
help="pidfile")
args = parser.parse_args() args = parser.parse_args()
@ -17,6 +70,10 @@ if __name__ == "__main__":
tunaSync = TUNASync() tunaSync = TUNASync()
tunaSync.read_config(args.config) tunaSync.read_config(args.config)
index_hook = IndexPageHook(tunaSync, args.dbfile)
tunaSync.add_hook(index_hook)
tunaSync.run_jobs() tunaSync.run_jobs()
# vim: ts=4 sw=4 sts=4 expandtab # vim: ts=4 sw=4 sts=4 expandtab

View File

@ -40,7 +40,7 @@ def run_job(sema, child_q, manager_q, provider):
for hook in provider.hooks[::-1]: for hook in provider.hooks[::-1]:
try: try:
hook.after_job(status=status) hook.after_job(name=provider.name, status=status)
except Exception: except Exception:
import traceback import traceback
traceback.print_exc() traceback.print_exc()