feat(gui): Add Log Management panel with manual whitelisting

This commit is contained in:
2026-02-26 09:12:58 -05:00
parent 8b7588323e
commit 7d521239ac

View File

@@ -181,6 +181,7 @@ class App:
"Discussion Hub": True, "Discussion Hub": True,
"Operations Hub": True, "Operations Hub": True,
"Theme": True, "Theme": True,
"Log Management": False,
"Diagnostics": False, "Diagnostics": False,
} }
saved = self.config.get("gui", {}).get("show_windows", {}) saved = self.config.get("gui", {}).get("show_windows", {})
@@ -1407,6 +1408,9 @@ class App:
imgui.end_tab_bar() imgui.end_tab_bar()
imgui.end() imgui.end()
if self.show_windows.get("Log Management", False):
self._render_log_management()
if self.show_windows["Diagnostics"]: if self.show_windows["Diagnostics"]:
exp, self.show_windows["Diagnostics"] = imgui.begin("Diagnostics", self.show_windows["Diagnostics"]) exp, self.show_windows["Diagnostics"] = imgui.begin("Diagnostics", self.show_windows["Diagnostics"])
if exp: if exp:
@@ -1712,6 +1716,75 @@ class App:
if ch: if ch:
self.ui_agent_tools[t_name] = val self.ui_agent_tools[t_name] = val
def _render_log_management(self):
exp, self.show_windows["Log Management"] = imgui.begin("Log Management", self.show_windows["Log Management"])
if not exp:
imgui.end()
return
registry = LogRegistry("logs/log_registry.toml")
sessions = registry.data
if imgui.begin_table("sessions_table", 7, imgui.TableFlags_.borders | imgui.TableFlags_.row_bg | imgui.TableFlags_.resizable):
imgui.table_setup_column("Session ID")
imgui.table_setup_column("Start Time")
imgui.table_setup_column("Star")
imgui.table_setup_column("Reason")
imgui.table_setup_column("Size (KB)")
imgui.table_setup_column("Msgs")
imgui.table_setup_column("Actions")
imgui.table_headers_row()
for session_id, s_data in sessions.items():
imgui.table_next_row()
imgui.table_next_column()
imgui.text(session_id)
imgui.table_next_column()
imgui.text(s_data.get("start_time", ""))
imgui.table_next_column()
whitelisted = s_data.get("whitelisted", False)
if whitelisted:
imgui.text_colored(vec4(255, 215, 0), "YES")
else:
imgui.text("NO")
metadata = s_data.get("metadata") or {}
imgui.table_next_column()
imgui.text(metadata.get("reason", ""))
imgui.table_next_column()
imgui.text(str(metadata.get("size_kb", "")))
imgui.table_next_column()
imgui.text(str(metadata.get("message_count", "")))
imgui.table_next_column()
if whitelisted:
if imgui.button(f"Unstar##{session_id}"):
registry.update_session_metadata(
session_id,
message_count=metadata.get("message_count"),
errors=metadata.get("errors"),
size_kb=metadata.get("size_kb"),
whitelisted=False,
reason=metadata.get("reason")
)
else:
if imgui.button(f"Star##{session_id}"):
registry.update_session_metadata(
session_id,
message_count=metadata.get("message_count"),
errors=metadata.get("errors"),
size_kb=metadata.get("size_kb"),
whitelisted=True,
reason="Manually whitelisted"
)
imgui.end_table()
imgui.end()
def _render_files_panel(self): def _render_files_panel(self):
imgui.text("Base Dir") imgui.text("Base Dir")
ch, self.ui_files_base_dir = imgui.input_text("##f_base", self.ui_files_base_dir) ch, self.ui_files_base_dir = imgui.input_text("##f_base", self.ui_files_base_dir)