def wrapper(self: Karton, *args, **kwargs): handler = LocalLogBuffer() try: # Register new log handler self.log.addHandler(handler) method(self, *args, **kwargs) except Exception: self.log.exception("Analysis failed") finally: # Unregister local handler self.log.removeHandler(handler) try: buffer = StringIO() for idx, entry in enumerate(handler.buffer): if idx > 0: buffer.write("\n") buffer.write(json.dumps(entry)) res = LocalResource(object_name, buffer.getvalue(), bucket="drakrun") task_uid = self.current_task.payload.get( 'override_uid') or self.current_task.uid res._uid = f"{task_uid}/{res.name}" res.upload(self.minio) except Exception: self.log.exception("Failed to upload analysis logs")
def upload_artifacts(self, analysis_uid, workdir, subdir=''): base_path = os.path.join(workdir, 'output') for fn in os.listdir(os.path.join(base_path, subdir)): file_path = os.path.join(base_path, subdir, fn) if os.path.isfile(file_path): object_name = os.path.join(analysis_uid, subdir, fn) res_name = os.path.join(subdir, fn) resource = LocalResource(name=res_name, bucket='drakrun', path=file_path) resource._uid = object_name yield resource elif os.path.isdir(file_path): yield from self.upload_artifacts(analysis_uid, workdir, os.path.join(subdir, fn))