Improve dashboard spacing and steam context
This commit is contained in:
@@ -308,18 +308,19 @@ class ReactorDashboard:
|
|||||||
log_rows = max(2, min(len(self.log_buffer) + 2, 8))
|
log_rows = max(2, min(len(self.log_buffer) + 2, 8))
|
||||||
status_height = min(height - 1, max(min_status, min_status + log_rows))
|
status_height = min(height - 1, max(min_status, min_status + log_rows))
|
||||||
data_height = max(1, height - status_height)
|
data_height = max(1, height - status_height)
|
||||||
|
gap = 2
|
||||||
right_width = max(28, width // 3)
|
right_width = max(28, width // 3)
|
||||||
left_width = width - right_width
|
left_width = width - right_width - gap
|
||||||
if left_width < 50:
|
if left_width < 50:
|
||||||
left_width = min(50, width - 18)
|
left_width = min(50, width - (18 + gap))
|
||||||
right_width = width - left_width
|
right_width = width - left_width - gap
|
||||||
|
|
||||||
data_height = max(1, data_height)
|
data_height = max(1, data_height)
|
||||||
left_width = max(1, left_width)
|
left_width = max(1, left_width)
|
||||||
right_width = max(1, right_width)
|
right_width = max(1, right_width)
|
||||||
|
|
||||||
data_win = stdscr.derwin(data_height, left_width, 0, 0)
|
data_win = stdscr.derwin(data_height, left_width, 0, 0)
|
||||||
help_win = stdscr.derwin(data_height, right_width, 0, left_width)
|
help_win = stdscr.derwin(data_height, right_width, 0, left_width + gap)
|
||||||
status_win = stdscr.derwin(status_height, width, data_height, 0)
|
status_win = stdscr.derwin(status_height, width, data_height, 0)
|
||||||
|
|
||||||
self._draw_data_panel(data_win, state)
|
self._draw_data_panel(data_win, state)
|
||||||
@@ -341,6 +342,8 @@ class ReactorDashboard:
|
|||||||
right_win = win.derwin(inner_height, right_width, 1, 1 + left_width)
|
right_win = win.derwin(inner_height, right_width, 1, 1 + left_width)
|
||||||
for row in range(1, height - 1):
|
for row in range(1, height - 1):
|
||||||
win.addch(row, 1 + left_width, curses.ACS_VLINE)
|
win.addch(row, 1 + left_width, curses.ACS_VLINE)
|
||||||
|
if left_width + 1 < width - 1:
|
||||||
|
win.addch(row, 1 + left_width + 1, curses.ACS_VLINE)
|
||||||
|
|
||||||
left_win.erase()
|
left_win.erase()
|
||||||
right_win.erase()
|
right_win.erase()
|
||||||
@@ -404,7 +407,7 @@ class ReactorDashboard:
|
|||||||
f"{state.secondary_loop.mass_flow_rate:7.0f}/{self.reactor.secondary_pump.nominal_flow * len(self.reactor.secondary_pump_units):.0f} kg/s",
|
f"{state.secondary_loop.mass_flow_rate:7.0f}/{self.reactor.secondary_pump.nominal_flow * len(self.reactor.secondary_pump_units):.0f} kg/s",
|
||||||
),
|
),
|
||||||
("Level", f"{state.secondary_loop.level*100:6.1f}%"),
|
("Level", f"{state.secondary_loop.level*100:6.1f}%"),
|
||||||
("Inlet Temp", f"{state.secondary_loop.temperature_in:7.1f} K (Target {constants.PRIMARY_OUTLET_TARGET_K:4.0f})"),
|
("Inlet Temp", f"{state.secondary_loop.temperature_in:7.1f} K (Target {constants.SECONDARY_OUTLET_TARGET_K:4.0f})"),
|
||||||
("Outlet Temp", f"{state.secondary_loop.temperature_out:7.1f} K (Target {constants.SECONDARY_OUTLET_TARGET_K:4.0f})"),
|
("Outlet Temp", f"{state.secondary_loop.temperature_out:7.1f} K (Target {constants.SECONDARY_OUTLET_TARGET_K:4.0f})"),
|
||||||
("Pressure", f"{state.secondary_loop.pressure:5.2f}/{constants.MAX_PRESSURE:4.1f} MPa"),
|
("Pressure", f"{state.secondary_loop.pressure:5.2f}/{constants.MAX_PRESSURE:4.1f} MPa"),
|
||||||
("Steam Quality", f"{state.secondary_loop.steam_quality:5.2f}/1.00"),
|
("Steam Quality", f"{state.secondary_loop.steam_quality:5.2f}/1.00"),
|
||||||
@@ -440,6 +443,10 @@ class ReactorDashboard:
|
|||||||
("Load", f"{self._total_load_supplied(state):7.1f}/{self._total_load_demand(state):7.1f} MW"),
|
("Load", f"{self._total_load_supplied(state):7.1f}/{self._total_load_demand(state):7.1f} MW"),
|
||||||
("Consumer", f"{consumer_status}"),
|
("Consumer", f"{consumer_status}"),
|
||||||
("Demand", f"{consumer_demand:7.1f} MW"),
|
("Demand", f"{consumer_demand:7.1f} MW"),
|
||||||
|
(
|
||||||
|
"Steam",
|
||||||
|
f"P={state.secondary_loop.pressure:4.2f} MPa q={state.secondary_loop.steam_quality:4.2f} mdot={state.secondary_loop.mass_flow_rate:6.0f} kg/s",
|
||||||
|
),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
right_y = self._draw_section(right_win, right_y, "Generators", self._generator_lines(state))
|
right_y = self._draw_section(right_win, right_y, "Generators", self._generator_lines(state))
|
||||||
@@ -745,7 +752,16 @@ class _DashboardLogHandler(logging.Handler):
|
|||||||
def __init__(self, buffer: deque[str]) -> None:
|
def __init__(self, buffer: deque[str]) -> None:
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.buffer = buffer
|
self.buffer = buffer
|
||||||
|
self._last_msg: str | None = None
|
||||||
|
self._repeat_count: int = 0
|
||||||
|
|
||||||
def emit(self, record: logging.LogRecord) -> None:
|
def emit(self, record: logging.LogRecord) -> None:
|
||||||
msg = self.format(record)
|
msg = self.format(record)
|
||||||
|
if msg == self._last_msg:
|
||||||
|
self._repeat_count += 1
|
||||||
|
if self._repeat_count > 3:
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
self._last_msg = msg
|
||||||
|
self._repeat_count = 0
|
||||||
self.buffer.append(msg)
|
self.buffer.append(msg)
|
||||||
|
|||||||
Reference in New Issue
Block a user