blob: 83ffe8a6d72ac7c06b5be5f374d8fea59172fa9b [file] [log] [blame]
import csv
import dash
import dash_core_components as dcc
import dash_html_components as html
import plotly.express as px
import pandas as pd
import re
from datetime import timedelta, datetime
def str_to_timedelta(val):
# 0:08:29.009337
regex = re.compile(r'((?P<hours>\d+?):)?((?P<minutes>\d+?):)?((?P<seconds>\d+?).)?')
parts = regex.match(val)
if not parts:
return
parts = parts.groupdict()
time_params = {}
for name, param in parts.items():
if param:
time_params[name] = int(param)
return timedelta(**time_params).total_seconds()
external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']
app = dash.Dash(__name__, external_stylesheets=external_stylesheets)
colors = {
'background': '#111111',
'text': '#7FDBFF'
}
df = pd.DataFrame()
data_file_list = [
"android-lkft_4.14-10.0-gsi-hikey.csv",
"android-lkft_4.14p-10.0-gsi-hikey.csv",
"android-lkft_4.14-stable-master-hikey-lkft.csv",
"android-lkft_4.19-10.0-gsi-hikey.csv",
"android-lkft_4.19-stable-master-hikey-lkft.csv",
"android-lkft_4.4o-10.0-gsi-hikey.csv",
"android-lkft_4.4o-9.0-lcr-hikey.csv",
"android-lkft_4.4p-10.0-gsi-hikey.csv",
"android-lkft_4.9-10.0-gsi-hikey.csv",
"android-lkft_4.9o-10.0-gsi-hikey.csv",
"android-lkft_4.9o-9.0-lcr-hikey.csv",
"android-lkft_4.9p-10.0-gsi-hikey.csv",
]
for series in data_file_list:
branch_name = series.split("_")[1].replace(".csv", "")
sdf = pd.read_csv(series, parse_dates=['submit_time'])
sdf['wait_time'] = sdf['wait_time'].map(str_to_timedelta)
sdf['execution_time'] = sdf['execution_time'].map(str_to_timedelta)
sdf = sdf.drop(columns=['job_id', 'priority', 'execution_time'])
sdf = sdf.rename(columns={'wait_time': branch_name})
df = pd.concat([df, sdf])
df = df.sort_values(by=['submit_time'])
fig = px.scatter(df, x="submit_time", y=df.columns,
labels={
"submit_time": "Submit Date",
"value": "Wait time (s)",
})
lkft_file_list = [
"lkft_linux-stable-rc-linux-5.4.y.csv",
"lkft_linux-stable-rc-linux-5.4.y-sanity.csv",
"lkft_linux-stable-rc-linux-5.8.y.csv",
"lkft_linux-stable-rc-linux-5.8.y-sanity.csv"
]
lkft_build_dict = {}
for data_file in lkft_file_list:
with open(data_file, "r") as lkft_source_data:
reader = csv.DictReader(lkft_source_data)
for row in reader:
build_version = row['build_version']
#submit_time = datetime.strptime(row['submit_time'], "&Y-%m-%d %H:%M:%S")
submit_time = datetime.fromisoformat(row['submit_time'])
if build_version in lkft_build_dict.keys():
first_submit, last_submit = lkft_build_dict[build_version]
if submit_time < first_submit:
first_submit = submit_time
if submit_time > last_submit:
last_submit = submit_time
lkft_build_dict.update({build_version: (first_submit, last_submit)})
else:
lkft_build_dict.update({build_version: (submit_time, submit_time)})
for lkft_build_version, lkft_build_dates in lkft_build_dict.items():
fig.add_vrect(x0=lkft_build_dates[0],
x1=lkft_build_dates[1],
line_width=3,
line_dash="dash",
line_color="green",
annotation_text=lkft_build_version)
fig.update_layout(
plot_bgcolor=colors['background'],
paper_bgcolor=colors['background'],
font_color=colors['text']
)
app.layout = html.Div(style={'backgroundColor': colors['background']}, children=[
html.Div(children='Android jobs wait times', style={
'textAlign': 'center',
'color': colors['text']
}),
dcc.Graph(
id='example-graph-2',
figure=fig
)
])
if __name__ == '__main__':
app.run_server(debug=True)