BioMAJ
项目描述
BioMAJ3
此项目是BioMAJ的完整重写,文档可在以下位置找到: http://biomaj.genouest.org。
BioMAJ (生物更新) 是一个专用于数据同步和处理的流程引擎。该软件自动化更新周期和本地镜像数据库存储库的监督。
常见用途包括下载远程数据库(例如 Genbank)并应用一些转换(blast索引、emboss索引等)。任何脚本都可以应用于下载的数据。当所有处理成功应用后,银行将放在专门的发布目录中的“生产”状态。使用cron任务,可以在固定时间间隔执行更新任务,只有检测到更改时才重新下载数据。
更多文档可在wiki页面找到。
直到版本3.1.17,BioMAJ与python 2和3兼容。从3.1.17之后,仅支持python 3。
入门指南
编辑global.properties文件以匹配您的设置。最小配置包括数据库连接和目录。
biomaj-cli.py -h
biomaj-cli.py --config global.properties --status
biomaj-cli.py --config global.properties --bank alu --update
迁移
要从先前的BioMAJ 1.x迁移,可以在以下位置找到脚本:[https://github.com/genouest/biomaj-migrate](https://github.com/genouest/biomaj-migrate)。脚本将旧数据库导入新数据库,并将配置文件更新到修改后的格式。数据目录保持不变。
从3.0到3.1的迁移
Biomaj 3.1提供了一个可选的微服务架构,允许将biomaj组件分离和分布/扩展到一台或多台主机上。此实现是可选的,但推荐用于服务器安装。对于本地计算机安装,可以保留单体安装。要升级现有的3.0安装,由于biomaj代码已分成多个组件,因此不仅需要安装/更新biomaj python包,还需要安装/更新biomaj-cli和biomaj-daemon包。然后必须手动升级数据库(请参阅文档中的“升级”)。
要执行数据库迁移
python biomaj_migrate_database.py
应用程序功能
-
同步
- 多种远程协议(ftp、ftps、http、本地复制等)
- 数据传输完整性检查
- 使用增量方法进行发布版本控制
- 多线程
- 数据提取(gzip、tar、bzip)
- 数据树目录规范化
- 支持自定义下载的插件
-
预处理和后处理
- 高级工作流描述(D.A.G)
- 针对各种生物信息软件(blast、srs、fastacmd、readseq等)的后处理索引
- 轻松集成个人脚本以实现银行后处理自动化
-
监督
- 可选的行政Web界面(biomaj-watcher)
- CLI管理
- 更新周期监督的邮件警报
- Prometheus和Influxdb的可选集成
- 可选的consul进程监督
-
可扩展性
- 单体(本地安装)或微服务架构(远程访问BioMAJ服务器)
- 微服务安装允许按进程进行可扩展性和监督(负责下载、执行等的进程数量)
-
远程访问
- 可选的FTP服务器提供认证或匿名数据访问
- 对银行文件的HTTP访问(/db端点,仅微服务设置)
依赖关系
包
- Debian:libcurl-dev、gcc
- CentOs:libcurl-devel、openldap-devel、gcc
Linux工具:tar、unzip、gunzip、bunzip
数据库
- mongodb(本地或远程)
索引(可选)
- elasticsearch(全局属性,use_elastic=1)
ElasticSearch索引为biomaj添加了高级搜索功能,以查找具有特定格式或类型的文件数据库。ElasticSearch的配置不在BioMAJ文档的范围之内。对于基本安装,一个ElasticSearch实例就足够了(数据量低),在这种情况下,应相应修改ElasticSearch配置文件。
node.name: "biomaj" (or any other name)
index.number_of_shards: 1
index.number_of_replicas: 0
安装
从源代码
在依赖关系安装后,进入BioMAJ源代码目录
pip install .
从软件包
pip install biomaj biomaj-cli biomaj-daemon
您应考虑使用Python虚拟环境(virtualenv)来安装BioMAJ。
在“tools/examples”目录中,复制全局的“global.properties”文件,并将其更新以匹配您的本地安装。
“tools/process”目录包含示例流程文件(Python 和 Shell)。
Docker
您可以使用 Docker 运行 BioMAJ(osallou/biomaj-docker)。
docker pull osallou/biomaj-docker
docker pull mongo
docker run --name biomaj-mongodb -d mongo
# Wait ~10 seconds for mongo to initialize
# Create a local directory where databases will be permanently stored
# *local_path*
docker run --rm -v local_path:/var/lib/biomaj --link biomaj-mongodb:biomaj-mongodb osallou/biomaj-docker --help
将您的银行属性文件复制到“local_path/conf”目录,并将后处理(如果有)复制到“local_path/process”目录。
您可以在“/etc/biomaj/global.properties”中覆盖全局的“global.properties”文件(-v xx/global.properties:/etc/biomaj/global.properties)。
容器中不提供默认的银行属性文件或流程。
示例可在https://github.com/genouest/biomaj-data找到。
导入银行模板
一旦 BioMAJ 安装完成,您就可以使用 biomaj 客户端导入一些银行示例。
# List available templates
biomaj-cli ... --data-list
# Import a bank template
biomaj-cli ... --data-import --bank alu
# then edit bank template in config directory if needed and launch bank update
biomaj-cli ... --update --bank alu
插件
BioMAJ 支持Python插件来管理自定义下载,其中支持的协议不足(未格式化的列表的HTTP页面、访问受保护页面等)。
有关插件及其配置的示例,请参阅biomaj-plugins存储库。
插件可以定义一个特定的方式来
- 检索发布版本
- 列出要下载的远程文件
- 下载远程文件
插件可以定义一个或多个这些功能。
基本上,它是在银行属性文件中定义的
# Location of plugins
plugins_dir=/opt/biomaj-plugins
# Use plugin to fetch release
release.plugin=github
# List of arguments of plugin function with key=value format, comma separated
release.plugin_args=repo=osallou/goterra-cli
当使用相关的流程步骤时使用插件
- release.plugin <= 返回远程发布版本
- remote.plugin <= 返回要下载的文件列表
- download.plugin <= 从文件列表下载文件
API 文档
https://readthedocs.org/projects/biomaj/
状态
测试
执行单元测试
python -m pytest -v tests/biomaj_tests.py
执行单元测试,但禁用需要网络访问的测试
NETWORK=0 python -m pytest -v tests/biomaj_tests.py
监控
InfluxDB(可选)可用于监控 BioMAJ。以下系列可用:
- biomaj.banks.quantity(银行数量)
- biomaj.production.size.total(所有生产目录的大小)
- biomaj.workflow.duration(工作流程持续时间)
- biomaj.production.size.latest(最新更新的大小)
- biomaj.bank.update.downloaded_files(下载的文件数量)
- biomaj.bank.update.new(跟踪更新)
警告 Influxdb 数据库必须创建,BioMAJ 不会创建数据库(请参阅https://docs.influxdb.org.cn/influxdb/v1.6/query_language/database_management/#create-database)
许可证
A-GPL v3+
备注
要删除 Elasticsearch 索引
curl -XDELETE 'http://localhost:9200/biomaj_test/'
致谢
特别感谢 Pasteur 研究所的 tuco 对其进行的密集测试和新的想法。感谢老 BioMAJ 团队所做的工作。
BioMAJ 由 IRISA 研究所开发。
3.1.24 更新文档 修复测试 移除对 python3-future 的依赖 3.1.23:使用 pytest 替代 nose 3.1.21:将 pymongo 冻结到 3.12.3(4.x 破坏)将已弃用的 isAlive() 改为 is_alive
3.1.20: 跟进#127,获取文件中的最后一个发布版本(重构和错误修复)3.1.19: 添加tgz存档支持将日志文件信息添加到生产信息中 #126 关于获取文件中最后一个发布版本的问题3.1.18: 仅支持Python 3If多个文件匹配release.file,则取最新的一个如果找不到邮件模板,则记录并使用默认模板3.1.17: 修复保存具有不同结构(如xxx/(FASTA)/(file.txt))的文件的回归问题,将其保存为FASTA/file.txt为--remove-all选项发送移除邮件 #119 添加支持带有模板和日志尾部/附件选项的自定义通知电子邮件New optional fields in global.properties (or per bank properties): mail.body.tail=0 mail.body.attach=9000000 mail.template.subject=file_path_to_subject.jinja2 mail.template.body=file_path_to_body.jinja2 可用的变量: 'log_file': 日志文件路径 'log_tail': 日志文件的最后几行 'bank': 银行名称 'release': 与操作相关的发布 'status': 操作状态(true/false) 'modified': 操作是否修改了银行(true/false) 'update': 操作是否是更新 'remove': 操作是否是删除3.1.16: 修复--from-task后处理过程中的状态检查 #118 将协议选项重命名为options添加更多调试日志3.1.15: #117 修复--post-process的不正确行为3.1.14: 添加修复选项3.1.13: 在日志中添加进程名称和状态 PR #116 更新以使用下载3.1.0 3.1.12: 在发布正则表达式匹配多个匹配项的情况下,尝试确定最新的一个 #115 正确使用save_as为发布文件名3.1.11: 增加一个日志级别 #110 允许使用ftps和directftps协议(需要biomaj-download 3.0.26和biomaj-core 3.0.19) #111 在执行错误的更新命令后锁定银行忽略发布文件中的UTF-8错误通过biomaj-plugins repo(https://github.com/genouest/biomaj-plugins)添加插件支持以从插件脚本中获取发布和要下载的文件列表。在全局和银行属性中添加对协议选项的支持(options.names=x,y options.x=val options.y=val)。选项可能被忽略或根据使用的协议以不同的方式使用。 3.1.10: 允许在重用以前发布的文件时使用硬链接3.1.9: 修复remote.files递归3.1.8: 修复保存包含子目录的文件时的解压缩3.1.7: 修复python3中的utf/ascii编码问题在解压缩失败的情况下,将所有压缩文件放回以避免重新下载3.1.6: 修复#100 如果biomaj无法连接到InfluxDB,则捕获错误并记录错误将历史记录添加到更新/删除操作中在删除银行检查期间文件删除错误的情况下添加日志在删除时检查锁定文件是否存在更新protobuf以与biomaj.download 3.0.18兼容
3.1.5: 修复#97 错误的离线目录检查
3.1.4: 修复#88 使用--remove-pending时在挂起的会话中找到'last_update_session'时取消设置在银行信息请求中添加格式在显示之前添加对一些生产字段的检查添加irods下载支持
3.1.3: 删除自动升级的post-install步骤,因为wheel包不支持
3.1.2: 修复#86 从README.md中删除特殊字符功能 #85 SchemaVersion自动添加新属性
3.1.1: 修复#80 使用--from-task
和--process
检查进程是否存在管理没有状态的老银行
3.1.0:
需要数据库升级
如果使用biomaj-watcher,则必须使用版本 >= 3.1.0 功能 #67,#66,#61 切换到微服务架构。在本地单体安装中仍然有效修复在未在配置中定义时的某些配置参数加载问题修复HTTP解析参数加载将download_or_copy更改为在最后一个生产版本中可用时复制文件而不是再次下载文件管理微服务的用户迁移功能 #74 添加influxdb统计信息功能 #65 在银行根目录中添加一个发布信息文件,其他服务可以使用它来了解可用的最新发布功能 #25 添加对rsync协议的实验性支持对微服务的下载添加速率限制将电子邮件大小限制为2Mb,日志文件可能被截断
3.0.20: 修复 #55:增加了对 https 和 directhttps 的支持。通过 remote.list 参数定义从本地文件下载的文件。修复可见性修改(错误删除了银行属性字段)。修复 #65:在更新后,在银行目录中添加发布文件。如果文件已下载并可用,则添加 md5 或 sha256 校验和检查。
3.0.19: 修复包中缺少 README.md 的问题。修复 #53:避免在待处理数据库中重复。
3.0.18: 添加迁移方法,在需要时更新模式。管理 HTTP 月份格式以支持文本格式(Jan, Feb, ...)和整数字符串格式(01, 02, ...)。新增可选银行属性 http.parse.file.date.format,以 Python 日期正则表达式格式从 HTTP 协议中提取日期(请参阅 https://tutorialspoint.org.cn/python/time_strptime.htm)。示例:%d-%b-%Y %H:%M
3.0.17: 修复 #47:使用 directhttp 协议时的 save_as 错误。修复 #45:当发布值包含点时,待处理发布错误。typo/pylint 修复。
3.0.16: 不要使用配置值,相信数据库值 #39。修复 #42:添加可选的 release.separator,以命名银行目录 bankname_release(默认为下划线)。
3.0.15: 修复 #37:从数据库中获取远程本地文件历史记录并将其放入缓存目录。特性 #38:添加可选的 keep.old.sessions 参数,以在数据库中保留所有会话,即使对于已删除的发布。特性 #28:添加可选的 release.format 参数以指定发布的日期格式。
3.0.14: 修复方法 set_owner。强制发布为字符串。修复 #32:在调用元过程时修复 --from-task 问题。修复 #34:在清理旧会话时从待处理中删除发布。在一些操作上添加日志记录。添加 --status-ko 选项以列出错误状态的银行。修复 #36:通过错误或未完成管理工作流程。
3.0.13: 修复下载期间线程锁定问题。在银行属性中添加新的可选属性:timeout.download。HTTP 协议修复(deepcopy 错误)。
3.0.12: 修复银行移除时的索引删除问题。修复在目录创建时目录的锁定错误,在离线目录中预先创建目录结构。修复 #26:银行中文件过多时的保存错误。
3.0.11: 修复会话管理中的预和 rm 进程。修复 #23:检查传递给 --stop-after/--start-after/--from-task 的工作流程步骤名称。修复 #24:在 Elasticsearch 中删除已弃用的 delete_by_query 方法。在基本目录上添加一些控制。
3.0.10: 将目录更改为 process.dir 以在子目录中查找进程。如果离线目录中找到所有文件,则在没有下载的情况下继续工作流程。移除银行依赖项(计算银行)的额外日志文件。修复当子银行未更新时的计算银行更新。修复 #15 当远程回滚到先前发布时。特性 #16:获取不下载文件的可能性(例如,对于计算银行)。在银行属性中将协议设置为 'none'。修复 --check 的一些协议。修复 directhttp 协议不支持 release.file。特性 #22:添加 localrelease 和 remoterelease 银行属性,以便在其他属性中使用远程发布作为表达式 => remote.dir = xx/yy/%(remoterelease)s/zz。特性 #17,#20:检测即使发布相同,远程修改也会发生。新参数 release.control(true,false)强制检查,即使远程发布(文件受控或日期)相同。修复 'multi' 协议。修复当远程.files 以 ^ 字符开头时的 "save_as" 正则表达式。
3.0.9: 修复线程同步问题:在下载期间,一些下载线程可能在主线程继续工作流程时仍然存活。修复:防止在下载期间使用 Ctrl-C。工作流程修复:如果工作流程的子任务失败,则失败主要任务。
3.0.8: 如果 Elasticsearch 不可用,则不测试索引。微调修复。添加 HTTP 代理支持。pylint 修复。在失败的情况下重新解压缩一次(#13)。
3.0.7: 重排代码,pep8 修复。在变量名称和 OrderedDict 上进行各种修复,以支持 Python < 2.7。合并配置文件,以便在银行属性文件中引用全局.properties 变量,格式为 %(xx)s。使用 ConfigParser 而不是将要弃用的 SafeConfigParser。
3.0.6: 添加选项 --remove-pending 以删除所有待处理会话和目录。添加进程环境变量 logdir 和 logfile。修复 PyCurl 旧版本中的 Unicode 问题。
3.0.5: 修复更新工作流程期间的移除工作流程,已删除发布是当前发布。修复 biomaj-cli 的 shebang 和 python 2/3 兼容性问题。
3.0.4: 更新代码以使其兼容 Python 3 使用 ldap3 库(纯 Python 且与 p2,3 兼容)代替 python-ldap 获取在下载文件时保存 ftp 和 http 文件的能力,而无需保留完整的目录结构:remote.files 可以包含组以保存无目录结构的文件,或仅部分目录,例如:remote.files = genomes/fasta/.*.gz => 在 offline 目录中保存文件,保留远程结构 offlinedir/genomes/fasta/;remote.files = genomes/fasta/(.*.gz) => 在 offline 目录 offlinedir/ 保存文件;remote.files = genomes/(fasta)/(.*.gz) => 在 offline 目录 offlinedir/fasta 保存文件。
项目详情
下载文件
下载适用于您平台文件的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。