tunasynctl.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. #!/usr/bin/env python2
  2. # -*- coding:utf-8 -*-
  3. import sys
  4. import socket
  5. import argparse
  6. import json
  7. import struct
  8. if __name__ == "__main__":
  9. parser = argparse.ArgumentParser(prog="tunasynctl")
  10. parser.add_argument("-s", "--socket",
  11. default="/var/run/tunasync.sock", help="socket file")
  12. subparsers = parser.add_subparsers(dest="command", help='sub-command help')
  13. sp = subparsers.add_parser('start', help="start job")
  14. sp.add_argument("target", help="mirror job name")
  15. sp = subparsers.add_parser('stop', help="stop job")
  16. sp.add_argument("target", help="mirror job name")
  17. sp = subparsers.add_parser('restart', help="restart job")
  18. sp.add_argument("target", help="mirror job name")
  19. sp = subparsers.add_parser('status', help="show mirror status")
  20. sp.add_argument("target", nargs="?", default="__ALL__", help="mirror job name")
  21. sp = subparsers.add_parser('log', help="return log file path")
  22. sp.add_argument("-n", type=int, default=0, help="last n-th log, default 0 (latest)")
  23. sp.add_argument("target", help="mirror job name")
  24. sp = subparsers.add_parser('help', help="show help message")
  25. args = vars(parser.parse_args())
  26. if args['command'] == "help":
  27. parser.print_help()
  28. sys.exit(0)
  29. sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
  30. try:
  31. sock.connect(args.pop("socket"))
  32. except socket.error as msg:
  33. print(msg)
  34. sys.exit(1)
  35. pack = json.dumps({
  36. "cmd": args.pop("command"),
  37. "target": args.pop("target"),
  38. "kwargs": args,
  39. })
  40. try:
  41. sock.sendall(struct.pack('!H', len(pack)) + pack)
  42. length = struct.unpack('!H', sock.recv(2))[0]
  43. print(sock.recv(length))
  44. except Exception as e:
  45. print(e)
  46. finally:
  47. sock.close()
  48. # vim: ts=4 sw=4 sts=4 expandtab