4runr-os 2.10.49 → 2.10.50
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/apps/gateway/src/metrics/monitoring-detail.ts +162 -162
- package/apps/gateway/src/middleware/log-capture.ts +70 -70
- package/apps/gateway/src/routes/monitoring.ts +298 -298
- package/mk3-tui/src/app.rs +37 -47
- package/mk3-tui/src/monitoring/mod.rs +439 -439
- package/mk3-tui/src/ui/portal_monitoring.rs +3 -2
- package/package.json +2 -2
package/mk3-tui/src/app.rs
CHANGED
|
@@ -746,7 +746,8 @@ impl App {
|
|
|
746
746
|
ws: &WebSocketClient,
|
|
747
747
|
section: MonitoringSection,
|
|
748
748
|
) {
|
|
749
|
-
if self.state.
|
|
749
|
+
if self.state.pending_gateway_observability_id.is_some()
|
|
750
|
+
|| self.state.pending_monitoring_refresh_id.is_some()
|
|
750
751
|
|| self.state.pending_monitoring_logs_id.is_some()
|
|
751
752
|
|| self.state.pending_monitoring_drill_id.is_some()
|
|
752
753
|
{
|
|
@@ -774,7 +775,8 @@ impl App {
|
|
|
774
775
|
|
|
775
776
|
/// Phase 2: fetch Gateway log buffer (`monitoring.logs`).
|
|
776
777
|
pub fn begin_monitoring_logs_request(&mut self, ws: &WebSocketClient) {
|
|
777
|
-
if self.state.
|
|
778
|
+
if self.state.pending_gateway_observability_id.is_some()
|
|
779
|
+
|| self.state.pending_monitoring_refresh_id.is_some()
|
|
778
780
|
|| self.state.pending_monitoring_logs_id.is_some()
|
|
779
781
|
|| self.state.pending_monitoring_drill_id.is_some()
|
|
780
782
|
{
|
|
@@ -805,7 +807,8 @@ impl App {
|
|
|
805
807
|
ws: &WebSocketClient,
|
|
806
808
|
panel: MetricsDrillPanel,
|
|
807
809
|
) {
|
|
808
|
-
if self.state.
|
|
810
|
+
if self.state.pending_gateway_observability_id.is_some()
|
|
811
|
+
|| self.state.pending_monitoring_refresh_id.is_some()
|
|
809
812
|
|| self.state.pending_monitoring_logs_id.is_some()
|
|
810
813
|
|| self.state.pending_monitoring_drill_id.is_some()
|
|
811
814
|
{
|
|
@@ -835,7 +838,8 @@ impl App {
|
|
|
835
838
|
|
|
836
839
|
/// Phase 3: dependency pools + queue counts (`dependencies/detail`).
|
|
837
840
|
pub fn begin_dependencies_detail_drill(&mut self, ws: &WebSocketClient) {
|
|
838
|
-
if self.state.
|
|
841
|
+
if self.state.pending_gateway_observability_id.is_some()
|
|
842
|
+
|| self.state.pending_monitoring_refresh_id.is_some()
|
|
839
843
|
|| self.state.pending_monitoring_logs_id.is_some()
|
|
840
844
|
|| self.state.pending_monitoring_drill_id.is_some()
|
|
841
845
|
{
|
|
@@ -863,7 +867,8 @@ impl App {
|
|
|
863
867
|
|
|
864
868
|
/// Phase 4: run local CLI/host diagnostics for the System section.
|
|
865
869
|
pub fn begin_system_diagnostics_request(&mut self, ws: &WebSocketClient) {
|
|
866
|
-
if self.state.
|
|
870
|
+
if self.state.pending_gateway_observability_id.is_some()
|
|
871
|
+
|| self.state.pending_monitoring_refresh_id.is_some()
|
|
867
872
|
|| self.state.pending_monitoring_logs_id.is_some()
|
|
868
873
|
|| self.state.pending_monitoring_drill_id.is_some()
|
|
869
874
|
{
|
|
@@ -931,24 +936,15 @@ impl App {
|
|
|
931
936
|
self.request_immediate_render("portal_obs_scroll");
|
|
932
937
|
}
|
|
933
938
|
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
fn cancel_portal_monitoring_aux_requests(&mut self) {
|
|
939
|
+
fn cancel_portal_monitoring_requests(&mut self) {
|
|
940
|
+
self.state.pending_gateway_observability_id = None;
|
|
937
941
|
self.state.pending_monitoring_refresh_id = None;
|
|
938
942
|
self.state.pending_monitoring_logs_id = None;
|
|
939
943
|
self.state.pending_monitoring_drill_id = None;
|
|
944
|
+
self.state.portal_monitoring.loading = false;
|
|
940
945
|
self.state.portal_monitoring.section_refresh_loading = None;
|
|
941
946
|
self.state.portal_monitoring.logs_fetch_loading = false;
|
|
942
947
|
self.state.portal_monitoring.metrics_drill_loading = false;
|
|
943
|
-
if self.state.pending_gateway_observability_id.is_none() {
|
|
944
|
-
self.state.portal_monitoring.loading = false;
|
|
945
|
-
}
|
|
946
|
-
}
|
|
947
|
-
|
|
948
|
-
fn cancel_portal_monitoring_requests(&mut self) {
|
|
949
|
-
self.cancel_portal_monitoring_aux_requests();
|
|
950
|
-
self.state.pending_gateway_observability_id = None;
|
|
951
|
-
self.state.portal_monitoring.loading = false;
|
|
952
948
|
}
|
|
953
949
|
|
|
954
950
|
/// CLI ↔ TUI WebSocket lost: drop Gateway link UI and leave Portal Monitoring / Connection Portal so the session does not appear still "connected".
|
|
@@ -2815,7 +2811,7 @@ impl App {
|
|
|
2815
2811
|
.monitoring_state
|
|
2816
2812
|
.expand_section(MonitoringSection::Logs);
|
|
2817
2813
|
if let Some(ws) = ws_client {
|
|
2818
|
-
self.
|
|
2814
|
+
self.cancel_portal_monitoring_requests();
|
|
2819
2815
|
self.begin_monitoring_logs_request(ws);
|
|
2820
2816
|
let inner_h = self.state.portal_monitoring.viewport_lines.max(5);
|
|
2821
2817
|
let sw = self.state.portal_monitoring.summary_clip_width.max(24);
|
|
@@ -2895,7 +2891,7 @@ impl App {
|
|
|
2895
2891
|
MonitoringSection::Dependencies,
|
|
2896
2892
|
);
|
|
2897
2893
|
if let Some(ws) = ws_client {
|
|
2898
|
-
self.
|
|
2894
|
+
self.cancel_portal_monitoring_requests();
|
|
2899
2895
|
self.begin_dependencies_detail_drill(ws);
|
|
2900
2896
|
self.request_immediate_render("portal_deps_drill");
|
|
2901
2897
|
} else {
|
|
@@ -2907,33 +2903,9 @@ impl App {
|
|
|
2907
2903
|
}
|
|
2908
2904
|
|
|
2909
2905
|
// Phase 4: diagnostics for the local CLI/TUI bridge + Gateway reachability.
|
|
2910
|
-
// S toggles
|
|
2911
|
-
//
|
|
2906
|
+
// S toggles: show diagnostics → hide (remove override). While loading, S aborts the
|
|
2907
|
+
// in-flight drill so a later S can fetch again (avoids orphaned request ids vs cancel+refetch).
|
|
2912
2908
|
if key.code == KeyCode::Char('s') || key.code == KeyCode::Char('S') {
|
|
2913
|
-
let system_lines_open = self
|
|
2914
|
-
.state
|
|
2915
|
-
.portal_monitoring
|
|
2916
|
-
.section_overrides
|
|
2917
|
-
.contains_key(&MonitoringSection::System);
|
|
2918
|
-
let system_request_inflight = self
|
|
2919
|
-
.state
|
|
2920
|
-
.portal_monitoring
|
|
2921
|
-
.section_refresh_loading
|
|
2922
|
-
== Some(MonitoringSection::System);
|
|
2923
|
-
if system_lines_open && !system_request_inflight {
|
|
2924
|
-
self.state
|
|
2925
|
-
.advanced_monitoring
|
|
2926
|
-
.monitoring_state
|
|
2927
|
-
.collapse_section(MonitoringSection::System);
|
|
2928
|
-
self.state
|
|
2929
|
-
.portal_monitoring
|
|
2930
|
-
.section_overrides
|
|
2931
|
-
.remove(&MonitoringSection::System);
|
|
2932
|
-
self.state.portal_monitoring.scroll_offset = 0;
|
|
2933
|
-
self.state.portal_monitoring.error = None;
|
|
2934
|
-
self.request_immediate_render("portal_system_diagnostics_close");
|
|
2935
|
-
return Ok(false);
|
|
2936
|
-
}
|
|
2937
2909
|
self.state
|
|
2938
2910
|
.advanced_monitoring
|
|
2939
2911
|
.monitoring_state
|
|
@@ -2950,8 +2922,26 @@ impl App {
|
|
|
2950
2922
|
inner_h,
|
|
2951
2923
|
MonitoringSection::System,
|
|
2952
2924
|
);
|
|
2925
|
+
|
|
2926
|
+
let pm = &mut self.state.portal_monitoring;
|
|
2927
|
+
let has_system_diag =
|
|
2928
|
+
pm.section_overrides.contains_key(&MonitoringSection::System);
|
|
2929
|
+
let system_loading = pm.section_refresh_loading == Some(MonitoringSection::System);
|
|
2930
|
+
|
|
2931
|
+
if has_system_diag && !system_loading {
|
|
2932
|
+
pm.section_overrides.remove(&MonitoringSection::System);
|
|
2933
|
+
self.request_immediate_render("portal_system_dismiss");
|
|
2934
|
+
return Ok(false);
|
|
2935
|
+
}
|
|
2936
|
+
if system_loading {
|
|
2937
|
+
self.state.pending_monitoring_drill_id = None;
|
|
2938
|
+
self.state.portal_monitoring.section_refresh_loading = None;
|
|
2939
|
+
self.request_immediate_render("portal_system_abort_fetch");
|
|
2940
|
+
return Ok(false);
|
|
2941
|
+
}
|
|
2942
|
+
|
|
2953
2943
|
if let Some(ws) = ws_client {
|
|
2954
|
-
self.
|
|
2944
|
+
self.cancel_portal_monitoring_requests();
|
|
2955
2945
|
self.begin_system_diagnostics_request(ws);
|
|
2956
2946
|
self.request_immediate_render("portal_system_diagnostics");
|
|
2957
2947
|
} else {
|
|
@@ -2980,7 +2970,7 @@ impl App {
|
|
|
2980
2970
|
MonitoringSection::Metrics,
|
|
2981
2971
|
);
|
|
2982
2972
|
if let Some(ws) = ws_client {
|
|
2983
|
-
self.
|
|
2973
|
+
self.cancel_portal_monitoring_requests();
|
|
2984
2974
|
let panel = self
|
|
2985
2975
|
.state
|
|
2986
2976
|
.portal_monitoring
|