def __call__(self, outputs, datetime=None) -> bool: command_out = outputs.get('stdout', None) time_output = outputs.get('stderr', None) rc = outputs.get('rc') try: exp_rc = self.options.get('rc', None) if exp_rc: if rc not in [int(_rc) for _rc in re.split(r'\s*\|\s*', exp_rc)]: raise AssertionError( f"Result return rc {rc} not match expected\nStdOut:\n\t{command_out}\nStdErr:\n\t{time_output}") data = time_output.split(',') row_dict = DotDict(**{k: v.replace('%', '') for (k, v) in [entry.split(':', 1) for entry in data]}) for k in row_dict.keys(): if k == 'Command': continue row_dict.update({k: float(row_dict[k])}) logger.info(f"Command: {row_dict.get('Command')} [Rc: {row_dict.get('Rc')}]") row = self.table.template(self.host_id, None, *tuple(list(row_dict.values()) + [-1])) du = model.data_factory(self.table, row, output=command_out, datetime=datetime) self.data_handler(du) return True except Exception as e: f, li = get_error_info() logger.error(f"{self.__class__.__name__}: {e}; File: {f}:{li}") raise RunnerError(f"{self}", f"{e}; File: {f}:{li}")
def __call__(self, **updates) -> Tuple[str, Iterable[Iterable]]: output_ref = CacheLines().upload(self._output) for i in range(0, len(self._data)): _template = DotDict(self._data[i]._asdict()) _template.update({'OUTPUT_REF': output_ref}) self._data[i] = self.table.template(*list(_template.values())) return super().__call__(**updates)