通过轮询GCP Pub/Sub主题中新的SampleSheet通知消息来启动bcl2fastq。
项目描述
是smon的一个下游工具,它使用Pub/Sub通知来启动Illumina测序运行的解复用。
用例
smon已经完成了其工作,将原始测序运行持久化存储在Google存储桶中。现在需要另一个工具可以自动启动解复用。然而,解复用通常必须等到有SampleSheet后才能开始。但是一旦SampleSheet可用,就需要开始解复用并将结果上传到Google存储。
工作原理
SampleSheets Subscriber (ssub) 通过利用GCP事件和触发器的功能来解决上述挑战。从高层次来看,它的工作方式如下
用户/应用程序将一个samplesheet上传到专用桶。sample sheet的命名约定是${RUN_NAME }.csv。
Google Storage立即向Pub/Sub主题触发一个事件(每当有新的SampleSheet或者现有的一个被覆盖时)。
同时,ssub作为一个守护进程在计算实例上运行。它订阅了同一个Pub/Sub主题。ssub定期轮询该主题以获取新消息,即每分钟一次。
当ssub收到新消息时,脚本会解析关于事件的详细信息。
ssub 将查询 Firestore 集合(与 smon 使用相同的集合)以获取一个名称等于 samplesheet 名称(除去 .csv 部分)的文档。然后 ssub 将下载 samplesheet 和运行 tarball。samplesheet 位置由 Pub/Sub 消息提供;原始运行 tarball 位置由 Firestore 文档提供。
然后启动 bcl2fastq。
解复用结果输出在本地运行目录中名为“demux”的文件夹中。
ssub 将 demux 文件夹上传到包含原始测序运行的相同 Google Storage 文件夹。
ssub 将更新相关的 Firestore 文档,以在 Google Storage 中的 demux 文件夹位置添加。
所有处理都在调用目录的 ssub_runs 子目录中完成。
重新分析
由于各种原因,可能需要重新运行解复用流程,例如,解复用结果不再可用,需要重新生成,或者 SampleSheet 中缺少条形码,或者 SampleSheet 中的条形码不正确...
重新分析只需将 SampleSheet 重新上传到 Google Storage,覆盖之前的版本即可轻松完成。Google Storage 会为 SampleSheet 分配一个生成号。将生成号视为 Google Storage 为每次对象更改分配的版本号类型。即使重新上传完全相同的文件,也会产生一个新的生成号。
内部,ssub 在以运行和 SampleSheet 生成号命名的本地目录路径中处理所有操作(文件下载、分析)。因此,用户上传错误的 SampleSheet,然后立即上传正确的一个是可以的。在这种情况下,将运行两个管道,它们不会相互干扰。然而,您会注意到,将有两组解复用结果上传到 Google Storage,每组都存在于以原始生成号命名的文件夹中。
可扩展性
虽然 ssub 中没有并行步骤,但可以通过启动两个或更多 ssub 实例来实现可扩展性,这些实例可以位于单个强大计算实例上,也可以位于不同的实例上。尽管两个运行的 ssub 实例可能会从 Pub/Sub 中拉取相同的信息,但只有其中一个实例实际上会使用它。它的工作方式如下
ssub 的实例 1 从 Pub/Sub 接收一条新消息并立即开始处理它。
实例 1 下载并解析与 Pub/Sub 消息中详述的 SampleSheet 相关的 Firestore 文档。
实例 1 注意到文档没有设置 ssub.FIRESTORE_ATTR_SS_PUBSUB_DATA 属性,因此将其设置为 Pub/Sub 消息数据的 JSON 序列化值的值。
同时,ssub 的实例 2 也已下载了相同的 Pub/Sub 消息。
实例 2 查询 Firestore 并下载相应的文档。
实例 2 注意到文档属性 ssub.FIRESTORE_ATTR_SS_PUBSUB_DATA 已经设置,因此下载了此 JSON 值。
实例 2 然后从从 Firestore 下载的 JSON 值中解析生成号,并注意到生成号与它目前正在处理的 Pub/Sub 消息中的生成号相同。
实例 2 记录一条消息,表明它正在推迟进一步的处理 - 因此将剩余的工作留给实例 1 完成。
现在让我们退一步,提出一个问题——如果实例2注意到生成数字不同怎么办?在这种情况下,它将继续运行解复用工作流程,因为手头有不同版本的SampleSheet。然而,它首先会将Firestore文档的ssub.FIRESTORE_ATTR_SS_PUBSUB_DATA属性设置为它正在处理的Pub/Sub消息数据的JSON序列化。
注意:如果要在同一实例上使用多个ssub部署,建议在每个工作目录中运行一个。
设置
你应该已经有一个Firestore集合供smon使用。如果需要,smon会为你创建一个,但如果你想进行手动测试,也可以提前创建一个。有关存储在此集合中的文档结构的详细信息,请参阅smon的文档。
创建一个专用的Google Storage桶来存储你的SampleSheets,并给它一个有用的名称,例如samplesheets。确保将桶设置为使用细粒度访问控制,而不是统一访问控制。
创建一个专用的Pub/Sub主题,并给它一个有用的名称,例如samplesheets。
创建通知配置,以便在向你的samplesheets存储桶添加或修改新文件时,samplesheets Pub/Sub主题会接收到通知。请注意,你可以使用gsutil来完成此操作,具体方法请参阅此处。以下是一个示例命令:
gsutil notification create -e OBJECT_FINALIZE -f json -t samplesheets gs://samplesheets
如果在执行此操作时遇到访问拒绝错误,请尝试使用包含的名为create_notification_configuration.py的脚本。它使用GCP Python API,并且与权限配置相关的操作要容易得多。
创建一个Pub/Sub订阅。例如
gcloud beta pubsub subscriptions create --topic samplesheets ssub
定位云存储服务帐户,并授予它pubsub.publisher IAM角色。默认情况下,一个存储桶没有将通知发送到Pub/Sub的权限。遵循GCP文档中的步骤5和6。
邮件通知
如果您的JSON配置文件中设置了“mail”JSON对象,则指定收件人将在以下事件中收到电子邮件通知
主线程中有一个异常
正在处理新的Pub/Sub消息(排除重复项)。
您可以使用send_test_email.py脚本测试您提供的邮件配置是否正常工作。如果一切正常,您应该会收到主题为“ssub测试邮件”的电子邮件。
配置文件
这是一个小的JSON文件,让监控程序知道诸如使用哪个GCP桶和Firestore集合等信息。可能的键包括
name:订阅者的客户端名称。如果配置了电子邮件通知,则名称将显示在主题行以及其他地方,例如日志消息中。
cycle_pause_sec:在Pub/Sub主题轮询之间的等待秒数。默认值为60。
firestore_collection:要用于持久化工作流程状态的Google Firestore集合的名称,下游工具可以查询它。如果它尚未存在,则会创建它。如果未提供此参数,则关闭Firestore支持。
- sweep_age_sec:当一个分析目录(在ssub_runs目录内)
的年龄超过这么多秒时,将其删除。默认值为604800(1周)。
用户提供的配置文件将与内置架构进行验证。
安装
在Python3的较新版本中运行
pip3 install ssub
建议使用具有以下角色的服务帐户启动您的计算实例(将运行监控程序)
roles/storage.objectAdmin
roles/datastore.owner
或者,给你的计算实例赋予cloud-platform范围。
部署
建议使用仓库中提供的Dockerfile。
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。
源分布
构建分布
ssub-0.2.1.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 6fc4f81cbedf175312256023c08b7954ed59d547bc55c57b2de0b088e4b1f1c0 |
|
MD5 | 48d20ca74b69d41b26791697db8300ca |
|
BLAKE2b-256 | d525d14917a037ccf69904cec7b2af11ea4445c768741bf2f8d98a564798863a |
ssub-0.2.1-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 8a1ba8bb8e026f6a197e762cfcec75df7bdf4996cf638066aada3a6e94720720 |
|
MD5 | 81ccc17fa16dd0f2274f0b9a8b46e4a3 |
|
BLAKE2b-256 | 96f0137f861f8eaf78ca47f1298e1bba5975d13bb68d6e53c39c0033b4a5c989 |