acdh-oeaw / arche-ingest
一组ARCHE摄入脚本样本
1.4.7
2024-09-02 11:00 UTC
Requires
Requires (Dev)
README
从ARCHE提供的REST API在现实世界数据摄入的角度来看,相当低级。为了简化摄入过程,已经开发了arche-lib-ingest库。虽然它提供了一个方便的高级数据摄入API,但它仍然只是一个库,需要您编写自己的摄入脚本。
此存储库旨在缩小这一差距——它提供了一套数据摄入脚本(基于arche-lib-ingest),几乎不需要编程技能的人都可以使用。
提供的脚本
提供了两种脚本变体
- 控制台脚本变体,其中参数通过命令行传递。
此变体的优点是使用简单,尤其是在CI/CD工作流中。bin/arche-import-metadata
从RDF文件导入元数据bin/arche-import-binary
(重新)摄入单个资源的二进制内容(当文件名和/或位置更改时使用)bin/arche-delete-resource
删除指定的存储库资源(允许递归等)bin/arche-delete-triples
删除在ttl文件中指定的元数据三元组(但不删除存储库资源)bin/arche-update-redmine
更新描述数据整理/摄入过程的Redmine问题(请参阅README底部的专用部分)
- 模板变体,您可以通过编辑其内容调整执行参数和/或脚本的工作方式。
此变体的优点是它允许将调整后的脚本视为摄入过程的文档,并/或将其调整为您的特定需求。add_metadata_sample.php
添加在ttl文件中指定的元数据三元组,保留存储库资源的所有现有元数据delete_metadata_sample.php
删除在ttl文件中指定的元数据三元组(但不删除存储库资源)delete_resource_sample.php
删除指定的存储库资源(允许递归等)import_binary_sample.php
从磁盘导入二进制数据import_metadata_sample.php
从RDF文件导入元数据reimport_single_binary.php
重新摄入单个资源的二进制内容(当文件名和/或位置更改时使用)
安装和用法
运行环境
您还可以使用acdhch/arche-ingest
Docker镜像({pathToDirectoryWithFilesToIngest}
将在Docker容器内的/data
位置可用)
docker run \ --rm \ -ti \ --name arche-ingest \ -v {pathToDirectoryWithFilesToIngest}:/data \ acdhch/arche-ingest
控制台脚本变体
- 使用以下命令安装
composer require acdh-oeaw/arche-ingest
- 定期使用以下命令更新
composer update --no-dev
- 使用以下命令运行
vendor/bin/{scriptOfYourChoice} {parametersGoHere}
例如。vendor/bin/arche-import-metadata --concurrency 4 myRdf.ttl https://arche.acdh.oeaw.ac.at/api myLogin myPassword
- 要获取可用参数的列表,请运行
vendor/bin/{scriptOfYourChoice} --help
例如。vendor/bin/arche-import-metadata --help
- 要获取可用参数的列表,请运行
在GitHub Actions中运行
不要在工作流配置文件中存储您的ARCHE凭据。请使用存储库机密代替(请参阅下面的示例)。
您的工作流yaml配置片段可能如下所示
- name: ingestion dependencies run: | composer require acdh-oeaw/arche-ingest - name: ingest arche run: | vendor/bin/arche-import-metadata myRdfFile.ttl https://arche-curation.acdh-dev.oeaw.ac.at/api ${{secrets.ARCHE_LOGIN}} ${{secrets.ARCHE_PASSWORD}} vendor/bin/arche-update-redmine --token ${{ secrets.REDMINE_TOKEN }} https://redmine.acdh.oeaw.ac.at 1234 'Upload AIP to Curation Instance (Minerva)'
在ACDH集群上运行
首先,按照此处描述的方式获取arche-ingestion工作负载控制台
然后
- 运行
screen -S mySessionName
- 转到您的摄入目录
- 使用
{scriptName}
运行脚本,例如arche-import-metadata myRdf.ttl https://arche.acdh.oeaw.ac.at/api myLogin myPassword
- 如果脚本运行时间较长,您可以使用
CTRL+a
+d
然后exit
安全退出控制台。- 要返回脚本日志,请在
repo-ingestion@hephaistos
中重新进入脚本并运行screen -r mySessionName
- 要返回脚本日志,请在
模板变体
- 克隆此仓库。
- 运行
composer update --no-dev
- 调整您选择的脚本。
- 可用参数在脚本开头提供。
- 除非您认为自己是一名程序员并希望更改脚本的工作方式,否则不要调整以下
// NO CHANGES NEEDED BELOW THIS LINE
行。
- 使用以下方式运行脚本
php -f {scriptOfYourChoice}
- 您可以考虑从文件读取输入并/或将输出保存到日志文件,例如使用
(有关输入文件格式的提示,请参阅下面章节)php -f import_metadata_sample.php < inputData 2>&1 | tee logFile
- 您可以考虑从文件读取输入并/或将输出保存到日志文件,例如使用
长时间运行
如果您正在进行耗时操作,例如大量数据摄取,您可能希望以某种方式运行脚本,这样当您关闭计算机时,脚本不会停止。
您可以使用 nohup
或 screen
来实现这一点,例如:
- nohup - 以以下方式运行
# console script variant nohup vendor/bin/arche-import-metadata --concurrency 4 myRdf.ttl https://arche.acdh.oeaw.ac.at/api myLogin myPassword > logFile 2>&1 & # template variant nohup php -f import_metadata_sample.php < input > logFile 2>&1 &
- 如果您想以这种方式运行模板脚本变体,您必须准备输入数据文件。
它应该看起来如下
例如。{arche instance API URL} yes {login} {password}
https://arche-dev.acdh-dev.oeaw.ac.at yes myLogin myPassword
- 如果您想以这种方式运行模板脚本变体,您必须准备输入数据文件。
- screen
- 使用以下方式启动一个
screen
会话screen -S mySessionName
- 然后像往常一样运行您的命令
- 按
CTRL+a
然后按d
离开screen
会话。 - 您可以使用以下方式返回
screen
会话screen -r mySessionName
- 使用以下方式启动一个
报告错误
在 Redmine 问题 #17641 中创建一个子任务。
- 提供有关摄取脚本确切位置的详细信息(包括脚本文件本身)以及任何可能需要复制问题的其他信息。
- 将 Mateusz 和 Norbert 指定为观察者。
在 GitHub 工作流程中使用 arche-update-redmine
基本思想是以以下方式执行数据处理步骤
- 记下步骤名称,这样我们就可以在失败时读取它
- 执行步骤
- 调用 arche-update-redmine
并有一个单独的失败作业步骤,该步骤会调用 arche-update-redmine 并记录失败。
备注
- 作为良好实践,我们应该在 Redmine 问题备注中包含 GitHub 作业 URL。为此,我们设置了专用环境变量。
- 不言而喻,Redmine 访问凭证存储为存储库密钥。
- 您存储主要 Redmine 问题 ID 的方式无关紧要,因为它不是秘密。按照您想要的任何方式做(在这里我们使用环境变量将硬编码在工作流程中)
name: sample on: push: ~ jobs: dockerhub: runs-on: ubuntu-latest env: REDMINE_ID: 21085 steps: - uses: actions/checkout@v4 - name: init run: | composer require acdh-oeaw/arche-ingest echo "RUN_URL=$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID" >> $GITHUB_ENV - name: virus scan run: | echo 'STEP=Virus Scan' >> $GITHUB_ENV ...perform the virus scan... vendor/bin/arche-update-redmine --token ${{ secrets.REDMINE_TOKEN }} --append "$RUN_URL" $REDMINE_ID 'Virus scan' - name: repo-filechecker run: | echo 'STEP=Run repo-file-checker' >> $GITHUB_ENV ...run the repo-filechecker... vendor/bin/arche-update-redmine --token ${{ secrets.REDMINE_TOKEN }} --append "$RUN_URL" $REDMINE_ID 'Run repo-file-checker' - name: check3 run: | echo 'STEP=Upload AIP to Curation Instance (Minerva)' >> $GITHUB_ENV ...perform the ingestion... vendor/bin/arche-update-redmine --token ${{ secrets.REDMINE_TOKEN }} --append "$RUN_URL" $REDMINE_ID 'Upload AIP to Curation Instance (Minerva)' - name: on failure if: ${{ failure() }} run: | vendor/bin/arche-update-redmine --token ${{ secrets.REDMINE_TOKEN }} --append "$RUN_URL" --statusCode 1 $REDMINE_ID "$STEP"