Add new method DevInfo.download_syslog()

pull/3/head
remittor 3 years ago
parent 0e061d1b75
commit 6db1a85337

@ -6,6 +6,9 @@ import sys
import re
import types
import binascii
import tarfile
import io
import requests
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
import gateway
@ -44,6 +47,7 @@ class Version():
class DevInfo():
gw = None # Gateway()
verbose = 0
syslog = [] # list of FileObject()
dmesg = None # text
info = BaseInfo()
partlist = [] # list of {addr, size, name}
@ -599,6 +603,52 @@ class DevInfo():
print("")
return self.env.fw
def download_syslog(self, timeout = 4):
self.syslog = []
if self.gw is not None:
gw = self.gw
if gw.status < 1:
gw.detect_device()
else:
gw = gateway.Gateway(timeout = timeout)
if gw.status < 1:
die("Xiaomi Mi Wi-Fi device not found (IP: {})".format(gw.ip_addr))
stok = gw.web_login()
print("Start generating syslog...")
r2 = requests.get(gw.apiurl + "misystem/sys_log")
if r2.text.find('"code":0') < 0:
die("SysLog not generated!")
try:
path = re.search(r'"path":"(.*?)"', r2.text)
path = path.group(1).strip()
except Exception:
die("SysLog not generated! (2)")
#fn_local = 'syslog.tar.gz'
url = "http://" + path
print('Downloading SysLog from file "{}" ...'.format(url))
zip = b''
with requests.get(url, stream=True) as r3:
r3.raise_for_status()
for chunk in r3.iter_content(chunk_size=8192):
zip += chunk
file = io.BytesIO(zip)
tar = tarfile.open(fileobj = file, mode='r:gz')
for member in tar.getmembers():
if not member.isfile() or not member.name:
continue
if member.name.find('usr/log/') >= 0: # skip syslog files
continue
file = types.SimpleNamespace()
file.name = member.name
file.size = member.size
file.data = tar.extractfile(member).read()
self.syslog.append(file)
#print('name = "{}", size = {} ({})'.format(file.name, file.size, len(file.data)))
#if len(file.data) < 200:
# print(file.data)
tar.close()
return self.syslog
if __name__ == "__main__":
fn_dir = ''

Loading…
Cancel
Save