Пример #1
0
def api_run (request):
    response = { "status" : "ok" }
    try:
        workflowId = None
        logger.debug ("request: %s", request.REQUEST)
        logger.debug ("files: %s", request.FILES)
        if GraysonWebConst.WORKFLOW in request.FILES:
            workflow = request.FILES [GraysonWebConst.WORKFLOW]
            logger.debug (_("Processing uploaded workfow archive: %s."), workflow)
            logger.debug ("Processing uploaded workfow archive: %s.", workflow)
            user = ViewUtil.get_user (request)
            file_name = ViewUtil.form_workflow_path (user, workflow.name)
            contentFile = ContentFile (workflow.read ())
            logger.debug ("saving filename: %s", file_name)
            archivePath = default_storage.save (file_name, contentFile)
            logger.debug ("""executing workflow - 
       user         : %s
       archive      : %s
       archivePath  : %s
       amqpSettings : %s
""", user, file_name, archivePath, settings.AMQP_SETTINGS)

            WorkflowMonitor.ensureRunning (workflowRoot    = settings.GRAYSONWEB_WORKFLOW_ROOT,
                                           amqpSettings    = settings.AMQP_SETTINGS,
                                           eventBufferSize = settings.EVENT_BUFFER_SIZE)

            ExecuteWorkflow.delay (user         = user,
                                   archive      = file_name,
                                   archivePath  = archivePath,
                                   workflowRoot = settings.GRAYSONWEB_WORKFLOW_ROOT,
                                   amqpSettings = settings.AMQP_SETTINGS)
            logger.debug ("execute called..")
    except Exception as e:
        logger.error ("Exception occurred during api_run()")
        traceback.print_exc ()  
    logger.debug ("getting response object %s", response)
    return ViewUtil.get_json_response (response)
Пример #2
0
def get_flow_events (request):
    workdir    = request.REQUEST ["workdir"]
    workflowId = request.REQUEST ["workflowid"]
    runId      = request.REQUEST ["runid"]    
    dax        = request.REQUEST ["dax"] if "dax" in request.REQUEST else None

    if not dax:
        dax = os.path.basename (workflowId)
        logger.debug ("dax: %s", dax)

    workflowName = os.path.basename (workflowId).replace (".dax", "")

    
    process_username = ViewUtil.get_os_username ()
    workdirPath = GraysonUtil.form_workdir_path (workdir, process_username, workflowName, runId)
    user = ViewUtil.get_user (request)
    workdirPath = ViewUtil.form_workflow_path (user, workdirPath)
    logger.debug ("launching monitor: user: %s, workdir: %s, workflowId: %s, runId: %s, dax: %s",
                  user.username, workdirPath, workflowId, runId, dax)

    workflowMonitorDatabase = WorkflowMonitorDatabase ()
    WorkflowMonitor.ensureRunning (workflowRoot    = settings.GRAYSONWEB_WORKFLOW_ROOT,
                                   amqpSettings    = settings.AMQP_SETTINGS,
                                   eventBufferSize = settings.EVENT_BUFFER_SIZE)
    
    workflowMonitorDatabase.subscribeToWorkflow (
        settings.GRAYSONWEB_WORKFLOW_ROOT,
        {
            "username"    : user.username,
            "workflowId"  : workflowId,
            "workdir"     : workdirPath,
            "daxen"       : dax.split (','),
            "buffer"      : 0
            })

    return ViewUtil.get_json_response ({ "status" : "ok" })