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}')

コメント