跳转到主要内容

寻找新的Illumina测序运行并将它们打包到GCP存储

项目描述

一种将新的Illumina测序运行存档到Google云存储的工具

用例

您有一台或多台Illumina测序仪正在写入挂载的文件系统,如NFS。您需要一种方法来检测何时有新的、已完成的测序运行目录,并将其重新定位到冗余存储。下游工具需要能够知道打包的运行目录何时可供后处理(即:解复用、质量控制、读取对齐等)。

工作原理

通过使用Google云平台服务和跟踪工作流程状态来解决上述挑战。测序运行使用gzip压缩打包,然后上传到Google云存储。工作流程状态通过SQLite在本地跟踪,并可选择在Google Firestore NoSQL数据库中跟踪,以提高冗余性,并允许下游客户端查询测序运行记录。

注意:虽然您不需要使用Google计算实例来运行监控脚本,但此处的文档假设您正在这样做,因为这是最推荐的方式。这是因为监控必须与某些GCP服务交互,因此必须使用有效的Google凭证(即服务账户)。

监控脚本名为 srun-mon(一个调用 launch_monitor.pymain 函数的封装)。运行此脚本时,您必须提供指向 JSON 配置文件的路径,下面将详细说明。您应该将计算实例配置为以守护进程服务运行此脚本。

工作流程被分为两个任务:tar 任务上传任务。当监控检测到新的测序运行时,它将在子进程中执行工作流程。该工作流程足够智能,能够检测从哪个任务开始,这得益于本地 SQLite 数据库。该数据库为每个测序运行记录一条记录,并跟踪哪些工作流程任务已完成,以及工作流程是否正在运行。

邮件通知

