ビルド履歴のAPI
ビルドに関するデータをJSONファイルで受け取れます。これにより、このデータをサードパーティのツールを使用したダッシュボードへの表示、参照や分析のための保存が可能です。
データは、時間、Build Group、その他のフィールドでフィルタリングできます。この API にはAPI Key が必要です。
Incredibuildは過去200,000回のビルドのみをデータベースに保存しています。
リクエスト
エンドポイント
GET https://<coordinator IP>:8000/api/builds?coordinatorId=<coordinator ID>&version=<API version>&<other filters>
ここでのバージョン とは Incredibuild API のバージョンです。Build Data APIについては、現在バージョン1.3.0のみがサポートされています。
ヘッダー
リクエストには、client-api-key というキーを持つヘッダーと、API キー の値を文字列として含める必要があります。
エンドポイントフィルター:
リクエスト エンドポイントに以下のフィルターを追加して、結果を制限できます。
フィールド | 値 | 値 |
---|---|---|
buildStartTimeFrom | この時間より以前に開始したビルドのみを含める | ISOフォーマット。例:2022-09-28T16:01:29.000 |
buildEndTimeTo | この時間より以前に終了したビルドのみを含める | ISOフォーマット。例:2022-09-28T16:01:29.000 |
initiatorID | 特定のイニシエータによって開始したビルドのみを含む。 | string |
buildGroup | 特定のBuild Groupのイニシエータによって実行されたビルドのみを含める | string |
buildTitle | 指定されたタイトルのビルドのみを含める | string |
buildStatus |
特定のステータスに一致するビルドのみを含める |
{a,b,c,d} |
buildDurationFrom |
少なくともこの長さのビルドのみを含める |
整数(秒) |
buildDurationTo |
この値より短いビルドのみを含める |
整数(秒) |
buildType |
特定のビルドタイプに一致するビルドのみを含める |
(ビルド、クリーン、リビルド、不明) |
コマンドの例:
-
すべてのビルドを返す。
GET https://10.132.15.166:8000/api/builds?coordinatorId=12345&version=1.3.0
-
特定の時間以降に開始したビルドを返す。
GET https://10.132.15.166:8000/api/builds?coordinatorId=12345&version=1.3.0&buildStartTimeFrom=2023-08-17T16:01:29.000Z
-
デフォルトのBuild Groupから実行されたビルドを返す。
GET https://10.132.15.166:8000/api/builds?coordinatorId=12345&version=1.3.0&buildGroup=Default
以下の例が示す通り、結果が300以上のビルドを返した場合、totalCountは300以上ですが、billsCountの値は300であることが分かります。次の300ビルドを表示するには、nextPageToken の値をコピーし、次のように別のリクエストで使用します。
GET https://10.132.15.166:8000/api/builds?coordinatorId=12345&version=1.3.0&nextPageToken="< 以下のJSONの値>"
応答
応答は、最大300ビルドを含むJSONファイルです。
フィールド | 説明 |
---|---|
totalCount | リクエストに一致したビルドの総数 |
buildsCount | このJSONに含まれるビルド数。この数値がtotalCount以下の場合は、ビルドが300以上あり、それらをすべて1つのJSONに含めることができないという事を意味します。次の300ビルドを表示するには、「nextPageToken」の値をコピーし、別のリクエストのパラメータとして使用します。例: GET https://10.132.15.166:8000/api/builds?coordinatorId=12345&version=1.3.0&nextPageToken="NjAw" |
nextPageToken | buildsCount を参照してください |
ビルド |
ファイルに含まれるビルドの配列 |
coordinatorId |
このビルドに関連するコーディネーターのID |
buildId |
ビルドのID |
initiatorId |
ビルドを開始したエージェントのID |
startTime |
ビルドが開始した時間 |
endTime |
ビルドが終了した時間 |
Duration |
ビルドの長さ(秒) |
buildCaption |
このビルドを説明するために追加したメタデータ(オプション) |
buildStatus |
ビルド完了時のステータス |
ヘルパー |
このビルドに参加したヘルパーのリスト |
totalWorkingHelpers |
このビルドをアシストした一意のヘルパー総数 |
maxInitiatorCores |
このビルドの実行に使用される イニシエータ コアの最大数 |
avgInitiatorCores |
このビルドの実行に使用される イニシエータ コアの平均数 |
maxConcurrentWorkingHelpers |
このビルド中に一度に動作する一意のヘルパーの最大数 |
avgConcurrentWorkingHelpers |
このビルド中、一度に動作する一意のヘルパーの平均数 |
avgBusyHelperCores |
このビルド中、一度に動作したヘルパーコアの平均数 |
maxBusyHelperCores |
このビルド中、一度に動作したヘルパーコアの最大数 |
avgBusyCloudHelperCores |
このビルド中、一度に動作したクラウドヘルパーコアの平均数 |
maxBusyCloudHelperCores |
このビルド中、一度に動作するクラウドヘルパーコアの最大数 |
maxNeededHelperCores |
要求されたヘルパーコアの最大数 |
avgNeededHelperCores |
要求されたヘルパーコアの平均数 |
numberOfLocalTasks |
このビルドに対して イニシエータ 上で実行されたタスクの総数 |
numberOfRemoteTasks |
リモートで実行されたタスクの総数 |
numberOfCloudTasks |
クラウドマシン上でリモート実行されたタスクの総数 |
remoteCoreTime |
リモート(物理およびクラウド)でのタスク実行に使用された時間の合計(秒) |
coreLimit |
ビルドごとに許可される同時ヘルパーコアの最大数の設定 |
createdAt |
この応答を生成したAPIコールの日時。 |
フィールド | 説明 |
応答例
次の例は、このJSONに含まれる最初のビルドを表示します。
{
"totalCount":400
"buildsCount":300
"nextPageToken":"NjAw"
"builds": [
{
"coordinatorId": "c407c0b4-b257-490a-91da-70b7bb5f0c8f",
"buildId": "{0312b602-8d53-4443-afe5-2bd9f00c33d7}",
"initiatorId": "64b4d714-fcde-4768-82ac-cdbdfbfa5343",
"initiatorName": "Initiator#313",
"startTime": "2023-08-18T20:05:42.708Z",
"endTime": "2023-08-18T22:41:27.097Z",
"duration": 9344389,
"buildGroup": "Build Group 17",
"buildCaption": "Build Title 5",
"buildStatus": "Failure",
"buildType": "Rebuild",
"helpers": [
"helper0",
"helper1",
"helper2",
"helper3",
"helper4",
"helper5",
"helper6",
"helper7",
"helper8",
"helper9",
"helper10",
"helper11",
"helper12",
"helper13",
"helper14",
"helper15",
"helper16",
"helper17",
"helper18",
"helper19",
"helper20"
],
"totalWorkingHelpers": 9,
"maxInitiatorCores": 48,
"avgInitiatorCores": 94,
"maxConcurrentWorkingHelpers": 97,
"avgConcurrentWorkingHelpers": 91,
"avgConcurrentBusyHelpers": 1,
"maxConcurrentBusyHelpers": 30,
"avgConcurrentBusyCloudHelpers": 50,
"maxConcurrentBusyCloudHelpers": 59,
"maxNeededHelperCores": 29,
"avgNeededHelperCores": 84,
"numberOfLocalTasks": 36,
"numberOfRemoteTasks": 83,
"numberOfCloudTasks": 94,
"remoteCoreTime": 78,
"coreLimit": 11,
"createdAt": "2023-08-20T07:27:30.425Z"
}]
データからより多くのビルドを引き出す
ビルド履歴をダウンロード完了後、選択したデータベースでビルド履歴にアクセスできます。これにより、データをクエリし、さらに詳細情報を閲覧できます。以下にクエリの例をあげます。
select initiator_id, count(distinct build_id) as builds from builds b group by initiator_id
select build_id , total_working_helpers from builds b
select date(start_time) as date, sum(remote_core_time)/60000 as total_remote_minutes
from builds b
group by 1
order by 1
select date(start_time) as date, count(distinct initiator_id) as unique_initiators
from builds b
group by 1
order by 1
WITH RECURSIVE split_cte (start_time ,build_id , helpers , rest) AS (
SELECT
start_time,
build_id ,
SUBSTR(SUBSTRING(helpers,2,LENGTH(helpers)-1) , 1, INSTR(helpers, ',')-2),
SUBSTR(helpers , INSTR(helpers, ',')+1)
FROM builds
WHERE total_working_helpers > 1
UNION ALL
SELECT
start_time,
build_id ,
SUBSTR(rest, 1, INSTR(rest, ',')-1),
SUBSTR(rest, INSTR(rest, ',')+1)
FROM split_cte
WHERE INSTR(rest, ',') > 0
UNION ALL
SELECT
start_time,
build_id ,
substring(rest,1,LENGTH(rest)-1),
NULL
FROM split_cte
WHERE INSTR(rest, ',') = 0
)
-- Select the split values
select date(start_time) as date, count(distinct helpers)
from
(SELECT start_time,build_id, helpers
FROM split_cte
UNION ALL
SELECT start_time,build_id, helpers
FROM split_cte
WHERE rest IS NOT NULL
union all
select start_time,build_id,SUBSTRING(helpers,2,LENGTH(helpers)-2)
from builds
where total_working_helpers=1)
group by date(start_time)
order by 1
SELECT date(start_time) as date,count(build_id) as builds from builds
where build_status = 'SystemErrorOrUserInterrupt'
group by date(start_time)
select build_group, date(start_time) as date, count(build_id)
from builds b
group by build_group, date(start_time)
order by 1,2
select build_group , count(distinct initiator_id) as unique_initiators
from builds b
group by 1
WITH RECURSIVE split_cte (build_group ,build_id , helpers , rest) AS (
SELECT
build_group ,
build_id ,
SUBSTR(SUBSTRING(helpers,2,LENGTH(helpers)-1) , 1, INSTR(helpers, ',')-2),
SUBSTR(helpers , INSTR(helpers, ',')+1)
FROM builds
WHERE total_working_helpers > 1
UNION ALL
SELECT
build_group,
build_id ,
SUBSTR(rest, 1, INSTR(rest, ',')-1),
SUBSTR(rest, INSTR(rest, ',')+1)
FROM split_cte
WHERE INSTR(rest, ',') > 0
UNION ALL
SELECT
build_group,
build_id ,
substring(rest,1,LENGTH(rest)-1),
NULL
FROM split_cte
WHERE INSTR(rest, ',') = 0
)
-- Select the split values
select build_group, count(distinct helpers)
from
(SELECT build_group,build_id, helpers
FROM split_cte
UNION ALL
SELECT build_group,build_id, helpers
FROM split_cte
WHERE rest IS NOT NULL
union all
select build_group,build_id,SUBSTRING(helpers,2,LENGTH(helpers)-2)
from builds
where total_working_helpers=1)
group by build_group
WITH RECURSIVE split_cte (start_time ,build_id , helper , rest) AS (
SELECT
start_time,
build_id ,
SUBSTR(SUBSTRING(helpers,2,LENGTH(helpers)-1) , 1, INSTR(helpers, ',')-2),
SUBSTR(helpers , INSTR(helpers, ',')+1)
FROM builds
WHERE total_working_helpers > 1
UNION ALL
SELECT
start_time,
build_id ,
SUBSTR(rest, 1, INSTR(rest, ',')-1),
SUBSTR(rest, INSTR(rest, ',')+1)
FROM split_cte
WHERE INSTR(rest, ',') > 0
UNION ALL
SELECT
start_time,
build_id ,
substring(rest,1,LENGTH(rest)-1),
NULL
FROM split_cte
WHERE INSTR(rest, ',') = 0
)
-- Select the split values
select date(start_time) as date, helper, count(distinct build_id) as builds
from
(SELECT start_time,build_id, helper
FROM split_cte
UNION ALL
SELECT start_time,build_id, helper
FROM split_cte
WHERE rest IS NOT NULL
union all
select start_time,build_id,SUBSTRING(helpers,2,LENGTH(helpers)-2)
from builds
where total_working_helpers=1)
group by date(start_time),helper
order by 1, 3 desc
select initiator_id ,count(distinct initiator_id) as initiators
from builds b
group by 1
with recursive builds_active_seconds (date,build_id,start_timestamp, sec, end_timestamp) as (
select date(start_time),build_id ,min(datetime(start_time)),min(datetime(start_time)),max(datetime(end_time))
from builds b
group by date(start_time),2
union all
select date,build_id ,start_timestamp,datetime(sec,'+1 second'),end_timestamp
from builds_active_seconds
where sec<end_timestamp
)
select date,count(distinct sec)/60 as grid_active_minutes
from builds_active_seconds
group by 1
SELECT distinct date(start_time) as date,build_status,
count(build_id) over (partition by date(start_time),build_status)*1.00/count(build_id) over (partition by (date(start_time))) as percentage_of_daily_builds
from builds b
order by 1,2
with recursive builds_active_seconds (date,build_id,start_timestamp, sec, end_timestamp) as (
select date(start_time),build_id ,min(datetime(start_time)),min(datetime(start_time)),max(datetime(end_time))
from builds b
group by date(start_time),2
union all
select date,build_id ,start_timestamp,datetime(sec,'+1 second'),end_timestamp
from builds_active_seconds
where sec<end_timestamp
),
concurrent_build_count as (select date,sec,count(build_id) as concurrent_builds
from builds_active_seconds
group by 1,2)
select date,max(concurrent_builds) as max_concurrent_builds
from concurrent_build_count
group by 1