{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## License\n", "\n", "Copyright 2020 Google LLC\n", "\n", "Licensed under the the Apache License v2.0 with LLVM Exceptions (the \"License\");\n", "you may not use this file except in compliance with the License.\n", "You may obtain a copy of the License at\n", "\n", "https://llvm.org/LICENSE.txt\n", "\n", "Unless required by applicable law or agreed to in writing, software\n", "distributed under the License is distributed on an \"AS IS\" BASIS,\n", "WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", "See the License for the specific language governing permissions and\n", "limitations under the License." ] }, { "cell_type": "code", "execution_count": 115, "metadata": {}, "outputs": [], "source": [ "import requests\n", "import os\n", "import logging\n", "import argparse\n", "import json\n", "import pandas as pd\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "cache_file = \"cache.json\"\n", "token = f'Bearer {os.getenv(\"BUILDKITE_API_TOKEN\")}'\n", "builds = []" ] }, { "cell_type": "code", "execution_count": 165, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "loaded 9938 entries\n" ] } ], "source": [ "if os.path.exists(cache_file):\n", " with open(cache_file) as f:\n", " builds = json.load(f)\n", " print(f'loaded {len(builds)} entries') " ] }, { "cell_type": "code", "execution_count": 170, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "loading page 1\n", "https://buildkite.com/llvm-project/premerge-checks/builds/4227 is running skipping\n", "https://buildkite.com/llvm-project/diff-checks/builds/4974 is running skipping\n", "https://buildkite.com/llvm-project/premerge-checks/builds/4226 is running skipping\n", "https://buildkite.com/llvm-project/diff-checks/builds/4972 is running skipping\n", "https://buildkite.com/llvm-project/premerge-checks/builds/4225 is running skipping\n", "https://buildkite.com/llvm-project/diff-checks/builds/4971 is running skipping\n", "https://buildkite.com/llvm-project/premerge-checks/builds/4224 is running skipping\n", "https://buildkite.com/llvm-project/diff-checks/builds/4970 is running skipping\n", "https://buildkite.com/llvm-project/premerge-checks/builds/4223 is running skipping\n", "https://buildkite.com/llvm-project/premerge-checks/builds/4222 is running skipping\n", "https://buildkite.com/llvm-project/diff-checks/builds/4969 is running skipping\n", "https://buildkite.com/llvm-project/diff-checks/builds/4968 is running skipping\n", "https://buildkite.com/llvm-project/premerge-checks/builds/4221 is running skipping\n", "https://buildkite.com/llvm-project/diff-checks/builds/4967 is running skipping\n", "https://buildkite.com/llvm-project/llvm-master-build/builds/320 is running skipping\n", "https://buildkite.com/llvm-project/premerge-checks/builds/4220 is running skipping\n", "https://buildkite.com/llvm-project/diff-checks/builds/4963 is running skipping\n", "loading page 2\n", "loading page 3\n", "found existing job fd1b3754-6375-4d58-8c83-8a66b0c5b5fa\n", "10294 jobs in total\n", "saved 10294 entries\n" ] } ], "source": [ "# load new jobs from Buildkite API\n", "if True:\n", " existing = set()\n", " for j in builds:\n", " existing.add(j['id'])\n", "\n", " # uncomment to reset\n", "# builds = []\n", "# existing = set()\n", " page = 1\n", " stop = False\n", " while not stop:\n", " print('loading page', page)\n", " re = requests.get('https://api.buildkite.com/v2/organizations/llvm-project/builds',\n", " params={'page': page},\n", " headers={'Authorization': token})\n", " if re.status_code != 200:\n", " print('response status', re.status_code, re)\n", " break\n", " x = re.json()\n", " if x == []:\n", " print('empty response')\n", " break\n", " for j in x:\n", " if j['id'] in existing:\n", " print('found existing job', j['id'])\n", " stop = True\n", " break\n", " # TODO: skip running jobs \n", " if (j['state'] == 'running') or (j['state'] == 'scheduled'):\n", " print(j['web_url'], 'is', j['state'], 'skipping')\n", " continue\n", " builds.append(j)\n", " page += 1\n", " print(len(builds), 'jobs in total') \n", " with open(cache_file, 'w') as f:\n", " json.dump(builds, f)\n", " print(f'saved {len(builds)} entries')" ] }, { "cell_type": "code", "execution_count": 171, "metadata": {}, "outputs": [], "source": [ "d = {\n", " 'id': [],\n", " 'number': [],\n", " 'pipeline': [],\n", "}\n", "\n", "jobs = {\n", " 'pipeline': [],\n", " 'name': [],\n", " 'step_key': [],\n", " 'state': [],\n", " 'exit_status': [],\n", " 'agent_id': [],\n", " 'agent_name': [],\n", " 'runnable_at': [],\n", " 'started_at': [],\n", " 'wait_duration': [],\n", " 'finished_at': [],\n", " 'run_duration': [],\n", "}\n", "\n", "sec = np.timedelta64(1, 's')\n", "for b in builds:\n", " d['id'].append(b['id'])\n", " d['number'].append(b['number'])\n", " d['pipeline'].append(b['pipeline']['slug'])\n", " for x in b['jobs']:\n", " if x['state'] in ['waiting_failed', 'canceled', 'skipped', 'broken']:\n", " continue\n", " try:\n", " jobs['pipeline'].append(b['pipeline']['slug'])\n", " jobs['name'].append(x['name'])\n", " jobs['step_key'].append(x['step_key'] if 'step_key' in x else '')\n", " jobs['state'].append(x['state'] )\n", " jobs['exit_status'].append(x['exit_status'] if 'exit_status' in x else -1)\n", " jobs['agent_id'].append(x['agent']['id'] if 'agent' in x else '')\n", " jobs['agent_name'].append(x['agent']['name'] if 'agent' in x else '')\n", " runnable = np.datetime64(x['runnable_at'].replace('Z', ''))\n", " started = np.datetime64(x['started_at'].replace('Z', ''))\n", " finished = np.datetime64(x['finished_at'].replace('Z', ''))\n", " jobs['runnable_at'].append(runnable)\n", " jobs['started_at'].append(started)\n", " jobs['wait_duration'].append((started - runnable) / sec)\n", " jobs['finished_at'].append(finished)\n", " jobs['run_duration'].append((finished - started) / sec)\n", " except Exception as e:\n", " print(x)\n", " raise e \n", "jobs = pd.DataFrame(jobs)" ] }, { "cell_type": "code", "execution_count": 122, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array(['premerge-checks', 'diff-checks', 'llvm-master-build',\n", " 'cleanup-branches', 'llvm-releases'], dtype=object)" ] }, "execution_count": 122, "metadata": {}, "output_type": "execute_result" } ], "source": [ "jobs.pipeline.unique()" ] }, { "cell_type": "code", "execution_count": 108, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", " | pipeline | \n", "name | \n", "step_key | \n", "state | \n", "exit_status | \n", "agent_id | \n", "agent_name | \n", "runnable_at | \n", "started_at | \n", "wait_duration | \n", "finished_at | \n", "run_duration | \n", "
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | \n", "premerge-checks | \n", ":seedling: setup | \n", "None | \n", "passed | \n", "0 | \n", "5725b783-8dbd-4f2a-868b-43672fda1517 | \n", "premerge-debian-79cddc6ddb-xcdj8-2 | \n", "2020-07-16 12:50:04 | \n", "2020-07-16 12:50:08.673 | \n", "4.673 | \n", "2020-07-16 12:50:25.259 | \n", "16.586 | \n", "
1 | \n", "premerge-checks | \n", ":linux: build and test linux | \n", "linux | \n", "failed | \n", "-1 | \n", "5725b783-8dbd-4f2a-868b-43672fda1517 | \n", "premerge-debian-79cddc6ddb-xcdj8-2 | \n", "2020-07-16 12:50:25 | \n", "2020-07-16 12:50:28.668 | \n", "3.668 | \n", "2020-07-16 12:59:19.455 | \n", "530.787 | \n", "
2 | \n", "premerge-checks | \n", ":windows: build and test windows | \n", "windows | \n", "passed | \n", "0 | \n", "f4f2789e-50aa-4dfb-88e9-267df8227508 | \n", "w64 | \n", "2020-07-16 12:50:25 | \n", "2020-07-16 12:50:29.645 | \n", "4.645 | \n", "2020-07-16 13:04:03.301 | \n", "813.656 | \n", "
3 | \n", "premerge-checks | \n", ":spiral_note_pad: report | \n", "None | \n", "passed | \n", "0 | \n", "152a7c38-8e6c-438b-8123-fafb92ff2afd | \n", "premerge-debian-79cddc6ddb-snd9j-2 | \n", "2020-07-16 13:04:03 | \n", "2020-07-16 13:04:12.266 | \n", "9.266 | \n", "2020-07-16 13:04:23.550 | \n", "11.284 | \n", "
4 | \n", "diff-checks | \n", ":seedling: setup | \n", "None | \n", "passed | \n", "0 | \n", "5725b783-8dbd-4f2a-868b-43672fda1517 | \n", "premerge-debian-79cddc6ddb-xcdj8-2 | \n", "2020-07-16 12:49:18 | \n", "2020-07-16 12:49:18.663 | \n", "0.663 | \n", "2020-07-16 12:49:20.104 | \n", "1.441 | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
31143 | \n", "llvm-releases | \n", "ninja all | \n", "None | \n", "failed | \n", "1 | \n", "1346c13a-6aca-49cb-b76f-9c248c2e53eb | \n", "2b3f2bb62dfe-1 | \n", "2019-11-07 17:04:11 | \n", "2019-11-07 17:04:18.898 | \n", "7.898 | \n", "2019-11-07 17:04:23.296 | \n", "4.398 | \n", "
31144 | \n", "llvm-releases | \n", "\n", " | None | \n", "failed | \n", "9009 | \n", "1346c13a-6aca-49cb-b76f-9c248c2e53eb | \n", "2b3f2bb62dfe-1 | \n", "2019-11-07 16:59:15 | \n", "2019-11-07 16:59:16.770 | \n", "1.770 | \n", "2019-11-07 17:02:41.360 | \n", "204.590 | \n", "
31145 | \n", "llvm-releases | \n", "\n", " | None | \n", "failed | \n", "9009 | \n", "1346c13a-6aca-49cb-b76f-9c248c2e53eb | \n", "2b3f2bb62dfe-1 | \n", "2019-11-07 16:59:15 | \n", "2019-11-07 17:02:41.760 | \n", "206.760 | \n", "2019-11-07 17:02:46.147 | \n", "4.387 | \n", "
31146 | \n", "llvm-releases | \n", "\n", " | None | \n", "failed | \n", "1 | \n", "1346c13a-6aca-49cb-b76f-9c248c2e53eb | \n", "2b3f2bb62dfe-1 | \n", "2019-11-07 16:00:46 | \n", "2019-11-07 16:57:53.596 | \n", "3427.596 | \n", "2019-11-07 16:58:07.712 | \n", "14.116 | \n", "
31147 | \n", "llvm-releases | \n", "\n", " | None | \n", "failed | \n", "1 | \n", "1346c13a-6aca-49cb-b76f-9c248c2e53eb | \n", "2b3f2bb62dfe-1 | \n", "2019-11-07 16:00:46 | \n", "2019-11-07 16:58:08.338 | \n", "3442.338 | \n", "2019-11-07 16:58:16.789 | \n", "8.451 | \n", "
31148 rows × 12 columns
\n", "\n", " | pipeline | \n", "name | \n", "step_key | \n", "state | \n", "exit_status | \n", "agent_id | \n", "agent_name | \n", "runnable_at | \n", "started_at | \n", "wait_duration | \n", "finished_at | \n", "run_duration | \n", "
---|---|---|---|---|---|---|---|---|---|---|---|---|
2 | \n", "premerge-checks | \n", ":windows: build and test windows | \n", "windows | \n", "passed | \n", "0 | \n", "f4f2789e-50aa-4dfb-88e9-267df8227508 | \n", "w64 | \n", "2020-07-16 12:50:25 | \n", "2020-07-16 12:50:29.645 | \n", "4.645 | \n", "2020-07-16 13:04:03.301 | \n", "813.656 | \n", "
9 | \n", "premerge-checks | \n", ":windows: build and test windows | \n", "windows | \n", "passed | \n", "0 | \n", "1ee7462f-3202-4272-a755-7e2850e59af4 | \n", "w3 | \n", "2020-07-16 12:41:56 | \n", "2020-07-16 12:42:00.171 | \n", "4.171 | \n", "2020-07-16 12:57:31.825 | \n", "931.654 | \n", "
16 | \n", "premerge-checks | \n", ":windows: build and test windows | \n", "windows | \n", "passed | \n", "0 | \n", "cae1cf3a-a836-4ae3-93ff-448f5c58a7a9 | \n", "w-no-ssd | \n", "2020-07-16 12:39:04 | \n", "2020-07-16 12:39:05.859 | \n", "1.859 | \n", "2020-07-16 12:56:56.294 | \n", "1070.435 | \n", "
23 | \n", "premerge-checks | \n", ":windows: build and test windows | \n", "windows | \n", "passed | \n", "0 | \n", "c1698c80-18e9-420f-a61c-37843b65313f | \n", "w2 | \n", "2020-07-16 12:21:57 | \n", "2020-07-16 12:22:02.335 | \n", "5.335 | \n", "2020-07-16 12:55:54.695 | \n", "2032.360 | \n", "
30 | \n", "premerge-checks | \n", ":windows: build and test windows | \n", "windows | \n", "passed | \n", "0 | \n", "cae1cf3a-a836-4ae3-93ff-448f5c58a7a9 | \n", "w-no-ssd | \n", "2020-07-16 12:15:46 | \n", "2020-07-16 12:15:55.777 | \n", "9.777 | \n", "2020-07-16 12:33:55.839 | \n", "1080.062 | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
25194 | \n", "premerge-checks | \n", ":windows: build and test windows | \n", "windows | \n", "passed | \n", "0 | \n", "d7a4e418-c12e-4a55-ad5c-3803f03f0782 | \n", "w1 | \n", "2020-06-17 10:13:40 | \n", "2020-06-17 10:13:45.308 | \n", "5.308 | \n", "2020-06-17 10:41:51.716 | \n", "1686.408 | \n", "
25223 | \n", "premerge-checks | \n", ":windows: build and test windows | \n", "windows | \n", "passed | \n", "0 | \n", "d7a4e418-c12e-4a55-ad5c-3803f03f0782 | \n", "w1 | \n", "2020-06-17 08:35:44 | \n", "2020-06-17 08:35:54.793 | \n", "10.793 | \n", "2020-06-17 09:58:01.633 | \n", "4926.840 | \n", "
25234 | \n", "premerge-checks | \n", ":windows: build and test windows | \n", "windows | \n", "passed | \n", "0 | \n", "bd675275-3c9b-47ce-8fc3-73d6c3f8d089 | \n", "w2 | \n", "2020-06-17 08:07:44 | \n", "2020-06-17 08:16:26.374 | \n", "522.374 | \n", "2020-06-17 08:56:29.420 | \n", "2403.046 | \n", "
25238 | \n", "premerge-checks | \n", ":windows: build and test windows | \n", "windows | \n", "passed | \n", "0 | \n", "283e8832-4e87-49c6-93ce-5d7d7e521344 | \n", "w5 | \n", "2020-06-17 08:04:01 | \n", "2020-06-17 08:04:05.998 | \n", "4.998 | \n", "2020-06-17 09:29:55.553 | \n", "5149.555 | \n", "
25242 | \n", "premerge-checks | \n", ":windows: build and test windows | \n", "windows | \n", "passed | \n", "0 | \n", "af60fa17-98d6-4cfe-8b93-f9f5d9572069 | \n", "w7 | \n", "2020-06-17 08:04:02 | \n", "2020-06-17 08:07:10.312 | \n", "188.312 | \n", "2020-06-17 08:50:11.249 | \n", "2580.937 | \n", "
2560 rows × 12 columns
\n", "\n", " | median | \n", "mean | \n", "std | \n", "count_nonzero | \n", "
---|---|---|---|---|
\n", " | run_duration | \n", "run_duration | \n", "run_duration | \n", "run_duration | \n", "
agent_name | \n", "\n", " | \n", " | \n", " | \n", " |
wr | \n", "2253.1580 | \n", "2358.452667 | \n", "1063.643825 | \n", "15.0 | \n", "
w-no-ssd | \n", "2205.6560 | \n", "2384.878086 | \n", "903.300255 | \n", "327.0 | \n", "
w7 | \n", "2183.6010 | \n", "2105.768773 | \n", "838.872186 | \n", "22.0 | \n", "
wh64-1 | \n", "2171.9305 | \n", "2030.448714 | \n", "458.938941 | \n", "14.0 | \n", "
w1 | \n", "2167.8730 | \n", "2337.174326 | \n", "946.209905 | \n", "276.0 | \n", "
w5 | \n", "2120.6475 | \n", "2298.384057 | \n", "864.067277 | \n", "350.0 | \n", "
w4 | \n", "2085.1555 | \n", "2259.117868 | \n", "894.307199 | \n", "340.0 | \n", "
w3 | \n", "2052.3355 | \n", "2205.881979 | \n", "901.605416 | \n", "374.0 | \n", "
w2 | \n", "2003.3485 | \n", "2215.764024 | \n", "909.803217 | \n", "334.0 | \n", "
w6 | \n", "1928.4930 | \n", "2096.736796 | \n", "870.648539 | \n", "367.0 | \n", "
wh64-2 | \n", "1802.3465 | \n", "1843.380400 | \n", "269.787648 | \n", "10.0 | \n", "
w64 | \n", "1689.1110 | \n", "1598.434884 | \n", "397.997104 | \n", "275.0 | \n", "