def get(ctx: click.core.Context, filename: str, dir: str, to_usb: bool, convert: bool, merge: bool, debug: bool): """ 引数に指定したファイルを取得します。省略した場合は新たに取得します。 """ # for debug if debug: log.set_level(log.Level.DEBUG) p = __get_params(ctx) if to_usb: if convert or merge: log.w("USB出力時は--convert, --mergeオプションは無視されます.") p.remote_dist_dir = os.path.join(p.usb_dir, dir) else: p.local_dist_dir = os.path.join(os.getcwd(), dir) # execute command files = None ret = True try: if filename is None: files = remote.RemoteLogger(p).get_log(to_usb) else: files = remote.RemoteLogger(p).move_log(filename, to_usb) if convert and not to_usb and files is not None: cp = conv.ConvertParams() cp.script_path = p.convert_rule for f in files: cp.log_path = f ret, out_dir = conv.Converter(cp).exec() ret &= ret if merge and not (out_dir is None): ret &= mrg.Merge().exec(os.path.join(out_dir, p.merge_dir)) except IOError as e: ret = False click.echo(e.args) except Exception as e: ret = False click.echo(e.args) # finished if not files is None and ret: click.echo("正常に終了しました。") else: click.echo("失敗しました。")
def start(self): """ Executes all logging process. :return: Result of getting remote log. True: success | False: fail :rtype: bool """ # create log directory self.params.local_dist_dir = self.create_dir() # get console log self.start_script_cmd() # get remote log remote_logger = remote.RemoteLogger(self.params) ls = remote_logger.get_log() if ls is None: return False # convert log p = convert.ConvertParams() p.script_path = self.params.convert_rule p.log_path = os.path.join(self.params.local_dist_dir, remote_logger.filename) ret = convert.Converter(p).exec() return ret
def test_get_log__usb_not_exists(self): p = logger.params.LogParam() p.host_name = '[email protected]' p.shell = 'ssh' p.log_cmd = 'log_to_rom' p.log_extension = 'tar.gz' p.remote_log_dir = '/root' p.usb_dir = '/mnt/USB1' p.remote_dist_dir = p.usb_dir ret = remote.RemoteLogger(p).get_log(to_usb=True) self.assertIsNone(ret)
def test_get_log__usb(self): p = logger.params.LogParam() p.host_name = '[email protected]' p.shell = 'ssh' p.log_cmd = 'log_to_rom' p.log_extension = 'tar.gz' p.remote_log_dir = '/root' p.usb_dir = USB_DIR p.remote_dist_dir = p.usb_dir ret = remote.RemoteLogger(p).get_log(to_usb=True) df = os.path.join(MNT_USB, os.path.basename(ret[0])) self.assertTrue(os.path.exists(df))
def test_move_log__move_failed(self): p = logger.params.LogParam() p.read_ini() r = remote.RemoteLogger(p) r._RemoteLogger__connect = MagicMock() r._RemoteLogger__disconnect = MagicMock() r._RemoteLogger__get_file_list = MagicMock(return_value=[None, 'test']) r._RemoteLogger__send = MagicMock() filename = "testdata" ret = r.move_log(filename) self.assertEqual(ret, None)
def test_get_log__dir(self): p = logger.params.LogParam() p.host_name = '[email protected]' p.shell = 'ssh' p.log_cmd = 'log_to_rom' p.log_extension = 'tar.gz' p.remote_log_dir = '/root' p.remote_dist_dir = '/mnt/log' p.local_src_dir = '.' p.local_dist_dir = os.path.join(TestRemoteLogger.local_dist_dir, "000") ret = remote.RemoteLogger(p).get_log() self.assertTrue(os.path.exists(ret[0])) os.remove(ret[0])
def test_move_log__not_found(self): os.chdir("tests") p = logger.params.LogParam() p.read_ini() os.chdir("..") p.remote_log_dir = "/mnt/log" p.local_src_dir = os.getcwd() p.local_dist_dir = TestRemoteLogger.local_dist_dir remote.RemoteLogger.TIMEOUT_MOVE = 1 filename = "testdata" r = remote.RemoteLogger(p) ret = r.move_log(filename) self.assertEqual(ret, None)
def test_clear_log_with_buffer(self): files = ["5.tar.gz", "6.tar.gz"] for f in files: with open(f, "w") as fd: fd.write("") os.chdir("./tests") p = logger.params.LogParam() p.read_ini() p.remote_log_dir = "/mnt/log" remote.RemoteLogger(p).clear_log(buffer=True) os.chdir("..") for f in files: self.assertFalse(os.path.exists(f))
def test_move_log__usb_not_exists(self): os.chdir("tests") p = logger.params.LogParam() p.read_ini() os.chdir("..") p.remote_log_dir = "/mnt/log" p.usb_dir = '/mnt/USB1' p.remote_dist_dir = p.usb_dir # exec filename = "test_move_log__usb_not_exists" fd = open(filename, "w") fd.close() ret = remote.RemoteLogger(p).move_log(filename, to_usb=True) self.assertIsNone(ret)
def test_list_log(self): files = ["1.tar.gz", "2.tar.gz"] for f in files: with open(f, "w") as fd: fd.write("") os.chdir("./tests") p = logger.params.LogParam() p.read_ini() p.remote_log_dir = "/mnt/log" remote_logger = remote.RemoteLogger(p) ls = remote_logger.list_log() self.assertEqual(ls, files) os.chdir("..") for f in files: os.remove(f)
def test_move_log__usb_and_dir(self): os.chdir("tests") p = logger.params.LogParam() p.read_ini() os.chdir("..") p.remote_log_dir = "/mnt/log" p.usb_dir = USB_DIR p.remote_dist_dir = os.path.join(p.usb_dir, "003") # exec filename = "testfile_test_move_log__usb_and_dir" fd = open(filename, "w") fd.close() remote.RemoteLogger(p).move_log(filename, to_usb=True) df = os.path.join(MNT_USB, "003", filename) self.assertTrue(os.path.exists(df))
def ls(ctx: click.core.Context, debug: bool): """ Remoteに保存されたログファイルの一覧を取得します。 """ if debug: log.set_level(log.Level.DEBUG) else: log.set_level(log.Level.WARN) p = __get_params(ctx) try: for f in remote.RemoteLogger(p).list_log(): click.echo(f) except IOError as e: click.echo(e.args) except Exception as e: click.echo(e.args)
def test_get_log__timeout(self): params = logger.params.LogParam() params.log_extension = "tar.gz" remote_logger = remote.RemoteLogger(params) remote.RemoteLogger.TIMEOUT_LOGGING = 0.5 p = pexpect.spawn() p.expect = MagicMock() p.sendline = MagicMock() p.match = MagicMock() p.terminate = MagicMock() p.before = None p.after = None array = [MagicMock()] p.match.groups = MagicMock(return_value=array) sentinel = "__tmp__.%s" % params.log_extension array[0].decode = MagicMock(return_value=sentinel) ret = remote_logger.get_log() self.assertEqual(ret, None)
def test_move_log__dir(self): os.chdir("tests") p = logger.params.LogParam() p.read_ini() os.chdir("..") p.remote_log_dir = "/mnt/log" p.local_src_dir = os.getcwd() p.local_dist_dir = os.path.join(TestRemoteLogger.local_dist_dir, "002") # create src file, and dist directory filename = "testdata" f = open(os.path.join(os.getcwd(), filename), "w") f.close() # exec ret = remote.RemoteLogger(p).move_log(filename) for f in ret: self.assertTrue(os.path.exists(f)) os.remove(f)
def clear(ctx: click.core.Context, buffer: str, debug: bool): """ Remoteに保存されたログファイルをすべて削除します。 \b ※注意: 削除時の確認はしません。削除したファイルの復元はできません。 """ if debug: log.set_level(log.Level.DEBUG) else: log.set_level(log.Level.WARN) p = __get_params(ctx) try: remote.RemoteLogger(p).clear_log(buffer) except IOError as e: click.echo(e.args) except Exception as e: click.echo(e.args) click.echo("%s のログを削除しました。" % p.remote_log_dir)
def test_move_log__glob(self): os.chdir("tests") p = logger.params.LogParam() p.read_ini() os.chdir("..") p.remote_log_dir = "/mnt/log" p.local_src_dir = os.getcwd() p.local_dist_dir = TestRemoteLogger.local_dist_dir # create src file, and dist directory filename = "testdata" f = open(os.path.join(os.getcwd(), filename + '1'), "w") f.close() f = open(os.path.join(os.getcwd(), filename + '2'), "w") f.close() # exec ret = remote.RemoteLogger(p).move_log(filename + '*') self.assertTrue(len(ret) == 2) self.assertTrue(ret[0]) self.assertTrue(ret[1]) os.remove(ret[0]) os.remove(ret[1])