#!/usr/bin/env python3 # Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. # For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md import sys import time import sys import os.path import atexit import base64 from tqdm import tqdm from harness.harness import Harness from harness.interface.defs import status from harness.interface.error import TestError, Error from functools import partial def transfer_data(harness: Harness, logDir: str, fileName: str, rxID, fileSize, chunkSize): totalChunks = int(((fileSize + chunkSize - 1) / chunkSize)) print(f'Transfering {fileName} to {logDir}:') with open(os.path.join(logDir, fileName), 'wb') as logFile: with tqdm(total=fileSize, unit='B', unit_scale=True) as pbar: for n in range(1, totalChunks + 1): body = {"rxID" : rxID, "chunkNo": n} ret = harness.endpoint_request("filesystem", "get", body) assert ret["status"] == status["OK"] pbar.update(chunkSize) data = ret["body"]["data"][0:-1] decodedData = base64.standard_b64decode(data) logFile.write(decodedData) def get_log_file(harness, logDir: str): logDir = os.path.abspath(logDir) fileName = "MuditaOS.log" body = {"fileName" : "/sys/user/" + fileName} ret = harness.endpoint_request("filesystem", "get", body) assert ret["status"] == status["OK"] assert ret["body"]["fileSize"] != 0 rxID = ret["body"]["rxID"] fileSize = ret["body"]["fileSize"] chunkSize = ret["body"]["chunkSize"] transfer_data(harness, logDir, fileName, rxID, fileSize, chunkSize) print("Log transfer complete") def set_passcode(harness: Harness, flag: bool): body = {"phoneLockCodeEnabled": flag} ret = harness.endpoint_request("developerMode", "put", body) assert ret["status"] == status["NoContent"] def main(): if len(sys.argv) == 1: print(f'Please pass log storage directory as the parameter: \'python {sys.argv[0]} \' ') raise TestError(Error.OTHER_ERROR) log_dir = str(sys.argv[1]) if (not os.path.exists(log_dir)): print(f'Log storage directory {log_dir} not found') raise TestError(Error.OTHER_ERROR) harness = Harness.from_detect() atexit.register(set_passcode, harness, True) set_passcode(harness, False) get_log_file(harness, log_dir) exit(0) if __name__ == "__main__": try: main() except TestError as err: print(err) exit(err.get_error_code())