mirror of
https://github.com/tuna/tunasync.git
synced 2025-04-21 04:42:46 +00:00
status command for tunasynctl
This commit is contained in:
parent
199ca93e66
commit
67d6757e6a
@ -3,6 +3,7 @@
|
||||
import socket
|
||||
import os
|
||||
import json
|
||||
import struct
|
||||
|
||||
|
||||
class ControlServer(object):
|
||||
@ -16,9 +17,9 @@ class ControlServer(object):
|
||||
except OSError:
|
||||
if os.path.exists(self.address):
|
||||
raise Exception("file exists: {}".format(self.address))
|
||||
|
||||
self.sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
|
||||
self.sock.bind(self.address)
|
||||
os.chmod(address, 0700)
|
||||
|
||||
print("Control Server listening on: {}".format(self.address))
|
||||
self.sock.listen(1)
|
||||
@ -28,7 +29,7 @@ class ControlServer(object):
|
||||
conn, _ = self.sock.accept()
|
||||
|
||||
try:
|
||||
length = ord(conn.recv(1))
|
||||
length = struct.unpack('!H', conn.recv(2))[0]
|
||||
content = conn.recv(length)
|
||||
cmd = json.loads(content)
|
||||
self.mgr_chan.put(("CMD", (cmd['cmd'], cmd['target'])))
|
||||
@ -38,7 +39,8 @@ class ControlServer(object):
|
||||
else:
|
||||
res = self.cld_chan.get()
|
||||
|
||||
conn.sendall(chr(len(res)) + res)
|
||||
conn.sendall(struct.pack('!H', len(res)))
|
||||
conn.sendall(res)
|
||||
conn.close()
|
||||
|
||||
|
||||
|
@ -49,13 +49,48 @@ class StatusManager(object):
|
||||
}
|
||||
|
||||
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(
|
||||
[m for _, m in self.mirrors.items()],
|
||||
key=lambda x: x['name']
|
||||
)
|
||||
if not _format:
|
||||
return _mirrors
|
||||
|
||||
print("Updated status file, {}:{}".format(name, status))
|
||||
json.dump(_mirrors, f)
|
||||
name_len = max([len(_m['name']) for _m in _mirrors])
|
||||
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
|
||||
|
@ -190,7 +190,7 @@ class TUNASync(object):
|
||||
|
||||
elif msg_hdr == "CMD":
|
||||
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")
|
||||
continue
|
||||
|
||||
@ -218,6 +218,11 @@ class TUNASync(object):
|
||||
|
||||
self.run_provider(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:
|
||||
res = "Invalid command"
|
||||
|
||||
|
@ -4,13 +4,14 @@ import sys
|
||||
import socket
|
||||
import argparse
|
||||
import json
|
||||
import struct
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser(prog="tunasynctl")
|
||||
parser.add_argument("-s", "--socket",
|
||||
default="/var/run/tunasync.sock", help="socket file")
|
||||
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()
|
||||
|
||||
@ -28,8 +29,8 @@ if __name__ == "__main__":
|
||||
})
|
||||
|
||||
try:
|
||||
sock.sendall(chr(len(pack)) + pack)
|
||||
length = ord(sock.recv(1))
|
||||
sock.sendall(struct.pack('!H', len(pack)) + pack)
|
||||
length = struct.unpack('!H', sock.recv(2))[0]
|
||||
print(sock.recv(length))
|
||||
|
||||
except Exception as e:
|
||||
|
Loading…
x
Reference in New Issue
Block a user