CircleCIを利用していると、クレジット消費量を分析して、削減を検討することもあると思います。 Insightsダッシュボードでも閲覧できますが、「わざわざ見に行く」という動機が薄かったり、うっかり忘れることもありえます。
そこで、CircleCIで利用したおおよそのクレジットを把握するためのスクリプトを作成してみました。 本記事ではスクリプト作成のみですが、Lambdaで動かしてSlackに通知するなどをすることで、気づきを得る機会になればと思います。
- 昨日はたくさん動かしたから、まあ、増えるよね
- あれ? 昨日はそんなに動かしてないけど、そこそこ増えてるね。なんでだろう?
おすすめの方
- CircleCIのAPIを利用したい方
- CircleCIで利用したおおよそのクレジットを把握したい方
重要
公式ドキュメントに下記の記載があります。
- 取得できるデータは、リアルタイムのデータではない
- 最新情報が反映されるまで、最大24時間かかることがある
- リアルタイムの財務報告ツールではない
- 正式なクレジット利用量は、Planで確認すること
本記事では、あくまでも、おおよその値と傾向を把握することが目的です。 正式なクレジット利用量の把握や金額策定などには利用しないでください。
APIトークンを取得する
Personal API Tokensにアクセスして、APIトークンを取得します。取り扱いに注意してください。
CircleCIのinsightsを取得し、利用したクレジットを把握するスクリプトを作成する
次のAPIを利用します。
org-slug
は、vcs-slug/org-name
です。たとえば、下記です。
- github/your-org-name
- github/your-github-user-name
次のスクリプトでは、過去24時間のデータを取得しています。そして、クレジットの合計とリポジトリ毎のクレジットを表示します。
app.py
import json
import requests
API_TOKEN = "xxx"
CIECLECI_ENDPOINT = "circleci.com/api/v2"
ORG_SLUG = "vcs-slug/org-name"
def main():
summary = get_summary()
total_credits_used = summary["org_data"]["metrics"]["total_credits_used"]
print(f"total_credits_used: {total_credits_used}")
for item in sorted(
summary["org_project_data"],
key=lambda x: x["metrics"]["total_credits_used"],
reverse=True,
):
print("-----")
print(f" {item['project_name']}")
print(f" {item['metrics']['total_credits_used']}")
def get_summary() -> dict:
# https://circleci.com/docs/api/v2/index.html#operation/getOrgSummaryData
headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Circle-Token": API_TOKEN,
}
resp = requests.get(
f"https://{CIECLECI_ENDPOINT}/insights/{ORG_SLUG}/summary?reporting-window=last-24-hours",
headers=headers,
)
return resp.json()
if __name__ == "__main__":
main()
スクリプトを実行する
次のように表示されます。数字は適当です。
total_credits_used: 1234
-----
repository1
1000
-----
repository2
200
-----
repository3
30
-----
repository4
4
-----
repository5
0
さいごに
CircleCIで利用したおおよそのクレジットを把握するためのスクリプトを作成してみました。 さらに便利に利用する場合は、Lambdaで動かしてSlackに通知するなどの方法がありますね。