Пример #1
0
    def findFlows(self, request):
        user = ViewUtil.get_user(request)
        app_username = user.username
        os_username = ViewUtil.get_os_username()

        logger.debug("connect_flows:user: %s", user.username)
        workflowPath = ViewUtil.form_workflow_path(user)
        files = GraysonUtil.getDirs(of_dir=workflowPath)
        workdirs = GraysonUtil.findFilesByName(".*?\.grayson_upk$", files)
        response = []
        for workdir in workdirs:
            logger.debug("connect_flows: workdir: %s", workdir)
            conf = None
            try:
                conf = GraysonUtil.readJSONFile(os.path.join(workdir, "grayson.conf"))
            except IOError as e:
                pass
            if conf:
                outputFile = conf["output-file"]
                files = GraysonUtil.getFiles(workdir, recursive=False)
                runs = GraysonUtil.getDirs(
                    os.path.join(workdir, "work", os_username, "pegasus", outputFile.replace(".dax", ""))
                )
                runs.sort()

                def normalize(line):
                    return GraysonUtil.getUserRelativePath(line, app_username)

                runDirs = GraysonUtil.findFilesByName("[0-9]{8}T[0-9]{6}\-[0-9]{4}$", runs)
                item = {
                    "flow": normalize(workdir),
                    "id": outputFile,
                    "runs": map(lambda p: " ".join([os.path.basename(p), self.get_job_status(p)]), runDirs),
                    "graphs": GraysonUtil.findFilesByName(".*?.graphml$", files),
                    "daxen": map(normalize, GraysonUtil.findFilesByName("[a-zA-Z0-9\._\-]+\.dax$", files)),
                }
                response.append(item)
            response.sort(key=lambda k: k["id"])
        return response