Ця сторінка ще не перекладена українською. Показано англійську версію. Переглянути англійською

Пакетна обробка кількох форматів

Масова обробка кількох CAD-форматів з паралельною трансляцією.

Огляд процесу

Каталог CAD
*.iam
*.ipt
*.stp
*.igs
*.sldprt
Пошук файлів
Сканування каталогу
Фільтрація підтримуваних
Паралельне завантаження
Upload Worker 1
Upload Worker 2
Upload Worker N
Паралельна трансляція
Translate Job 1
Translate Job 2
Translate Job N
Відстеження статусу
Моніторинг прогресу
Збір результатів
Результат
Звіт про статус
Журнал помилок
Вхід→Пошук→Завантаження→Трансляція→Моніторинг→Вихід

Підхід через CLI

Крок 1: Пошук та завантаження файлів

# Upload all supported CAD files
for ext in iam ipt stp step igs iges sldprt sldasm; do
  for file in ./cad-files/*.$ext; do
    [ -f "$file" ] && raps object upload cad-library "$file"
  done
done

Крок 2: Паралельна трансляція

# Start all translations in parallel
raps object list cad-library --output json | jq -r '.[].key' | while read key; do
  URN=$(raps object urn cad-library "$key" --output plain)
  echo "Starting: $key"
  raps translate start "$URN" --format svf2 &
done

# Wait for all background jobs
wait
echo "All translations started"

Крок 3: Моніторинг статусу

# Check status of all translations
echo "Translation Status:"
echo "==================="

raps object list cad-library --output json | jq -r '.[].key' | while read key; do
  URN=$(raps object urn cad-library "$key" --output plain)
  STATUS=$(raps translate manifest "$URN" 2>/dev/null | jq -r '.status // "pending"')
  PROGRESS=$(raps translate manifest "$URN" 2>/dev/null | jq -r '.progress // "0"')

  case $STATUS in
    success)  echo "✓ $key" ;;
    failed)   echo "✗ $key (FAILED)" ;;
    *)        echo "⋯ $key ($STATUS $PROGRESS%)" ;;
  esac
done

Крок 4: Генерація звіту

# Create batch processing report
echo "# Batch Translation Report" > batch-report.md
echo "Date: $(date)" >> batch-report.md
echo "" >> batch-report.md

SUCCESS=0
FAILED=0
PENDING=0

raps object list cad-library --output json | jq -r '.[].key' | while read key; do
  URN=$(raps object urn cad-library "$key" --output plain)
  STATUS=$(raps translate manifest "$URN" 2>/dev/null | jq -r '.status // "pending"')

  echo "| $key | $STATUS |" >> batch-report.md
done

echo "" >> batch-report.md
echo "Summary: $SUCCESS success, $FAILED failed, $PENDING pending" >> batch-report.md

CI/CD-конвеєр

# .github/workflows/batch-processing.yml
name: Batch CAD Processing

on:
  push:
    paths:
      - 'cad-files/**'
  workflow_dispatch:

env:
  BUCKET: batch-cad-${{ github.run_id }}

jobs:
  process-batch:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Install RAPS
        run: cargo install raps

      - name: Create bucket
        env:
          APS_CLIENT_ID: ${{ secrets.APS_CLIENT_ID }}
          APS_CLIENT_SECRET: ${{ secrets.APS_CLIENT_SECRET }}
        run: |
          raps bucket create --key "$BUCKET" --policy transient --region US

      - name: Upload all CAD files
        env:
          APS_CLIENT_ID: ${{ secrets.APS_CLIENT_ID }}
          APS_CLIENT_SECRET: ${{ secrets.APS_CLIENT_SECRET }}
        run: |
          find cad-files -type f \( -name "*.iam" -o -name "*.ipt" -o -name "*.stp" -o -name "*.igs" \) | while read file; do
            echo "Uploading: $file"
            raps object upload "$BUCKET" "$file" --parallel
          done

      - name: Start all translations
        env:
          APS_CLIENT_ID: ${{ secrets.APS_CLIENT_ID }}
          APS_CLIENT_SECRET: ${{ secrets.APS_CLIENT_SECRET }}
        run: |
          raps object list "$BUCKET" --output json | jq -r '.[].key' | while read key; do
            URN=$(raps object urn "$BUCKET" "$key" --output plain)
            raps translate start "$URN" --format svf2 &
          done
          wait

      - name: Wait for translations
        env:
          APS_CLIENT_ID: ${{ secrets.APS_CLIENT_ID }}
          APS_CLIENT_SECRET: ${{ secrets.APS_CLIENT_SECRET }}
        run: |
          MAX_WAIT=1800  # 30 minutes
          ELAPSED=0

          while [ $ELAPSED -lt $MAX_WAIT ]; do
            PENDING=$(raps object list "$BUCKET" --output json | jq -r '.[].key' | while read key; do
              URN=$(raps object urn "$BUCKET" "$key" --output plain)
              STATUS=$(raps translate manifest "$URN" 2>/dev/null | jq -r '.status // "pending"')
              [ "$STATUS" != "success" ] && [ "$STATUS" != "failed" ] && echo "pending"
            done | wc -l)

            [ "$PENDING" -eq 0 ] && break

            echo "Waiting... $PENDING translations in progress"
            sleep 30
            ELAPSED=$((ELAPSED + 30))
          done

      - name: Generate report
        env:
          APS_CLIENT_ID: ${{ secrets.APS_CLIENT_ID }}
          APS_CLIENT_SECRET: ${{ secrets.APS_CLIENT_SECRET }}
        run: |
          echo "# Batch Processing Report" > report.md
          echo "" >> report.md
          echo "| File | Status |" >> report.md
          echo "|------|--------|" >> report.md

          SUCCESS=0
          FAILED=0

          raps object list "$BUCKET" --output json | jq -r '.[].key' | while read key; do
            URN=$(raps object urn "$BUCKET" "$key" --output plain)
            STATUS=$(raps translate manifest "$URN" 2>/dev/null | jq -r '.status // "unknown"')
            echo "| $key | $STATUS |" >> report.md
          done

      - name: Upload report
        uses: actions/upload-artifact@v4
        with:
          name: batch-report
          path: report.md

Потік конвеєра

Тригер
Push до cad-files/
Налаштування
Створення тимчасового бакета
Паралельне завантаження
Пошук CAD-файлів
Завантаження всіх файлів
Паралельна трансляція
Запуск усіх завдань
Очікування завершення
Звіт
Генерація звіту про статус
Завантаження артефакту

Інтеграція з MCP

Пакетна обробка каталогу

User: "Process all CAD files in the supplier-parts folder"
Користувач
AI-асистент
RAPS MCP
APS Cloud
Користувач
Обробити теку supplier-parts
AI
Сканування каталогу на CAD-файли
цикл: Для кожного файлу
AI
aps_object_upload(bucket, file)
MCP
Завантаження
AI
Завантажено 15 файлів
цикл: Запуск трансляцій
AI
aps_translate_start(urn)
MCP
Запуск завдання
AI
Усі трансляції запущено
цикл: Моніторинг
AI
aps_translate_manifest(urn)
AI
Підсумковий звіт

Відповідь AI:

Обробка теки supplier-parts…

Фаза завантаження: Завантажено 15 файлів (загалом 245 МБ)

Фаза трансляції:

ФайлСтатусЧас
bracket-a.stpЗавершено45 с
bracket-b.stpЗавершено42 с
housing.iamЗавершено2 хв 15 с
shaft.iptЗавершено28 с
………

Підсумок: 15/15 успішно, 0 невдало

Перевірка статусу пакетної обробки

User: "How many files are still processing in the batch?"

Відповідь AI:

Статус пакетної обробки:

  • Завершено: 12 файлів
  • В обробці: 3 файли (housing.iam на 75%, gearbox.iam на 45%, frame.sldasm на 30%)
  • Невдало: 0 файлів

Орієнтовний час залишку: ~3 хвилини


Поради з оптимізації

Паралельне завантаження з обмеженням паралелізму

# Control concurrency to avoid rate limits
MAX_CONCURRENT=5

find ./cad-files -type f \( -name "*.stp" -o -name "*.iam" \) | \
  xargs -P $MAX_CONCURRENT -I {} sh -c '
    raps object upload cad-library "{}"
    echo "Uploaded: {}"
  '

Пріоритезація за розміром файлу

# Process smaller files first for quick wins
find ./cad-files -type f -name "*.stp" -printf "%s %p\n" | \
  sort -n | cut -d' ' -f2 | while read file; do
    raps object upload cad-library "$file"
  done

Пропуск вже трансльованих

# Check if already translated before starting
for key in $(raps object list cad-library --output json | jq -r '.[].key'); do
  URN=$(raps object urn cad-library "$key" --output plain)
  STATUS=$(raps translate manifest "$URN" 2>/dev/null | jq -r '.status // ""')

  if [ "$STATUS" != "success" ]; then
    echo "Translating: $key"
    raps translate start "$URN" --format svf2
  else
    echo "Skipping (already done): $key"
  fi
done

Пов’язане