123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- #!/usr/bin/env python2
- # -*- coding:utf-8 -*-
- import os
- import argparse
- import json
- from datetime import datetime
- from tunasync import TUNASync
- from tunasync.hook import JobHook
- class IndexPageHook(JobHook):
- def __init__(self, parent, dbfile):
- self.parent = parent
- self.dbfile = dbfile
- @property
- def mirrors(self):
- mirrors = {}
- try:
- with open(self.dbfile) as f:
- _mirrors = json.load(f)
- for m in _mirrors:
- mirrors[m["name"]] = m
- except:
- for name, _ in self.parent.mirrors.iteritems():
- mirrors[name] = {
- 'name': name,
- 'last_update': '-',
- 'status': 'unknown',
- }
- return mirrors
- def before_job(self, name=None, *args, **kwargs):
- if name is None:
- return
- mirrors = self.mirrors
- _m = mirrors.get(name, {
- 'name': name,
- 'last_update': '-',
- 'status': '-',
- })
- mirrors[name] = {
- 'name': name,
- 'last_update': _m['last_update'],
- 'status': 'syncing'
- }
- with open(self.dbfile, 'wb') as f:
- _mirrors = sorted(
- [m for _, m in mirrors.items()],
- key=lambda x: x['name']
- )
- json.dump(_mirrors, f)
- def after_job(self, name=None, status="unknown", *args, **kwargs):
- if name is None:
- return
- print("Updating tunasync.json")
- now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
- mirrors = self.mirrors
- mirrors[name] = {
- 'name': name,
- 'last_update': now,
- 'status': status
- }
- with open(self.dbfile, 'wb') as f:
- _mirrors = sorted(
- [m for _, m in mirrors.items()],
- key=lambda x: x['name']
- )
- json.dump(_mirrors, f)
- if __name__ == "__main__":
- here = os.path.abspath(os.path.dirname(__file__))
- parser = argparse.ArgumentParser(prog="tunasync")
- parser.add_argument("-c", "--config",
- 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()
- with open(args.pidfile, 'w') as f:
- f.write("{}".format(os.getpid()))
- tunaSync = TUNASync()
- tunaSync.read_config(args.config)
- index_hook = IndexPageHook(tunaSync, args.dbfile)
- tunaSync.add_hook(index_hook)
- tunaSync.run_jobs()
- # vim: ts=4 sw=4 sts=4 expandtab
|