跳转到主要内容

未提供项目描述

项目描述

OpenSAFELY工作运行器

工作运行器是一种封装

  • 检出OpenSAFELY研究仓库的任务的服务;
  • 在通过作业队列请求时执行其在project.yaml配置文件中定义的操作;并将
  • 其结果存储在特定位置。

快速参考

最终用户可以在OpenSAFELY文档中找到更多信息。

工作原理

在生产中,此软件在主数据提供者基础设施中的一个安全服务器上作为循环运行。它轮询OpenSAFELY作业服务器,寻找运行作业的请求。

作业属于一个工作区。这描述了包含正在执行OpenSAFELY合规项目的git仓库;git分支,以及要使用的数据库类型。工作区还充当一种命名空间,用于对作业的输出进行分区。

符合OpenSAFELY规范的仓库必须提供一个project.yaml文件,该文件描述了如何将请求的作业转换为可以在安全服务器上的子进程中运行的命令(& 参数)。它融合了依赖关系的概念,因此生成图表的操作可能依赖于提取数据库中该图表数据的操作。有关更多信息,请参阅操作参考

操作可以定义outputs;这些在磁盘上持久化,并可供工作区中的后续操作以及有权登录服务器查看原始文件的用户使用。

运行者负责按顺序执行依赖项。默认情况下,它会跳过重新运行依赖项,如果之前的运行产生了在生产环境中仍然存在的输出。运行者还将状态信息报告回作业服务器,并删除可能敏感的信息。

运行者作为opensafely-cli工具的一部分打包,以便用户可以本地测试他们的操作。

作业结构

作业服务器以以下格式以JSON形式提供作业。首先,一个作业必须属于一个工作区

{
    "workspace": {
        "name": "my workspace",
        "repo": "https://github.com/opensafely/job-integration-tests",
        "branch": "master",
        "db": "full"
    }
}

"db"的可能值为"full"、"slice"和"dummy"。

工作区是一种将属于给定分支、仓库和数据库组合的作业关联起来的方法。为了入队作业,客户端发送如下JSON:

{
    "backend": "tpp",
    "action_id": "do_thing",
    "workspace_id": 1
}

消耗作业

作业运行者是一种安装在具有对给定后端访问权限的机器上的服务。它从服务器接收作业,并消耗那些backend值与当前BACKEND环境变量值匹配的作业。

它还必须定义三个环境变量,这些是RFC1838连接URL;这些对应于作业工作区定义中请求的db,因此命名为FULL_DATABASE_URLSLICE_DATABASE_URLDUMMY_DATABASE_URL

当找到作业时,发生以下操作

  • 获取相应的仓库。使用环境中的PRIVATE_REPO_ACCESS_TOKEN访问私有仓库。
  • 解析其project.yaml
    • 从该文件中提取单独的actions
    • 为请求的操作计算依赖图;例如,一个操作可能在运行之前依赖于三个先前的操作
    • 检查图中的每个操作,看是否需要运行
      • 以下操作不需要运行:(a)已经从前一个运行生成输出;(b)正在运行;(c)上一次运行失败
    • 如果依赖项失败,则请求的操作失败
    • 如果依赖项需要运行,则将新的作业推送到队列,并将当前作业推迟
    • 如果操作没有需要运行的依赖项,则执行其docker run
    • 完成后,将状态码和信息报告回作业服务器。在成功的情况下,还会发布输出文件位置的列表。在失败的情况下,信息中删除任何可能敏感的信息,并与一个唯一字符串相关联,以便具有必要权限的用户可以登录到生产环境并检查完整的docker日志。

输出位置

每个操作都定义了一组输出,这些输出被保存在永久存储位置。项目作者必须将这些输出分类为高度敏感中度敏感。任何可能高度泄露的匿名数据(例如,没有低数量红action)应归类为高度敏感;作者认为经审查后可能发布的数据应归类为中度敏感。这种设计允许对协作者审查数据输出的分层权限级别。例如,研究作者通常会访问高度敏感材料以进行调试;但其他协作者可以访问中度敏感数据以准备发布(计划添加最小敏感类别)。

输出因此根据以下环境变量持久化到文件系统路径

# A location where cohort CSVs (one row per patient) should be
# stored. This folder must exist.
HIGH_PRIVACY_STORAGE_BASE=/home/opensafely/high_security

# A location where script outputs (some for publication) should be
# stored
MEDIUM_PRIVACY_STORAGE_BASE=/tmp/outputs/medium_security

Project.yaml

一个有效的项目文件看起来像这样

version: "3.0"

expectations:
  population_size: 1000

actions:

  generate_study_population:
    run: cohortextractor:latest generate_cohort --study-definition study_definition
    outputs:
      highly_sensitive:
        cohort: output/input.csv

  run_model:
    run: stata-mp:latest analysis/model.do
    needs: [generate_study_population]
    outputs:
      moderately_sensitive:
        model: models/cox-model.txt
        figure: figures/survival-plot.png

有关project.yaml设置的详细描述,请参阅项目管道文档

本地操作开发

cohortextractor命令行工具导入此库,并以一系列同步的docker命令的方式实现动作解析和运行功能,而不是通过作业队列异步实现。

对于开发者

请参阅附加信息

项目详情


发布历史 发布通知 | RSS源

下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分布

opensafely-jobrunner-2.52.4.tar.gz (70.9 kB 查看哈希值)

上传时间

构建分布

opensafely_jobrunner-2.52.4-py3-none-any.whl (82.7 kB 查看哈希值)

上传时间 Python 3

由以下机构支持