mirror of
https://github.com/tuna/tunasync.git
synced 2025-06-16 15:12:43 +00:00
status command for tunasynctl
This commit is contained in:
parent
199ca93e66
commit
67d6757e6a
@ -3,6 +3,7 @@
|
|||||||
import socket
|
import socket
|
||||||
import os
|
import os
|
||||||
import json
|
import json
|
||||||
|
import struct
|
||||||
|
|
||||||
|
|
||||||
class ControlServer(object):
|
class ControlServer(object):
|
||||||
@ -16,9 +17,9 @@ class ControlServer(object):
|
|||||||
except OSError:
|
except OSError:
|
||||||
if os.path.exists(self.address):
|
if os.path.exists(self.address):
|
||||||
raise Exception("file exists: {}".format(self.address))
|
raise Exception("file exists: {}".format(self.address))
|
||||||
|
|
||||||
self.sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
|
self.sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
|
||||||
self.sock.bind(self.address)
|
self.sock.bind(self.address)
|
||||||
|
os.chmod(address, 0700)
|
||||||
|
|
||||||
print("Control Server listening on: {}".format(self.address))
|
print("Control Server listening on: {}".format(self.address))
|
||||||
self.sock.listen(1)
|
self.sock.listen(1)
|
||||||
@ -28,7 +29,7 @@ class ControlServer(object):
|
|||||||
conn, _ = self.sock.accept()
|
conn, _ = self.sock.accept()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
length = ord(conn.recv(1))
|
length = struct.unpack('!H', conn.recv(2))[0]
|
||||||
content = conn.recv(length)
|
content = conn.recv(length)
|
||||||
cmd = json.loads(content)
|
cmd = json.loads(content)
|
||||||
self.mgr_chan.put(("CMD", (cmd['cmd'], cmd['target'])))
|
self.mgr_chan.put(("CMD", (cmd['cmd'], cmd['target'])))
|
||||||
@ -38,7 +39,8 @@ class ControlServer(object):
|
|||||||
else:
|
else:
|
||||||
res = self.cld_chan.get()
|
res = self.cld_chan.get()
|
||||||
|
|
||||||
conn.sendall(chr(len(res)) + res)
|
conn.sendall(struct.pack('!H', len(res)))
|
||||||
|
conn.sendall(res)
|
||||||
conn.close()
|
conn.close()
|
||||||
|
|
||||||
|
|
||||||
|
@ -49,13 +49,48 @@ class StatusManager(object):
|
|||||||
}
|
}
|
||||||
|
|
||||||
with open(self.dbfile, 'wb') as f:
|
with open(self.dbfile, 'wb') as f:
|
||||||
|
_mirrors = self.list_status()
|
||||||
|
print("Updated status file, {}:{}".format(name, status))
|
||||||
|
json.dump(_mirrors, f)
|
||||||
|
|
||||||
|
def list_status(self, _format=False):
|
||||||
_mirrors = sorted(
|
_mirrors = sorted(
|
||||||
[m for _, m in self.mirrors.items()],
|
[m for _, m in self.mirrors.items()],
|
||||||
key=lambda x: x['name']
|
key=lambda x: x['name']
|
||||||
)
|
)
|
||||||
|
if not _format:
|
||||||
|
return _mirrors
|
||||||
|
|
||||||
print("Updated status file, {}:{}".format(name, status))
|
name_len = max([len(_m['name']) for _m in _mirrors])
|
||||||
json.dump(_mirrors, f)
|
update_len = max([len(_m['last_update']) for _m in _mirrors])
|
||||||
|
status_len = max([len(_m['status']) for _m in _mirrors])
|
||||||
|
heading = ' '.join([
|
||||||
|
'name'.ljust(name_len),
|
||||||
|
'last update'.ljust(update_len),
|
||||||
|
'status'.ljust(status_len)
|
||||||
|
])
|
||||||
|
line = ' '.join(['-'*name_len, '-'*update_len, '-'*status_len])
|
||||||
|
tabular = '\n'.join(
|
||||||
|
[
|
||||||
|
' '.join(
|
||||||
|
(_m['name'].ljust(name_len),
|
||||||
|
_m['last_update'].ljust(update_len),
|
||||||
|
_m['status'].ljust(status_len))
|
||||||
|
) for _m in _mirrors
|
||||||
|
]
|
||||||
|
)
|
||||||
|
return '\n'.join((heading, line, tabular))
|
||||||
|
|
||||||
|
def get_status(self, name, _format=False):
|
||||||
|
if name not in self.mirrors:
|
||||||
|
return None
|
||||||
|
|
||||||
|
mir = self.mirrors[name]
|
||||||
|
if not _format:
|
||||||
|
return mir
|
||||||
|
|
||||||
|
tmpl = "{name} last_update: {last_update} status: {status}"
|
||||||
|
return tmpl.format(**mir)
|
||||||
|
|
||||||
|
|
||||||
# vim: ts=4 sw=4 sts=4 expandtab
|
# vim: ts=4 sw=4 sts=4 expandtab
|
||||||
|
@ -190,7 +190,7 @@ class TUNASync(object):
|
|||||||
|
|
||||||
elif msg_hdr == "CMD":
|
elif msg_hdr == "CMD":
|
||||||
cmd, name = msg_body
|
cmd, name = msg_body
|
||||||
if name not in self.mirrors:
|
if (name not in self.mirrors) and (name != "__ALL__"):
|
||||||
self.ctrl_channel.put("Invalid target")
|
self.ctrl_channel.put("Invalid target")
|
||||||
continue
|
continue
|
||||||
|
|
||||||
@ -218,6 +218,11 @@ class TUNASync(object):
|
|||||||
|
|
||||||
self.run_provider(name)
|
self.run_provider(name)
|
||||||
res = "Started Job: {}".format(name)
|
res = "Started Job: {}".format(name)
|
||||||
|
elif cmd == "status":
|
||||||
|
if name == "__ALL__":
|
||||||
|
res = self.status_manager.list_status(_format=True)
|
||||||
|
else:
|
||||||
|
res = self.status_manager.get_status(name, _format=True)
|
||||||
else:
|
else:
|
||||||
res = "Invalid command"
|
res = "Invalid command"
|
||||||
|
|
||||||
|
@ -4,13 +4,14 @@ import sys
|
|||||||
import socket
|
import socket
|
||||||
import argparse
|
import argparse
|
||||||
import json
|
import json
|
||||||
|
import struct
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
parser = argparse.ArgumentParser(prog="tunasynctl")
|
parser = argparse.ArgumentParser(prog="tunasynctl")
|
||||||
parser.add_argument("-s", "--socket",
|
parser.add_argument("-s", "--socket",
|
||||||
default="/var/run/tunasync.sock", help="socket file")
|
default="/var/run/tunasync.sock", help="socket file")
|
||||||
parser.add_argument("command", help="command")
|
parser.add_argument("command", help="command")
|
||||||
parser.add_argument("target", help="target")
|
parser.add_argument("target", nargs="?", default="__ALL__", help="target")
|
||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
@ -28,8 +29,8 @@ if __name__ == "__main__":
|
|||||||
})
|
})
|
||||||
|
|
||||||
try:
|
try:
|
||||||
sock.sendall(chr(len(pack)) + pack)
|
sock.sendall(struct.pack('!H', len(pack)) + pack)
|
||||||
length = ord(sock.recv(1))
|
length = struct.unpack('!H', sock.recv(2))[0]
|
||||||
print(sock.recv(length))
|
print(sock.recv(length))
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user