| 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) |