acdh-oeaw/arche-ingest

一组ARCHE摄入脚本样本

1.4.7 2024-09-02 11:00 UTC

This package is auto-updated.

Last update: 2024-09-20 11:04:07 UTC


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重新摄入单个资源的二进制内容(当文件名和/或位置更改时使用)

安装和用法

运行环境

您需要PHPComposer

您还可以使用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
      
      (有关输入文件格式的提示,请参阅下面章节)

长时间运行

如果您正在进行耗时操作,例如大量数据摄取,您可能希望以某种方式运行脚本,这样当您关闭计算机时,脚本不会停止。

您可以使用 nohupscreen 来实现这一点,例如:

  • 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"