Esempio n. 1
0
def launch(scan, jobs, session):
    ftpuser = scan.user.ftpuser
    for job in jobs:
        filename = job.filename
        probename = job.probename
        task_id = job.task_id
        celery_probe.job_launch(ftpuser, filename, probename, task_id)
    set_status(scan, IrmaScanStatus.launched, session)
    return
Esempio n. 2
0
def launch(scan, jobs, session):
    ftpuser = scan.user.ftpuser
    for job in jobs:
        filename = job.filename
        probename = job.probename
        task_id = job.task_id
        celery_probe.job_launch(ftpuser, filename,
                                probename, task_id)
    set_status(scan, IrmaScanStatus.launched, session)
    return
Esempio n. 3
0
def launch(scan, jobs, session):
    ftpuser = scan.user.ftpuser
    frontend_scanid = scan.scan_id
    for job in jobs:
        filehash = job.filehash
        probename = job.probename
        task_id = job.task_id
        celery_probe.job_launch(ftpuser, frontend_scanid, filehash, probename,
                                task_id)
    set_status(scan, IrmaScanStatus.launched, session)
    return
Esempio n. 4
0
 def test_job_launch(self, m_async_call):
     ftpuser = "******"
     filename = "filename"
     probe = "probe"
     task_id = "task_id"
     signature = module.results_app.signature
     hook_success = route(
         signature("brain.results_tasks.job_success", [filename, probe]))
     hook_error = route(
         signature("brain.results_tasks.job_error", [filename, probe]))
     module.job_launch(ftpuser, filename, probe, task_id)
     m_async_call.assert_called_once_with(module.probe_app,
                                          "probe.tasks",
                                          "probe_scan",
                                          args=(ftpuser, filename),
                                          routing_key=probe,
                                          link=hook_success,
                                          link_error=hook_error,
                                          task_id=task_id)
Esempio n. 5
0
 def test_job_launch(self, m_async_call):
     ftpuser = "******"
     filename = "filename"
     probe = "probe"
     task_id = "task_id"
     signature = module.results_app.signature
     hook_success = route(signature("brain.results_tasks.job_success",
                                    [filename, probe]))
     hook_error = route(signature("brain.results_tasks.job_error",
                                  [filename, probe]))
     exchange = probe + "_exchange"
     module.job_launch(ftpuser, filename, probe, task_id)
     m_async_call.assert_called_once_with(module.probe_app,
                                          "probe.tasks",
                                          "probe_scan",
                                          args=(ftpuser, filename),
                                          routing_key=probe,
                                          exchange=exchange,
                                          link=hook_success,
                                          link_error=hook_error,
                                          task_id=task_id)
Esempio n. 6
0
def scan(frontend_scanid, scan_request):
    try:
        log.info("%s", frontend_scanid)
        # TODO user should be identified by RMQ vhost
        # read vhost from config as workaround
        rmqvhost = config.get_frontend_rmqvhost()
        user_id = user_ctrl.get_userid(rmqvhost)
        ftpuser = user_ctrl.get_ftpuser(user_id)
        # create an initial entry to track future errors
        # tell frontend that frontend_scanid is now known to brain
        # progress available
        scan_id = scan_ctrl.new(frontend_scanid, user_id, len(scan_request))
        # send a scan launched event to frontend
        (remaining, quota) = user_ctrl.get_quota(user_id)
        if remaining is not None:
            log.info("%s quota remaining {0}/{1}",
                     frontend_scanid,
                     remaining,
                     quota)
        else:
            log.info("%s unlimited quota",
                     frontend_scanid)
        if remaining <= 0:
            scan_ctrl.error(scan_id, IrmaScanStatus.error)

        available_probelist = celery_probe.get_probelist()
        for (filename, probe_list) in scan_request.items():
            if probe_list is None:
                scan_ctrl.error(scan_id, IrmaScanStatus.error_probe_missing)
                log.info("%s Empty probe list", frontend_scanid)
                return IrmaTaskReturn.error("empty probe list on brain")
            # first check probe_list
            for p in probe_list:
                # check if probe exists
                if p not in available_probelist:
                    scan_ctrl.error(scan_id,
                                    IrmaScanStatus.error_probe_missing)
                    msg = "Unknown probe {0}".format(p)
                    log.info("%s Unknown probe %s",
                             frontend_scanid,
                             p)
                    return IrmaTaskReturn.error(msg)

            # Now, create one subtask per file to
            # scan per probe according to quota
            for probe in probe_list:
                if remaining is not None:
                    if remaining <= 0:
                        break
                    else:
                        remaining -= 1
                task_id = UUID.generate()
                job_id = job_ctrl.new(scan_id, filename, probe, task_id)
                celery_probe.job_launch(ftpuser,
                                        frontend_scanid,
                                        filename,
                                        probe,
                                        job_id,
                                        task_id)
        scan_ctrl.launched(scan_id)
        celery_frontend.scan_launched(frontend_scanid)
        log.info(
            "%s %d files receives / %d active probe /" +
            " %d probe used / %d jobs launched",
            frontend_scanid,
            len(scan_request),
            len(available_probelist),
            len(probe_list),
            scan_ctrl.get_nbjobs(scan_id))
    except:
        log.info("exception", exc_info=True)
        raise