如果您的配置文件中设置了‘mail’ JSON 对象,则指定收件人将在以下事件下收到电子邮件通知:

  • 执行工作流程的子进程崩溃

  • 子进程因运行时间过长而被终止(请参阅 conf 参数 task_runtime_limit_sec

  • 主线程中发生异常

  • 正在处理新的测序运行。

您可以使用脚本 send_test_email.py 来测试您提供的邮件配置是否正常工作。如果是,您应该会收到主题为“sruns-mon 测试邮件”的电子邮件。

工作流程任务

工作流程分为两个任务,每个任务都可以单独运行(即如果工作流程需要从上次停止的地方重新启动)。

tar 任务

创建一个使用 gzip 压缩的 tarball。进程 ID 存储在 SQLite 数据库的本地运行记录中。

上传任务

将 tar 文件上传到 Google 存储桶。此任务从本地数据库获取运行记录,以获取本地 tar 文件的路径。

配置文件

这是一个小的 JSON 文件,它让监控知道诸如使用哪个 GCP 存储桶和 Firestore 集合等问题。可能的键包括:

  • name:监控器的名称。如果配置了电子邮件通知,则名称将出现在主题行中,以及其他位置,例如日志消息。

  • completed_runs_dir:在运行完成工作流程后将运行目录移动到的目录。如果该目录尚不存在,则会创建该目录。默认为位于监视同一目录下的名为‘SRM_COMPLETED’的文件夹。请注意,目前还没有清除完成运行的目录的方法,但这将在未来的版本中实现。

  • cycle_pause_sec:在扫描 watchdir 之间等待的秒数。默认为 60。

  • firestore_collection:用于持久化工作流程状态并允许下游工具查询的 Google Firestore 集合的名称。如果尚不存在,则将其创建。如果未提供此参数,则关闭 Firestore 支持。

  • gcp_bucket_basedir:(必需)在 gcp_bucket_name 中存储所有上传文件的目录。默认为根目录。

  • gcp_bucket_name:(必需)要上传打包运行目录的 Google 云存储桶的名称。

  • sentinal_file_age_minutes:在启动任何任务之前,例如对运行目录进行打包,哨兵文件(即 CopyComplete.txt)应该有多久的时间。Illumina 支持建议为 15 分钟,因此默认值为 15 分钟。这有助于确保测序仪上运行的 Illumina Universal Copy Services (UCS) 在哨兵文件出现后有足够的时间完成。

  • sqlite_db:用于跟踪工作流程状态的本地 SQLite 数据库名称。如果未指定,则默认为 sruns.db

  • sweep_age_sec:当完成运行的目录中的运行比这个秒数旧时,将其删除。默认为 604800(1 周)。

  • task_runtime_limit_sec:子进程在被终止前允许运行的时间(秒)。这旨在作为安全机制,以防由于不可预见的情况导致资源被错误进程消耗。在这种情况下,将发送一封电子邮件通知,以提醒有关错误进程及其关联的测序运行。您为该设置设置的秒数取决于多个因素,例如运行大小和网络速度。建议至少使用两天(172800秒)以保持保守。

  • watchdir:(必需)监视新测序运行的目录。

用户提供的配置文件在监视器中对内置架构进行验证。

跟踪工作流程状态

针对给定运行目录的工作流程状态同时在本地SQLite数据库以及Google Firestore(一个NoSQL数据库)中进行跟踪。本地状态跟踪是为了能够重新启动工作流程,如果子进程崩溃或节点关闭,可以重新启动工作流程。Firestore用于允许下游应用程序查询集合(其名称在您的配置文件中指定)以执行所需的后期处理。例如,外部工具可以查询集合,并询问是否已完成特定的运行。在此意义上,“完成”意味着运行已打包并上传到Google存储桶。然后,该工具可以告知tar文件blob的位置。

SQLite

每个测序运行都有一个记录,存储在tasks表中 - 这是唯一的表。可能的字段有

  • name:测序运行的名字。

  • pid:正在运行或已运行的工作流程的进程ID。

  • tarfile:由tar任务生成的本地tar文件的路径。

  • gcp_tarfile:Google存储桶中的blob对象路径,存储为$bucket_name/$blob_name

  • rundir_path:原始测序运行的目录路径。

Firestore

Firestore是可选的。如果您的配置文件包含firestore_collection设置,则将尝试写入指定的Firestore集合(如果需要则创建)。

集合中每个测序运行都有一个记录。可能的字段有

  • name:测序运行的名字。这反映了与类似SQLite数据库记录中相同属性的值。

  • storage:打包的运行目录在存储桶中的存储对象路径,形式为$bucket_name/path/to/run.tar.gz

  • workflow_status:工作流程的整体状态。可能的值有

    • new

    • starting

    • tarring

    • tarring_complete

    • uploading

    • uploading_complete

    • complete

    • not_running

安装和设置

这仅适用于Python 3的较新版本

pip3 install sruns-monitor

建议使用以下角色具有以下角色的服务帐户启动您的计算实例(将运行监视器)

  • roles/storage.objectAdmin

  • roles/datastore.owner

运行测试案例

每个模块都有相关的测试案例。既有单元测试也有功能测试。

单元测试

tests包目录中运行以下命令

python3 -m unittest

有两个单元测试模块

  • test_sqlite_utils.py:测试sqlite_utils.Db类中的方法。这些测试确保与本地SQLite数据库交互的方法按预期工作。

  • test_utils.py:测试utils.py中的通用实用函数,例如打包运行目录、上传对象到Google存储以及检查子进程状态。

功能测试

运行功能测试特别有助于让您知道您的环境设置正确,并且监视器可以访问您的Firestore数据库和Google存储桶。

测试模块名为 monitor_integration_tests.py。它正在测试 sruns_monitor.Monitor 类中的逻辑。因为这个类在实例化时需要一个 JSON 格式的配置文件,所以您必须创建这样一个文件才能运行这些测试。文件必须命名为 conf.json 并位于调用目录中。以下配置参数不应指定:

  • watchdir

  • completed_runs_dir

  • sqlite_db

这是因为 tests 包目录中包含它自己的监视目录和模拟运行目录。您应在 conf.json 文件中提供的测试参数是:

  • firestore_collection

  • gcp_bucket_name

  • gcp_bucket_basedir

然后,您可以这样运行测试:

monitor_integration_tests.py

请注意,您应使用上面描述的 Google 服务帐户。

项目详情


下载文件

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

源分布

sruns-monitor-1.2.0.tar.gz (30.3 kB 查看哈希值)

上传时间

构建分布

sruns_monitor-1.2.0-py3-none-any.whl (38.6 kB 查看哈希值)

上传时间 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面