1
0
Fork 0
llvm-premerge-checks/scripts/buildkite/analyze_jobs.ipynb

1042 lines
94 KiB
Text
Raw Normal View History

{
"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": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>pipeline</th>\n",
" <th>name</th>\n",
" <th>step_key</th>\n",
" <th>state</th>\n",
" <th>exit_status</th>\n",
" <th>agent_id</th>\n",
" <th>agent_name</th>\n",
" <th>runnable_at</th>\n",
" <th>started_at</th>\n",
" <th>wait_duration</th>\n",
" <th>finished_at</th>\n",
" <th>run_duration</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>premerge-checks</td>\n",
" <td>:seedling: setup</td>\n",
" <td>None</td>\n",
" <td>passed</td>\n",
" <td>0</td>\n",
" <td>5725b783-8dbd-4f2a-868b-43672fda1517</td>\n",
" <td>premerge-debian-79cddc6ddb-xcdj8-2</td>\n",
" <td>2020-07-16 12:50:04</td>\n",
" <td>2020-07-16 12:50:08.673</td>\n",
" <td>4.673</td>\n",
" <td>2020-07-16 12:50:25.259</td>\n",
" <td>16.586</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>premerge-checks</td>\n",
" <td>:linux: build and test linux</td>\n",
" <td>linux</td>\n",
" <td>failed</td>\n",
" <td>-1</td>\n",
" <td>5725b783-8dbd-4f2a-868b-43672fda1517</td>\n",
" <td>premerge-debian-79cddc6ddb-xcdj8-2</td>\n",
" <td>2020-07-16 12:50:25</td>\n",
" <td>2020-07-16 12:50:28.668</td>\n",
" <td>3.668</td>\n",
" <td>2020-07-16 12:59:19.455</td>\n",
" <td>530.787</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>premerge-checks</td>\n",
" <td>:windows: build and test windows</td>\n",
" <td>windows</td>\n",
" <td>passed</td>\n",
" <td>0</td>\n",
" <td>f4f2789e-50aa-4dfb-88e9-267df8227508</td>\n",
" <td>w64</td>\n",
" <td>2020-07-16 12:50:25</td>\n",
" <td>2020-07-16 12:50:29.645</td>\n",
" <td>4.645</td>\n",
" <td>2020-07-16 13:04:03.301</td>\n",
" <td>813.656</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>premerge-checks</td>\n",
" <td>:spiral_note_pad: report</td>\n",
" <td>None</td>\n",
" <td>passed</td>\n",
" <td>0</td>\n",
" <td>152a7c38-8e6c-438b-8123-fafb92ff2afd</td>\n",
" <td>premerge-debian-79cddc6ddb-snd9j-2</td>\n",
" <td>2020-07-16 13:04:03</td>\n",
" <td>2020-07-16 13:04:12.266</td>\n",
" <td>9.266</td>\n",
" <td>2020-07-16 13:04:23.550</td>\n",
" <td>11.284</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>diff-checks</td>\n",
" <td>:seedling: setup</td>\n",
" <td>None</td>\n",
" <td>passed</td>\n",
" <td>0</td>\n",
" <td>5725b783-8dbd-4f2a-868b-43672fda1517</td>\n",
" <td>premerge-debian-79cddc6ddb-xcdj8-2</td>\n",
" <td>2020-07-16 12:49:18</td>\n",
" <td>2020-07-16 12:49:18.663</td>\n",
" <td>0.663</td>\n",
" <td>2020-07-16 12:49:20.104</td>\n",
" <td>1.441</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>31143</th>\n",
" <td>llvm-releases</td>\n",
" <td>ninja all</td>\n",
" <td>None</td>\n",
" <td>failed</td>\n",
" <td>1</td>\n",
" <td>1346c13a-6aca-49cb-b76f-9c248c2e53eb</td>\n",
" <td>2b3f2bb62dfe-1</td>\n",
" <td>2019-11-07 17:04:11</td>\n",
" <td>2019-11-07 17:04:18.898</td>\n",
" <td>7.898</td>\n",
" <td>2019-11-07 17:04:23.296</td>\n",
" <td>4.398</td>\n",
" </tr>\n",
" <tr>\n",
" <th>31144</th>\n",
" <td>llvm-releases</td>\n",
" <td></td>\n",
" <td>None</td>\n",
" <td>failed</td>\n",
" <td>9009</td>\n",
" <td>1346c13a-6aca-49cb-b76f-9c248c2e53eb</td>\n",
" <td>2b3f2bb62dfe-1</td>\n",
" <td>2019-11-07 16:59:15</td>\n",
" <td>2019-11-07 16:59:16.770</td>\n",
" <td>1.770</td>\n",
" <td>2019-11-07 17:02:41.360</td>\n",
" <td>204.590</td>\n",
" </tr>\n",
" <tr>\n",
" <th>31145</th>\n",
" <td>llvm-releases</td>\n",
" <td></td>\n",
" <td>None</td>\n",
" <td>failed</td>\n",
" <td>9009</td>\n",
" <td>1346c13a-6aca-49cb-b76f-9c248c2e53eb</td>\n",
" <td>2b3f2bb62dfe-1</td>\n",
" <td>2019-11-07 16:59:15</td>\n",
" <td>2019-11-07 17:02:41.760</td>\n",
" <td>206.760</td>\n",
" <td>2019-11-07 17:02:46.147</td>\n",
" <td>4.387</td>\n",
" </tr>\n",
" <tr>\n",
" <th>31146</th>\n",
" <td>llvm-releases</td>\n",
" <td></td>\n",
" <td>None</td>\n",
" <td>failed</td>\n",
" <td>1</td>\n",
" <td>1346c13a-6aca-49cb-b76f-9c248c2e53eb</td>\n",
" <td>2b3f2bb62dfe-1</td>\n",
" <td>2019-11-07 16:00:46</td>\n",
" <td>2019-11-07 16:57:53.596</td>\n",
" <td>3427.596</td>\n",
" <td>2019-11-07 16:58:07.712</td>\n",
" <td>14.116</td>\n",
" </tr>\n",
" <tr>\n",
" <th>31147</th>\n",
" <td>llvm-releases</td>\n",
" <td></td>\n",
" <td>None</td>\n",
" <td>failed</td>\n",
" <td>1</td>\n",
" <td>1346c13a-6aca-49cb-b76f-9c248c2e53eb</td>\n",
" <td>2b3f2bb62dfe-1</td>\n",
" <td>2019-11-07 16:00:46</td>\n",
" <td>2019-11-07 16:58:08.338</td>\n",
" <td>3442.338</td>\n",
" <td>2019-11-07 16:58:16.789</td>\n",
" <td>8.451</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>31148 rows × 12 columns</p>\n",
"</div>"
],
"text/plain": [
" pipeline name step_key state \\\n",
"0 premerge-checks :seedling: setup None passed \n",
"1 premerge-checks :linux: build and test linux linux failed \n",
"2 premerge-checks :windows: build and test windows windows passed \n",
"3 premerge-checks :spiral_note_pad: report None passed \n",
"4 diff-checks :seedling: setup None passed \n",
"... ... ... ... ... \n",
"31143 llvm-releases ninja all None failed \n",
"31144 llvm-releases None failed \n",
"31145 llvm-releases None failed \n",
"31146 llvm-releases None failed \n",
"31147 llvm-releases None failed \n",
"\n",
" exit_status agent_id \\\n",
"0 0 5725b783-8dbd-4f2a-868b-43672fda1517 \n",
"1 -1 5725b783-8dbd-4f2a-868b-43672fda1517 \n",
"2 0 f4f2789e-50aa-4dfb-88e9-267df8227508 \n",
"3 0 152a7c38-8e6c-438b-8123-fafb92ff2afd \n",
"4 0 5725b783-8dbd-4f2a-868b-43672fda1517 \n",
"... ... ... \n",
"31143 1 1346c13a-6aca-49cb-b76f-9c248c2e53eb \n",
"31144 9009 1346c13a-6aca-49cb-b76f-9c248c2e53eb \n",
"31145 9009 1346c13a-6aca-49cb-b76f-9c248c2e53eb \n",
"31146 1 1346c13a-6aca-49cb-b76f-9c248c2e53eb \n",
"31147 1 1346c13a-6aca-49cb-b76f-9c248c2e53eb \n",
"\n",
" agent_name runnable_at \\\n",
"0 premerge-debian-79cddc6ddb-xcdj8-2 2020-07-16 12:50:04 \n",
"1 premerge-debian-79cddc6ddb-xcdj8-2 2020-07-16 12:50:25 \n",
"2 w64 2020-07-16 12:50:25 \n",
"3 premerge-debian-79cddc6ddb-snd9j-2 2020-07-16 13:04:03 \n",
"4 premerge-debian-79cddc6ddb-xcdj8-2 2020-07-16 12:49:18 \n",
"... ... ... \n",
"31143 2b3f2bb62dfe-1 2019-11-07 17:04:11 \n",
"31144 2b3f2bb62dfe-1 2019-11-07 16:59:15 \n",
"31145 2b3f2bb62dfe-1 2019-11-07 16:59:15 \n",
"31146 2b3f2bb62dfe-1 2019-11-07 16:00:46 \n",
"31147 2b3f2bb62dfe-1 2019-11-07 16:00:46 \n",
"\n",
" started_at wait_duration finished_at \\\n",
"0 2020-07-16 12:50:08.673 4.673 2020-07-16 12:50:25.259 \n",
"1 2020-07-16 12:50:28.668 3.668 2020-07-16 12:59:19.455 \n",
"2 2020-07-16 12:50:29.645 4.645 2020-07-16 13:04:03.301 \n",
"3 2020-07-16 13:04:12.266 9.266 2020-07-16 13:04:23.550 \n",
"4 2020-07-16 12:49:18.663 0.663 2020-07-16 12:49:20.104 \n",
"... ... ... ... \n",
"31143 2019-11-07 17:04:18.898 7.898 2019-11-07 17:04:23.296 \n",
"31144 2019-11-07 16:59:16.770 1.770 2019-11-07 17:02:41.360 \n",
"31145 2019-11-07 17:02:41.760 206.760 2019-11-07 17:02:46.147 \n",
"31146 2019-11-07 16:57:53.596 3427.596 2019-11-07 16:58:07.712 \n",
"31147 2019-11-07 16:58:08.338 3442.338 2019-11-07 16:58:16.789 \n",
"\n",
" run_duration \n",
"0 16.586 \n",
"1 530.787 \n",
"2 813.656 \n",
"3 11.284 \n",
"4 1.441 \n",
"... ... \n",
"31143 4.398 \n",
"31144 204.590 \n",
"31145 4.387 \n",
"31146 14.116 \n",
"31147 8.451 \n",
"\n",
"[31148 rows x 12 columns]"
]
},
"execution_count": 108,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"jobs"
]
},
{
"cell_type": "code",
"execution_count": 172,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/usr/local/google/home/goncharov/etc/merge-checks/venv/lib/python3.7/site-packages/ipykernel_launcher.py:1: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n",
" \"\"\"Entry point for launching an IPython kernel.\n"
]
}
],
"source": [
"ds = jobs[jobs['pipeline'] == 'premerge-checks'][jobs['step_key'] == 'windows'][jobs['state']=='passed'][~jobs['agent_name'].str.startswith('buildkite-')]"
]
},
{
"cell_type": "code",
"execution_count": 151,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>pipeline</th>\n",
" <th>name</th>\n",
" <th>step_key</th>\n",
" <th>state</th>\n",
" <th>exit_status</th>\n",
" <th>agent_id</th>\n",
" <th>agent_name</th>\n",
" <th>runnable_at</th>\n",
" <th>started_at</th>\n",
" <th>wait_duration</th>\n",
" <th>finished_at</th>\n",
" <th>run_duration</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>premerge-checks</td>\n",
" <td>:windows: build and test windows</td>\n",
" <td>windows</td>\n",
" <td>passed</td>\n",
" <td>0</td>\n",
" <td>f4f2789e-50aa-4dfb-88e9-267df8227508</td>\n",
" <td>w64</td>\n",
" <td>2020-07-16 12:50:25</td>\n",
" <td>2020-07-16 12:50:29.645</td>\n",
" <td>4.645</td>\n",
" <td>2020-07-16 13:04:03.301</td>\n",
" <td>813.656</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>premerge-checks</td>\n",
" <td>:windows: build and test windows</td>\n",
" <td>windows</td>\n",
" <td>passed</td>\n",
" <td>0</td>\n",
" <td>1ee7462f-3202-4272-a755-7e2850e59af4</td>\n",
" <td>w3</td>\n",
" <td>2020-07-16 12:41:56</td>\n",
" <td>2020-07-16 12:42:00.171</td>\n",
" <td>4.171</td>\n",
" <td>2020-07-16 12:57:31.825</td>\n",
" <td>931.654</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>premerge-checks</td>\n",
" <td>:windows: build and test windows</td>\n",
" <td>windows</td>\n",
" <td>passed</td>\n",
" <td>0</td>\n",
" <td>cae1cf3a-a836-4ae3-93ff-448f5c58a7a9</td>\n",
" <td>w-no-ssd</td>\n",
" <td>2020-07-16 12:39:04</td>\n",
" <td>2020-07-16 12:39:05.859</td>\n",
" <td>1.859</td>\n",
" <td>2020-07-16 12:56:56.294</td>\n",
" <td>1070.435</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>premerge-checks</td>\n",
" <td>:windows: build and test windows</td>\n",
" <td>windows</td>\n",
" <td>passed</td>\n",
" <td>0</td>\n",
" <td>c1698c80-18e9-420f-a61c-37843b65313f</td>\n",
" <td>w2</td>\n",
" <td>2020-07-16 12:21:57</td>\n",
" <td>2020-07-16 12:22:02.335</td>\n",
" <td>5.335</td>\n",
" <td>2020-07-16 12:55:54.695</td>\n",
" <td>2032.360</td>\n",
" </tr>\n",
" <tr>\n",
" <th>30</th>\n",
" <td>premerge-checks</td>\n",
" <td>:windows: build and test windows</td>\n",
" <td>windows</td>\n",
" <td>passed</td>\n",
" <td>0</td>\n",
" <td>cae1cf3a-a836-4ae3-93ff-448f5c58a7a9</td>\n",
" <td>w-no-ssd</td>\n",
" <td>2020-07-16 12:15:46</td>\n",
" <td>2020-07-16 12:15:55.777</td>\n",
" <td>9.777</td>\n",
" <td>2020-07-16 12:33:55.839</td>\n",
" <td>1080.062</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25194</th>\n",
" <td>premerge-checks</td>\n",
" <td>:windows: build and test windows</td>\n",
" <td>windows</td>\n",
" <td>passed</td>\n",
" <td>0</td>\n",
" <td>d7a4e418-c12e-4a55-ad5c-3803f03f0782</td>\n",
" <td>w1</td>\n",
" <td>2020-06-17 10:13:40</td>\n",
" <td>2020-06-17 10:13:45.308</td>\n",
" <td>5.308</td>\n",
" <td>2020-06-17 10:41:51.716</td>\n",
" <td>1686.408</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25223</th>\n",
" <td>premerge-checks</td>\n",
" <td>:windows: build and test windows</td>\n",
" <td>windows</td>\n",
" <td>passed</td>\n",
" <td>0</td>\n",
" <td>d7a4e418-c12e-4a55-ad5c-3803f03f0782</td>\n",
" <td>w1</td>\n",
" <td>2020-06-17 08:35:44</td>\n",
" <td>2020-06-17 08:35:54.793</td>\n",
" <td>10.793</td>\n",
" <td>2020-06-17 09:58:01.633</td>\n",
" <td>4926.840</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25234</th>\n",
" <td>premerge-checks</td>\n",
" <td>:windows: build and test windows</td>\n",
" <td>windows</td>\n",
" <td>passed</td>\n",
" <td>0</td>\n",
" <td>bd675275-3c9b-47ce-8fc3-73d6c3f8d089</td>\n",
" <td>w2</td>\n",
" <td>2020-06-17 08:07:44</td>\n",
" <td>2020-06-17 08:16:26.374</td>\n",
" <td>522.374</td>\n",
" <td>2020-06-17 08:56:29.420</td>\n",
" <td>2403.046</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25238</th>\n",
" <td>premerge-checks</td>\n",
" <td>:windows: build and test windows</td>\n",
" <td>windows</td>\n",
" <td>passed</td>\n",
" <td>0</td>\n",
" <td>283e8832-4e87-49c6-93ce-5d7d7e521344</td>\n",
" <td>w5</td>\n",
" <td>2020-06-17 08:04:01</td>\n",
" <td>2020-06-17 08:04:05.998</td>\n",
" <td>4.998</td>\n",
" <td>2020-06-17 09:29:55.553</td>\n",
" <td>5149.555</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25242</th>\n",
" <td>premerge-checks</td>\n",
" <td>:windows: build and test windows</td>\n",
" <td>windows</td>\n",
" <td>passed</td>\n",
" <td>0</td>\n",
" <td>af60fa17-98d6-4cfe-8b93-f9f5d9572069</td>\n",
" <td>w7</td>\n",
" <td>2020-06-17 08:04:02</td>\n",
" <td>2020-06-17 08:07:10.312</td>\n",
" <td>188.312</td>\n",
" <td>2020-06-17 08:50:11.249</td>\n",
" <td>2580.937</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>2560 rows × 12 columns</p>\n",
"</div>"
],
"text/plain": [
" pipeline name step_key state \\\n",
"2 premerge-checks :windows: build and test windows windows passed \n",
"9 premerge-checks :windows: build and test windows windows passed \n",
"16 premerge-checks :windows: build and test windows windows passed \n",
"23 premerge-checks :windows: build and test windows windows passed \n",
"30 premerge-checks :windows: build and test windows windows passed \n",
"... ... ... ... ... \n",
"25194 premerge-checks :windows: build and test windows windows passed \n",
"25223 premerge-checks :windows: build and test windows windows passed \n",
"25234 premerge-checks :windows: build and test windows windows passed \n",
"25238 premerge-checks :windows: build and test windows windows passed \n",
"25242 premerge-checks :windows: build and test windows windows passed \n",
"\n",
" exit_status agent_id agent_name \\\n",
"2 0 f4f2789e-50aa-4dfb-88e9-267df8227508 w64 \n",
"9 0 1ee7462f-3202-4272-a755-7e2850e59af4 w3 \n",
"16 0 cae1cf3a-a836-4ae3-93ff-448f5c58a7a9 w-no-ssd \n",
"23 0 c1698c80-18e9-420f-a61c-37843b65313f w2 \n",
"30 0 cae1cf3a-a836-4ae3-93ff-448f5c58a7a9 w-no-ssd \n",
"... ... ... ... \n",
"25194 0 d7a4e418-c12e-4a55-ad5c-3803f03f0782 w1 \n",
"25223 0 d7a4e418-c12e-4a55-ad5c-3803f03f0782 w1 \n",
"25234 0 bd675275-3c9b-47ce-8fc3-73d6c3f8d089 w2 \n",
"25238 0 283e8832-4e87-49c6-93ce-5d7d7e521344 w5 \n",
"25242 0 af60fa17-98d6-4cfe-8b93-f9f5d9572069 w7 \n",
"\n",
" runnable_at started_at wait_duration \\\n",
"2 2020-07-16 12:50:25 2020-07-16 12:50:29.645 4.645 \n",
"9 2020-07-16 12:41:56 2020-07-16 12:42:00.171 4.171 \n",
"16 2020-07-16 12:39:04 2020-07-16 12:39:05.859 1.859 \n",
"23 2020-07-16 12:21:57 2020-07-16 12:22:02.335 5.335 \n",
"30 2020-07-16 12:15:46 2020-07-16 12:15:55.777 9.777 \n",
"... ... ... ... \n",
"25194 2020-06-17 10:13:40 2020-06-17 10:13:45.308 5.308 \n",
"25223 2020-06-17 08:35:44 2020-06-17 08:35:54.793 10.793 \n",
"25234 2020-06-17 08:07:44 2020-06-17 08:16:26.374 522.374 \n",
"25238 2020-06-17 08:04:01 2020-06-17 08:04:05.998 4.998 \n",
"25242 2020-06-17 08:04:02 2020-06-17 08:07:10.312 188.312 \n",
"\n",
" finished_at run_duration \n",
"2 2020-07-16 13:04:03.301 813.656 \n",
"9 2020-07-16 12:57:31.825 931.654 \n",
"16 2020-07-16 12:56:56.294 1070.435 \n",
"23 2020-07-16 12:55:54.695 2032.360 \n",
"30 2020-07-16 12:33:55.839 1080.062 \n",
"... ... ... \n",
"25194 2020-06-17 10:41:51.716 1686.408 \n",
"25223 2020-06-17 09:58:01.633 4926.840 \n",
"25234 2020-06-17 08:56:29.420 2403.046 \n",
"25238 2020-06-17 09:29:55.553 5149.555 \n",
"25242 2020-06-17 08:50:11.249 2580.937 \n",
"\n",
"[2560 rows x 12 columns]"
]
},
"execution_count": 151,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ds"
]
},
{
"cell_type": "code",
"execution_count": 173,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7f8cd604e5d0>"
]
},
"execution_count": 173,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 720x720 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
" fig, ax = plt.subplots(figsize=(10,10)) # size of the plot (width, height)\n",
"\n",
" sns.violinplot(\n",
" ax=ax,\n",
" x='run_duration',\n",
" y='agent_name',\n",
" split=True,\n",
" data=ds)"
]
},
{
"cell_type": "code",
"execution_count": 174,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead tr th {\n",
" text-align: left;\n",
" }\n",
"\n",
" .dataframe thead tr:last-of-type th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr>\n",
" <th></th>\n",
" <th>median</th>\n",
" <th>mean</th>\n",
" <th>std</th>\n",
" <th>count_nonzero</th>\n",
" </tr>\n",
" <tr>\n",
" <th></th>\n",
" <th>run_duration</th>\n",
" <th>run_duration</th>\n",
" <th>run_duration</th>\n",
" <th>run_duration</th>\n",
" </tr>\n",
" <tr>\n",
" <th>agent_name</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>wr</th>\n",
" <td>2253.1580</td>\n",
" <td>2358.452667</td>\n",
" <td>1063.643825</td>\n",
" <td>15.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>w-no-ssd</th>\n",
" <td>2205.6560</td>\n",
" <td>2384.878086</td>\n",
" <td>903.300255</td>\n",
" <td>327.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>w7</th>\n",
" <td>2183.6010</td>\n",
" <td>2105.768773</td>\n",
" <td>838.872186</td>\n",
" <td>22.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>wh64-1</th>\n",
" <td>2171.9305</td>\n",
" <td>2030.448714</td>\n",
" <td>458.938941</td>\n",
" <td>14.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>w1</th>\n",
" <td>2167.8730</td>\n",
" <td>2337.174326</td>\n",
" <td>946.209905</td>\n",
" <td>276.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>w5</th>\n",
" <td>2120.6475</td>\n",
" <td>2298.384057</td>\n",
" <td>864.067277</td>\n",
" <td>350.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>w4</th>\n",
" <td>2085.1555</td>\n",
" <td>2259.117868</td>\n",
" <td>894.307199</td>\n",
" <td>340.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>w3</th>\n",
" <td>2052.3355</td>\n",
" <td>2205.881979</td>\n",
" <td>901.605416</td>\n",
" <td>374.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>w2</th>\n",
" <td>2003.3485</td>\n",
" <td>2215.764024</td>\n",
" <td>909.803217</td>\n",
" <td>334.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>w6</th>\n",
" <td>1928.4930</td>\n",
" <td>2096.736796</td>\n",
" <td>870.648539</td>\n",
" <td>367.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>wh64-2</th>\n",
" <td>1802.3465</td>\n",
" <td>1843.380400</td>\n",
" <td>269.787648</td>\n",
" <td>10.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>w64</th>\n",
" <td>1689.1110</td>\n",
" <td>1598.434884</td>\n",
" <td>397.997104</td>\n",
" <td>275.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" median mean std count_nonzero\n",
" run_duration run_duration run_duration run_duration\n",
"agent_name \n",
"wr 2253.1580 2358.452667 1063.643825 15.0\n",
"w-no-ssd 2205.6560 2384.878086 903.300255 327.0\n",
"w7 2183.6010 2105.768773 838.872186 22.0\n",
"wh64-1 2171.9305 2030.448714 458.938941 14.0\n",
"w1 2167.8730 2337.174326 946.209905 276.0\n",
"w5 2120.6475 2298.384057 864.067277 350.0\n",
"w4 2085.1555 2259.117868 894.307199 340.0\n",
"w3 2052.3355 2205.881979 901.605416 374.0\n",
"w2 2003.3485 2215.764024 909.803217 334.0\n",
"w6 1928.4930 2096.736796 870.648539 367.0\n",
"wh64-2 1802.3465 1843.380400 269.787648 10.0\n",
"w64 1689.1110 1598.434884 397.997104 275.0"
]
},
"execution_count": 174,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"t = pd.pivot_table(ds, values=['run_duration'], index=['agent_name'],\n",
" aggfunc=[np.median, np.mean, np.std, np.count_nonzero])\n",
"t = t.reindex(t.sort_values(by=('median', 'run_duration'), ascending=False).index)\n",
"t"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.5rc1"
}
},
"nbformat": 4,
"nbformat_minor": 4
}