Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dashboard: Fix Fine Performance Metrics w/ Bokeh 3 #7874

Merged
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
152 changes: 75 additions & 77 deletions distributed/dashboard/components/scheduler.py
Original file line number Diff line number Diff line change
Expand Up @@ -3405,20 +3405,12 @@
self.unit_selector = Select(title="Unit selection", options=[])
self.unit_selector.on_change("value", handle_selector_chng)
self.unit_selected = "seconds"
self.task_exec_by_activity_chart = figure()
self.task_exec_by_prefix_chart = figure()
self.senddata_by_activity_chart = figure()
self.task_exec_by_activity_chart = None
self.task_exec_by_prefix_chart = None
self.senddata_by_activity_chart = None
self.root = column(
self.function_selector,
self.unit_selector,
row(
[
self.task_exec_by_prefix_chart,
self.task_exec_by_activity_chart,
self.senddata_by_activity_chart,
],
sizing_mode="stretch_width",
),
sizing_mode="scale_width",
)

Expand Down Expand Up @@ -3504,26 +3496,29 @@
f"Filter by function ({len(self.function_selector.options)}):"
)

task_exec_piechart = self._build_task_execution_by_activity_chart(
self.task_exec_data_limited.copy()
)
task_exec_barchart = self._build_task_execution_by_prefix_chart(
self.task_exec_data_limited.copy()
)
senddata_piechart = self._build_senddata_chart(self.senddata.copy())
needs_figures_row = self.task_exec_by_activity_chart is None
self._build_task_execution_by_activity_chart(self.task_exec_data_limited.copy())
self._build_task_execution_by_prefix_chart(self.task_exec_data_limited.copy())
self._build_senddata_chart(self.senddata.copy())

# Replacing the child causes small blips if done every iteration vs updating
# renderers, but it's needed when new functions and/or activities show up to
# rerender plot
if self.substantial_change:
self.root.children[-1].children[0] = task_exec_barchart
self.root.children[-1].children[1] = task_exec_piechart
self.root.children[-1].children[2] = senddata_piechart
if self.substantial_change or needs_figures_row:
self.substantial_change = False
else:
self.task_exec_by_prefix_chart.renderers = task_exec_piechart.renderers
self.task_exec_by_activity_chart.renderers = task_exec_barchart.renderers
self.senddata_by_activity_chart.renderers = senddata_piechart.renderers

figures_row = row(
children=[
self.task_exec_by_prefix_chart,
self.task_exec_by_activity_chart,
self.senddata_by_activity_chart,
],
sizing_mode="stretch_width",
)

if needs_figures_row:
# First iteration, initial assignment of figures row
self.root.children.append(figures_row)
else:
# Otherwise needs forced refresh by replacing the figures row
self.root.children[-1] = figures_row

Check warning on line 3521 in distributed/dashboard/components/scheduler.py

View check run for this annotation

Codecov / codecov/patch

distributed/dashboard/components/scheduler.py#L3521

Added line #L3521 was not covered by tests

def _build_task_execution_by_activity_chart(
self, task_exec_data: defaultdict[str, list]
Expand Down Expand Up @@ -3553,30 +3548,31 @@
piechart_data["activity"] = self.task_activities
self.task_exec_by_activity_src.data = piechart_data

piechart = figure(
height=500,
sizing_mode="scale_both",
title="Task execution, by activity",
tools="hover",
tooltips="@{activity}: @text",
x_range=(-0.5, 1.0),
)
piechart.axis.axis_label = None
piechart.axis.visible = False
piechart.grid.grid_line_color = None

piechart.wedge(
x=0,
y=1,
radius=0.4,
start_angle=cumsum("angle", include_zero=True),
end_angle=cumsum("angle"),
line_color="white",
fill_color="color",
legend_field="activity",
source=self.task_exec_by_activity_src,
)
return piechart
if self.task_exec_by_activity_chart is None:
piechart = figure(
height=500,
sizing_mode="scale_both",
title="Task execution, by activity",
tools="hover",
tooltips="@{activity}: @text",
x_range=(-0.5, 1.0),
)
piechart.axis.axis_label = None
piechart.axis.visible = False
piechart.grid.grid_line_color = None

piechart.wedge(
x=0,
y=1,
radius=0.4,
start_angle=cumsum("angle", include_zero=True),
end_angle=cumsum("angle"),
line_color="white",
fill_color="color",
legend_field="activity",
source=self.task_exec_by_activity_src,
)
self.task_exec_by_activity_chart = piechart

def _build_task_execution_by_prefix_chart(
self, task_exec_data: defaultdict[str, list]
Expand Down Expand Up @@ -3621,7 +3617,7 @@

self.task_exec_by_prefix_src.data = dict(task_exec_data)
barchart.renderers = renderers
return barchart
self.task_exec_by_prefix_chart = barchart

def _build_senddata_chart(self, senddata: defaultdict[str, list]) -> figure:
piedata = {}
Expand All @@ -3643,29 +3639,31 @@
piedata["color"] = small_palettes["YlGnBu"].get(len(piedata["activity"]), [])

self.sendsrc.data = piedata
senddata_piechart = figure(
height=500,
sizing_mode="scale_both",
title="Send data, by activity",
tools="hover",
tooltips="@{activity}: @text",
x_range=(-0.5, 1.0),
)
senddata_piechart.wedge(
x=0,
y=1,
radius=0.4,
start_angle=cumsum("angle", include_zero=True),
end_angle=cumsum("angle"),
line_color="white",
fill_color="color",
legend_field="activity",
source=self.sendsrc,
)
senddata_piechart.axis.axis_label = None
senddata_piechart.axis.visible = False
senddata_piechart.grid.grid_line_color = None
return senddata_piechart

if self.senddata_by_activity_chart is None:
senddata_piechart = figure(
height=500,
sizing_mode="scale_both",
title="Send data, by activity",
tools="hover",
tooltips="@{activity}: @text",
x_range=(-0.5, 1.0),
)
senddata_piechart.wedge(
x=0,
y=1,
radius=0.4,
start_angle=cumsum("angle", include_zero=True),
end_angle=cumsum("angle"),
line_color="white",
fill_color="color",
legend_field="activity",
source=self.sendsrc,
)
senddata_piechart.axis.axis_label = None
senddata_piechart.axis.visible = False
senddata_piechart.grid.grid_line_color = None
self.senddata_by_activity_chart = senddata_piechart


class Contention(DashboardComponent):
Expand Down