nexusコンポーネントカウントスクリプト

NexusはUIからだと集計機能が無く、Nexusが提供しているAPIをたたくしかない。

スクリプト例を残す。

コンポーネント数カウント

指定のリポジトリに登録されているコンポーネント数をカウントする。

nexus_count.py

import requests

NEXUS_URL = 'https://<NEXUS_HOST>/nexus'
USER = '<USER_NAME>'
PASS = '<PASSWORD>'
REPO = '<specificationX>'

total = 0
url = f'{NEXUS_URL}/service/rest/v1/components?repository={REPO}'
token = None
count = 0

while True:
    resp = requests.get(url, auth=(USER, PASS))
    data = resp.json()
    items = data.get('items', [])
    total += len(items)
    count += 1
    print(f'進捗:{total}件取得({count}ページ目)')

    token = data.get('continuationToken')

    # ページネーション設定
    if not token:
        break

    url = f'{NEXUS_URL}/service/rest/v1/components?repository={REPO}&continuationToken={token}'

print(f'コンポーネント総数:{total}')

# ページネーション
# Nexusはサーバー負荷を抑えるために1回のリクエストで取得できるレコードの件数を制限している。
# デフォルトは100件で、100件取得後にまだレコードがある場合は、continuationTokenの値が設定される。
# continuationTokenの値を次に送るリクエストに含めることで、続きから取得を再開できる。
# ページネーション設定のデフォルト(100件)の変更は、Nexusサーバー上の設定ファイルを直接編集すれば可能かもしれない。

パス指定バージョン

さらに特定のパスを含むものだけをカウントする場合。

nexus_path_count.py

import requests

NEXUS_URL = 'https://<NEXUS_HOST>/nexus'
USER = '<USER_NAME>'
PASS = '<PASSWORD>'
REPO = '<specificationX>'
FOLDER = 'xxx/yyy/'  # このパスが含まれていればカウント

total = 0
url = f'{NEXUS_URL}/service/rest/v1/components?repository={REPO}'
count = 0
auth = (USER, PASS)

while url:
    resp = requests.get(url, auth=auth)
    data = resp.json()

    for comp in data['items']:
        for asset in comp.get('assets', []):
            path = asset.get('path')
            if FOLDER in path:
                total += 1
                print(f'{total}件目: {asset.get("path")}')

    # debug用。削除してもOK
    token = data.get('continuationToken')
    if token:
        url = f'{NEXUS_URL}/service/rest/v1/components?repository={REPO}&continuationToken={token}'
    else:
        url = None

print(f'ファイル総数:{total}')

コメント

タイトルとURLをコピーしました