tunasync.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. #!/usr/bin/env python2
  2. # -*- coding:utf-8 -*-
  3. import os
  4. import argparse
  5. import json
  6. from datetime import datetime
  7. from tunasync import TUNASync
  8. from tunasync.hook import JobHook
  9. class IndexPageHook(JobHook):
  10. def __init__(self, parent, dbfile):
  11. self.parent = parent
  12. self.dbfile = dbfile
  13. self.mirrors = {}
  14. try:
  15. with open(self.dbfile) as f:
  16. _mirrors = json.load(f)
  17. for m in _mirrors:
  18. self.mirrors[m["name"]] = m
  19. except:
  20. for name, _ in self.parent.mirrors.iteritems():
  21. self.mirrors[name] = {
  22. 'name': name,
  23. 'last_update': '-',
  24. 'status': 'unknown',
  25. }
  26. def before_job(self, *args, **kwargs):
  27. pass
  28. def after_job(self, name='unknown', status="unknown", *args, **kwargs):
  29. print("Updating tunasync.json")
  30. now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
  31. self.mirrors[name] = {
  32. 'name': name,
  33. 'last_update': now,
  34. 'status': status
  35. }
  36. with open(self.dbfile, 'wb') as f:
  37. _mirrors = sorted(
  38. [m for _, m in self.mirrors.items()],
  39. key=lambda x: x['name']
  40. )
  41. json.dump(_mirrors, f)
  42. if __name__ == "__main__":
  43. here = os.path.abspath(os.path.dirname(__file__))
  44. parser = argparse.ArgumentParser(prog="tunasync")
  45. parser.add_argument("-c", "--config",
  46. default="tunasync.ini", help="config file")
  47. parser.add_argument("--dbfile",
  48. default="tunasync.json",
  49. help="mirror status db file")
  50. parser.add_argument("--pidfile", default="/var/run/tunasync.pid",
  51. help="pidfile")
  52. args = parser.parse_args()
  53. with open(args.pidfile, 'w') as f:
  54. f.write("{}".format(os.getpid()))
  55. tunaSync = TUNASync()
  56. tunaSync.read_config(args.config)
  57. index_hook = IndexPageHook(tunaSync, args.dbfile)
  58. tunaSync.add_hook(index_hook)
  59. tunaSync.run_jobs()
  60. # vim: ts=4 sw=4 sts=4 expandtab