def handle_output_files(file_ext_id, result, error_case=False): log.info("Handling output for file %s", file_ext_id) with session_transaction() as session: file_ext = FileExt.load_from_ext_id(file_ext_id, session) scan = file_ext.scan uploaded_files = result.get('uploaded_files', None) log.debug("scan %s file %s depth %s", scan.external_id, file_ext_id, file_ext.depth) if uploaded_files is None: return resubmit = scan.resubmit_files max_resubmit_level = get_max_resubmit_level() if max_resubmit_level != 0 and file_ext.depth > \ max_resubmit_level: log.warning("scan %s file %s resubmit level %s exceeded max " "level (%s)", scan.external_id, file_ext_id, file_ext.depth, max_resubmit_level ) resubmit = False if not resubmit or error_case: reason = "Error case" if error_case else "Resubmit disabled" log.debug("scan %s: %s flushing files", scan.external_id, reason) celery_brain.files_flush(list(uploaded_files.values()), scan.external_id) return log.debug("scan %s: found files %s", scan.external_id, uploaded_files) # Retrieve the DB probe_result to link it with # a new FileProbeResult in _append_new_files probe_result = file_ext.fetch_probe_result(result['name']) new_fws = _append_new_files_to_scan(scan, uploaded_files, probe_result, file_ext.depth+1) parent_file = file_ext.file for new_fw in new_fws: parent_file.children.append(new_fw) session.commit() log.debug("scan %s: %d new files to resubmit", scan.external_id, len(new_fws)) scan_request = _create_scan_request(new_fws, scan.get_probelist(), scan.mimetype_filtering) scan_request = _add_empty_results(new_fws, scan_request, scan, session) if scan_request.nb_files == 0: scan.set_status(IrmaScanStatus.finished) log.info("scan %s: nothing to do flushing files", scan.external_id) celery_brain.files_flush(list(uploaded_files.values()), scan.external_id) return for new_fw in new_fws: celery_brain.scan_launch(new_fw.external_id, new_fw.probes, scan.external_id) return
def handle_output_files(file_ext_id, result, error_case=False): log.info("Handling output for file %s", file_ext_id) with session_transaction() as session: file_ext = FileExt.load_from_ext_id(file_ext_id, session) scan = file_ext.scan uploaded_files = result.get('uploaded_files', None) log.debug("scan %s file %s depth %s", scan.external_id, file_ext_id, file_ext.depth) if uploaded_files is None: return resubmit = scan.resubmit_files max_resubmit_level = get_max_resubmit_level() if max_resubmit_level != 0 and file_ext.depth > \ max_resubmit_level: log.warning( "scan %s file %s resubmit level %s exceeded max " "level (%s)", scan.external_id, file_ext_id, file_ext.depth, max_resubmit_level) resubmit = False if not resubmit or error_case: reason = "Error case" if error_case else "Resubmit disabled" log.debug("scan %s: %s flushing files", scan.external_id, reason) celery_brain.files_flush(list(uploaded_files.values()), scan.external_id) return log.debug("scan %s: found files %s", scan.external_id, uploaded_files) # Retrieve the DB probe_result to link it with # a new FileProbeResult in _append_new_files probe_result = file_ext.fetch_probe_result(result['name']) new_fws = _append_new_files_to_scan(scan, uploaded_files, probe_result, file_ext.depth + 1) parent_file = file_ext.file for new_fw in new_fws: parent_file.children.append(new_fw) session.commit() log.debug("scan %s: %d new files to resubmit", scan.external_id, len(new_fws)) scan_request = _create_scan_request(new_fws, scan.get_probelist(), scan.mimetype_filtering) scan_request = _add_empty_results(new_fws, scan_request, scan, session) if scan_request.nb_files == 0: scan.set_status(IrmaScanStatus.finished) log.info("scan %s: nothing to do flushing files", scan.external_id) celery_brain.files_flush(list(uploaded_files.values()), scan.external_id) return for new_fw in new_fws: celery_brain.scan_launch(new_fw.external_id, new_fw.probes, scan.external_id) return
def test006_scan_launch(self, m_async_call): args = ["test1", "test2", "test3"] result = module.scan_launch(*args) m_async_call.assert_called_once_with(self.m_brain_app, BRAIN_SCAN_TASKS, "scan", args=args) self.assertEqual(result, m_async_call())
def scan_launch_file_ext(file_ext_id): file_ext = None with session_transaction() as session: try: file_ext = FileExt.load_from_ext_id(file_ext_id, session) scan_id = file_ext.scan.external_id log.debug("scan %s: launch scan for file_ext: %s", scan_id, file_ext_id) ftp_ctrl.upload_file(file_ext_id, file_ext.file.path) # launch new celery scan task on brain celery_brain.scan_launch(file_ext_id, file_ext.probes, scan_id) except IrmaFtpError as e: log.error("file_ext %s: ftp upload error %s", file_ext_id, str(e)) if file_ext is not None: file_ext.scan.set_status(IrmaScanStatus.error_ftp_upload) except Exception as e: log.exception(e)