@serve.zone/dcrouter 17.1.8 → 17.2.1

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.
@@ -37,6 +37,14 @@ import * as appstate from '../../appstate.js';
37
37
  import * as interfaces from '../../../dist_ts_interfaces/index.js';
38
38
  import { viewHostCss } from '../shared/css.js';
39
39
  import {} from '@design.estate/dees-catalog';
40
+ import { appendProtocolConnectionSample, createProtocolConnectionSeries, getLatestHistoryEpochSecond, mergeChartPoints, mergeProtocolConnectionHistory, shouldRestartNetworkActivityTimer, } from './network-activity-history.js';
41
+ const PROTOCOL_COLORS = {
42
+ 'HTTP/1.1': '#1976d2',
43
+ 'HTTP/2': '#388e3c',
44
+ 'HTTP/3': '#7b1fa2',
45
+ 'WebSocket': '#f57c00',
46
+ 'Other': '#757575',
47
+ };
40
48
  let OpsViewNetworkActivity = (() => {
41
49
  let _classDecorators = [customElement('ops-view-network-activity')];
42
50
  let _classDescriptor;
@@ -55,6 +63,12 @@ let OpsViewNetworkActivity = (() => {
55
63
  let _trafficDataOut_decorators;
56
64
  let _trafficDataOut_initializers = [];
57
65
  let _trafficDataOut_extraInitializers = [];
66
+ let _frontendConnectionSeries_decorators;
67
+ let _frontendConnectionSeries_initializers = [];
68
+ let _frontendConnectionSeries_extraInitializers = [];
69
+ let _backendConnectionSeries_decorators;
70
+ let _backendConnectionSeries_initializers = [];
71
+ let _backendConnectionSeries_extraInitializers = [];
58
72
  var OpsViewNetworkActivity = class extends _classSuper {
59
73
  static { _classThis = this; }
60
74
  static {
@@ -63,16 +77,20 @@ let OpsViewNetworkActivity = (() => {
63
77
  _networkState_decorators = [state()];
64
78
  _trafficDataIn_decorators = [state()];
65
79
  _trafficDataOut_decorators = [state()];
80
+ _frontendConnectionSeries_decorators = [state()];
81
+ _backendConnectionSeries_decorators = [state()];
66
82
  __esDecorate(this, null, _statsState_decorators, { kind: "accessor", name: "statsState", static: false, private: false, access: { has: obj => "statsState" in obj, get: obj => obj.statsState, set: (obj, value) => { obj.statsState = value; } }, metadata: _metadata }, _statsState_initializers, _statsState_extraInitializers);
67
83
  __esDecorate(this, null, _networkState_decorators, { kind: "accessor", name: "networkState", static: false, private: false, access: { has: obj => "networkState" in obj, get: obj => obj.networkState, set: (obj, value) => { obj.networkState = value; } }, metadata: _metadata }, _networkState_initializers, _networkState_extraInitializers);
68
84
  __esDecorate(this, null, _trafficDataIn_decorators, { kind: "accessor", name: "trafficDataIn", static: false, private: false, access: { has: obj => "trafficDataIn" in obj, get: obj => obj.trafficDataIn, set: (obj, value) => { obj.trafficDataIn = value; } }, metadata: _metadata }, _trafficDataIn_initializers, _trafficDataIn_extraInitializers);
69
85
  __esDecorate(this, null, _trafficDataOut_decorators, { kind: "accessor", name: "trafficDataOut", static: false, private: false, access: { has: obj => "trafficDataOut" in obj, get: obj => obj.trafficDataOut, set: (obj, value) => { obj.trafficDataOut = value; } }, metadata: _metadata }, _trafficDataOut_initializers, _trafficDataOut_extraInitializers);
86
+ __esDecorate(this, null, _frontendConnectionSeries_decorators, { kind: "accessor", name: "frontendConnectionSeries", static: false, private: false, access: { has: obj => "frontendConnectionSeries" in obj, get: obj => obj.frontendConnectionSeries, set: (obj, value) => { obj.frontendConnectionSeries = value; } }, metadata: _metadata }, _frontendConnectionSeries_initializers, _frontendConnectionSeries_extraInitializers);
87
+ __esDecorate(this, null, _backendConnectionSeries_decorators, { kind: "accessor", name: "backendConnectionSeries", static: false, private: false, access: { has: obj => "backendConnectionSeries" in obj, get: obj => obj.backendConnectionSeries, set: (obj, value) => { obj.backendConnectionSeries = value; } }, metadata: _metadata }, _backendConnectionSeries_initializers, _backendConnectionSeries_extraInitializers);
70
88
  __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
71
89
  OpsViewNetworkActivity = _classThis = _classDescriptor.value;
72
90
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
73
91
  }
74
- /** How far back the traffic chart shows */
75
- static CHART_WINDOW_MS = 5 * 60 * 1000; // 5 minutes
92
+ /** How far back the realtime charts show */
93
+ static CHART_WINDOW_MS = 10 * 60 * 1000; // 10 minutes
76
94
  /** How often a new data point is added */
77
95
  static UPDATE_INTERVAL_MS = 1000; // 1 second
78
96
  /** Derived: max data points the buffer holds */
@@ -89,13 +107,21 @@ let OpsViewNetworkActivity = (() => {
89
107
  #trafficDataOut_accessor_storage = (__runInitializers(this, _trafficDataIn_extraInitializers), __runInitializers(this, _trafficDataOut_initializers, []));
90
108
  get trafficDataOut() { return this.#trafficDataOut_accessor_storage; }
91
109
  set trafficDataOut(value) { this.#trafficDataOut_accessor_storage = value; }
110
+ #frontendConnectionSeries_accessor_storage = (__runInitializers(this, _trafficDataOut_extraInitializers), __runInitializers(this, _frontendConnectionSeries_initializers, createProtocolConnectionSeries()));
111
+ get frontendConnectionSeries() { return this.#frontendConnectionSeries_accessor_storage; }
112
+ set frontendConnectionSeries(value) { this.#frontendConnectionSeries_accessor_storage = value; }
113
+ #backendConnectionSeries_accessor_storage = (__runInitializers(this, _frontendConnectionSeries_extraInitializers), __runInitializers(this, _backendConnectionSeries_initializers, createProtocolConnectionSeries()));
114
+ get backendConnectionSeries() { return this.#backendConnectionSeries_accessor_storage; }
115
+ set backendConnectionSeries(value) { this.#backendConnectionSeries_accessor_storage = value; }
92
116
  // Track if we need to update the chart to avoid unnecessary re-renders
93
- lastChartUpdate = (__runInitializers(this, _trafficDataOut_extraInitializers), 0);
117
+ lastChartUpdate = (__runInitializers(this, _backendConnectionSeries_extraInitializers), 0);
94
118
  chartUpdateThreshold = OpsViewNetworkActivity.UPDATE_INTERVAL_MS; // Minimum ms between chart updates
95
119
  trafficUpdateTimer = null;
96
120
  requestsPerSecHistory = []; // Track requests/sec over time for trend
97
- historyLoaded = false; // Whether server-side throughput history has been loaded
98
121
  visibilityHandler = null;
122
+ lastThroughputHistoryEpochSecond = 0;
123
+ lastFrontendHistoryEpochSecond = 0;
124
+ lastBackendHistoryEpochSecond = 0;
99
125
  constructor() {
100
126
  super();
101
127
  this.subscribeToStateParts();
@@ -111,7 +137,16 @@ let OpsViewNetworkActivity = (() => {
111
137
  this.stopTrafficUpdateTimer();
112
138
  }
113
139
  else {
114
- this.startTrafficUpdateTimer();
140
+ void appstate.networkStatePart
141
+ .dispatchAction(appstate.fetchNetworkStatsAction, null)
142
+ .catch((error) => {
143
+ console.error('Failed to refresh network history after visibility resume:', error);
144
+ })
145
+ .finally(() => {
146
+ if (shouldRestartNetworkActivityTimer(this.isConnected, document.hidden)) {
147
+ this.startTrafficUpdateTimer();
148
+ }
149
+ });
115
150
  }
116
151
  };
117
152
  document.addEventListener('visibilitychange', this.visibilityHandler);
@@ -152,45 +187,58 @@ let OpsViewNetworkActivity = (() => {
152
187
  this.trafficDataIn = [...emptyData];
153
188
  this.trafficDataOut = emptyData.map(point => ({ ...point }));
154
189
  }
155
- /**
156
- * Load server-side throughput history into the chart.
157
- * Called once when history data first arrives from the Rust engine.
158
- * This pre-populates the chart so users see historical data immediately
159
- * instead of starting from all zeros.
160
- */
161
- loadThroughputHistory() {
162
- const history = this.networkState.throughputHistory;
163
- if (!history || history.length === 0)
190
+ mergeThroughputHistory() {
191
+ const history = this.networkState.throughputHistory || [];
192
+ const latestHistoryEpochSecond = getLatestHistoryEpochSecond(history);
193
+ if (latestHistoryEpochSecond <= this.lastThroughputHistoryEpochSecond)
164
194
  return;
165
- this.historyLoaded = true;
166
- // Convert history points to chart data format (bytes/sec → Mbit/s)
167
- const historyIn = history.map(p => ({
168
- x: new Date(p.timestamp).toISOString(),
169
- y: Math.round((p.in * 8) / 1000000 * 10) / 10,
195
+ const canonicalIn = history.map((point) => ({
196
+ x: new Date(point.timestamp).toISOString(),
197
+ y: Math.round(((point.in * 8) / 1000000) * 10) / 10,
170
198
  }));
171
- const historyOut = history.map(p => ({
172
- x: new Date(p.timestamp).toISOString(),
173
- y: Math.round((p.out * 8) / 1000000 * 10) / 10,
199
+ const canonicalOut = history.map((point) => ({
200
+ x: new Date(point.timestamp).toISOString(),
201
+ y: Math.round(((point.out * 8) / 1000000) * 10) / 10,
174
202
  }));
175
- const { MAX_DATA_POINTS, UPDATE_INTERVAL_MS } = OpsViewNetworkActivity;
176
- // Use history as the chart data, keeping the most recent points within the window
177
- const sliceStart = Math.max(0, historyIn.length - MAX_DATA_POINTS);
178
- this.trafficDataIn = historyIn.slice(sliceStart);
179
- this.trafficDataOut = historyOut.slice(sliceStart);
180
- // If fewer than MAX_DATA_POINTS, pad the front with zeros
181
- if (this.trafficDataIn.length < MAX_DATA_POINTS) {
182
- const now = Date.now();
183
- const padCount = MAX_DATA_POINTS - this.trafficDataIn.length;
184
- const firstTimestamp = this.trafficDataIn.length > 0
185
- ? new Date(this.trafficDataIn[0].x).getTime()
186
- : now;
187
- const padIn = Array.from({ length: padCount }, (_, i) => ({
188
- x: new Date(firstTimestamp - ((padCount - i) * UPDATE_INTERVAL_MS)).toISOString(),
189
- y: 0,
190
- }));
191
- const padOut = padIn.map(p => ({ ...p }));
192
- this.trafficDataIn = [...padIn, ...this.trafficDataIn];
193
- this.trafficDataOut = [...padOut, ...this.trafficDataOut];
203
+ this.trafficDataIn = mergeChartPoints(this.trafficDataIn, canonicalIn, OpsViewNetworkActivity.MAX_DATA_POINTS);
204
+ this.trafficDataOut = mergeChartPoints(this.trafficDataOut, canonicalOut, OpsViewNetworkActivity.MAX_DATA_POINTS);
205
+ this.lastThroughputHistoryEpochSecond = latestHistoryEpochSecond;
206
+ }
207
+ getProtocolCounts(distributionArg) {
208
+ return {
209
+ 'HTTP/1.1': distributionArg.h1Active,
210
+ 'HTTP/2': distributionArg.h2Active,
211
+ 'HTTP/3': distributionArg.h3Active,
212
+ 'WebSocket': distributionArg.wsActive,
213
+ 'Other': distributionArg.otherActive,
214
+ };
215
+ }
216
+ getProtocolSeriesWithColors(seriesArg) {
217
+ return seriesArg.map((series) => ({
218
+ ...series,
219
+ color: series.name === 'Total Active' ? '#ef4444' : (PROTOCOL_COLORS[series.name] ?? '#757575'),
220
+ }));
221
+ }
222
+ mergeProtocolConnectionHistories() {
223
+ const frontendHistory = this.networkState.frontendConnectionHistory || [];
224
+ const latestFrontendEpochSecond = getLatestHistoryEpochSecond(frontendHistory);
225
+ if (latestFrontendEpochSecond > this.lastFrontendHistoryEpochSecond) {
226
+ this.frontendConnectionSeries = mergeProtocolConnectionHistory(this.frontendConnectionSeries, frontendHistory, OpsViewNetworkActivity.MAX_DATA_POINTS);
227
+ this.lastFrontendHistoryEpochSecond = latestFrontendEpochSecond;
228
+ }
229
+ const backendHistory = this.networkState.backendConnectionHistory || [];
230
+ const latestBackendEpochSecond = getLatestHistoryEpochSecond(backendHistory);
231
+ if (latestBackendEpochSecond > this.lastBackendHistoryEpochSecond) {
232
+ this.backendConnectionSeries = mergeProtocolConnectionHistory(this.backendConnectionSeries, backendHistory, OpsViewNetworkActivity.MAX_DATA_POINTS);
233
+ this.lastBackendHistoryEpochSecond = latestBackendEpochSecond;
234
+ }
235
+ }
236
+ addProtocolConnectionDataPoints(timestampArg) {
237
+ if (this.networkState.frontendProtocols) {
238
+ this.frontendConnectionSeries = appendProtocolConnectionSample(this.frontendConnectionSeries, timestampArg, this.getProtocolCounts(this.networkState.frontendProtocols), OpsViewNetworkActivity.MAX_DATA_POINTS);
239
+ }
240
+ if (this.networkState.backendProtocols) {
241
+ this.backendConnectionSeries = appendProtocolConnectionSample(this.backendConnectionSeries, timestampArg, this.getProtocolCounts(this.networkState.backendProtocols), OpsViewNetworkActivity.MAX_DATA_POINTS);
194
242
  }
195
243
  }
196
244
  static styles = [
@@ -307,9 +355,17 @@ let OpsViewNetworkActivity = (() => {
307
355
 
308
356
  .protocolChartGrid {
309
357
  display: grid;
310
- grid-template-columns: repeat(2, 1fr);
358
+ grid-template-columns: 1fr;
359
+ gap: 16px;
360
+ }
361
+
362
+ .protocolChartColumn {
363
+ display: flex;
364
+ flex-direction: column;
311
365
  gap: 16px;
366
+ min-width: 0;
312
367
  }
368
+
313
369
  `,
314
370
  ];
315
371
  render() {
@@ -576,13 +632,7 @@ let OpsViewNetworkActivity = (() => {
576
632
  renderProtocolCharts() {
577
633
  const fp = this.networkState.frontendProtocols;
578
634
  const bp = this.networkState.backendProtocols;
579
- const protoColors = {
580
- 'HTTP/1.1': '#1976d2',
581
- 'HTTP/2': '#388e3c',
582
- 'HTTP/3': '#7b1fa2',
583
- 'WebSocket': '#f57c00',
584
- 'Other': '#757575',
585
- };
635
+ const protoColors = PROTOCOL_COLORS;
586
636
  const buildDonutData = (dist) => {
587
637
  if (!dist)
588
638
  return [];
@@ -603,22 +653,40 @@ let OpsViewNetworkActivity = (() => {
603
653
  const backendData = buildDonutData(bp);
604
654
  return html `
605
655
  <div class="protocolChartGrid">
606
- <dees-chart-donut
607
- .label=${'Frontend Protocols'}
608
- .data=${frontendData.length > 0 ? frontendData : [{ name: 'No Traffic', value: 1, color: '#757575' }]}
609
- .showLegend=${true}
610
- .showLabels=${true}
611
- .innerRadiusPercent=${'55%'}
612
- .valueFormatter=${(val) => `${val} active`}
613
- ></dees-chart-donut>
614
- <dees-chart-donut
615
- .label=${'Backend Protocols'}
616
- .data=${backendData.length > 0 ? backendData : [{ name: 'No Traffic', value: 1, color: '#757575' }]}
617
- .showLegend=${true}
618
- .showLabels=${true}
619
- .innerRadiusPercent=${'55%'}
620
- .valueFormatter=${(val) => `${val} active`}
621
- ></dees-chart-donut>
656
+ <div class="protocolChartColumn">
657
+ <dees-chart-donut
658
+ .label=${'Frontend Protocols'}
659
+ .data=${frontendData.length > 0 ? frontendData : [{ name: 'No Traffic', value: 1, color: '#757575' }]}
660
+ .showLegend=${true}
661
+ .showLabels=${true}
662
+ .innerRadiusPercent=${'55%'}
663
+ .valueFormatter=${(val) => `${val} active`}
664
+ ></dees-chart-donut>
665
+ <dees-chart-area
666
+ .label=${'Frontend Active Connections'}
667
+ .series=${this.getProtocolSeriesWithColors(this.frontendConnectionSeries)}
668
+ .realtimeMode=${true}
669
+ .rollingWindow=${OpsViewNetworkActivity.CHART_WINDOW_MS}
670
+ .yAxisFormatter=${(val) => `${Math.round(val)} active`}
671
+ ></dees-chart-area>
672
+ </div>
673
+ <div class="protocolChartColumn">
674
+ <dees-chart-donut
675
+ .label=${'Backend Protocols'}
676
+ .data=${backendData.length > 0 ? backendData : [{ name: 'No Traffic', value: 1, color: '#757575' }]}
677
+ .showLegend=${true}
678
+ .showLabels=${true}
679
+ .innerRadiusPercent=${'55%'}
680
+ .valueFormatter=${(val) => `${val} active`}
681
+ ></dees-chart-donut>
682
+ <dees-chart-area
683
+ .label=${'Backend Active Connections'}
684
+ .series=${this.getProtocolSeriesWithColors(this.backendConnectionSeries)}
685
+ .realtimeMode=${true}
686
+ .rollingWindow=${OpsViewNetworkActivity.CHART_WINDOW_MS}
687
+ .yAxisFormatter=${(val) => `${Math.round(val)} active`}
688
+ ></dees-chart-area>
689
+ </div>
622
690
  </div>
623
691
  `;
624
692
  }
@@ -962,10 +1030,8 @@ let OpsViewNetworkActivity = (() => {
962
1030
  if (this.requestsPerSecHistory.length > 20) {
963
1031
  this.requestsPerSecHistory.shift();
964
1032
  }
965
- // Load server-side throughput history into chart (once)
966
- if (!this.historyLoaded && this.networkState.throughputHistory && this.networkState.throughputHistory.length > 0) {
967
- this.loadThroughputHistory();
968
- }
1033
+ this.mergeThroughputHistory();
1034
+ this.mergeProtocolConnectionHistories();
969
1035
  }
970
1036
  startTrafficUpdateTimer() {
971
1037
  this.stopTrafficUpdateTimer(); // Clear any existing timer
@@ -996,13 +1062,9 @@ let OpsViewNetworkActivity = (() => {
996
1062
  x: timestamp,
997
1063
  y: Math.round(throughputOutMbps * 10) / 10
998
1064
  };
999
- // In-place mutation then reassign for Lit reactivity (avoids 4 intermediate arrays)
1000
- if (this.trafficDataIn.length >= OpsViewNetworkActivity.MAX_DATA_POINTS) {
1001
- this.trafficDataIn.shift();
1002
- this.trafficDataOut.shift();
1003
- }
1004
- this.trafficDataIn = [...this.trafficDataIn, newDataPointIn];
1005
- this.trafficDataOut = [...this.trafficDataOut, newDataPointOut];
1065
+ this.trafficDataIn = mergeChartPoints(this.trafficDataIn, [newDataPointIn], OpsViewNetworkActivity.MAX_DATA_POINTS);
1066
+ this.trafficDataOut = mergeChartPoints(this.trafficDataOut, [newDataPointOut], OpsViewNetworkActivity.MAX_DATA_POINTS);
1067
+ this.addProtocolConnectionDataPoints(timestamp);
1006
1068
  this.lastChartUpdate = now;
1007
1069
  }
1008
1070
  stopTrafficUpdateTimer() {
@@ -1018,4 +1080,4 @@ let OpsViewNetworkActivity = (() => {
1018
1080
  return OpsViewNetworkActivity = _classThis;
1019
1081
  })();
1020
1082
  export { OpsViewNetworkActivity };
1021
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BzLXZpZXctbmV0d29yay1hY3Rpdml0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzX3dlYi9lbGVtZW50cy9uZXR3b3JrL29wcy12aWV3LW5ldHdvcmstYWN0aXZpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQXVCLEdBQUcsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDdEksT0FBTyxLQUFLLFFBQVEsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEtBQUssVUFBVSxNQUFNLHNDQUFzQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMvQyxPQUFPLEVBQW1CLE1BQU0sNkJBQTZCLENBQUM7SUFTakQsc0JBQXNCOzRCQURsQyxhQUFhLENBQUMsMkJBQTJCLENBQUM7Ozs7c0JBQ0MsV0FBVzs7Ozs7Ozs7Ozs7OztzQ0FBbkIsU0FBUSxXQUFXOzs7O3NDQVFwRCxLQUFLLEVBQUU7d0NBR1AsS0FBSyxFQUFFO3lDQUlQLEtBQUssRUFBRTswQ0FHUCxLQUFLLEVBQUU7WUFUUixtTEFBUyxVQUFVLDZCQUFWLFVBQVUsK0ZBQXVDO1lBRzFELHlMQUFTLFlBQVksNkJBQVosWUFBWSxtR0FBeUM7WUFJOUQsNExBQVMsYUFBYSw2QkFBYixhQUFhLHFHQUFnRDtZQUd0RSwrTEFBUyxjQUFjLDZCQUFkLGNBQWMsdUdBQWdEO1lBbkJ6RSw2S0FtL0JDOzs7O1FBbC9CQywyQ0FBMkM7UUFDbkMsTUFBTSxDQUFVLGVBQWUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLFlBQVk7UUFDckUsMENBQTBDO1FBQ2xDLE1BQU0sQ0FBVSxrQkFBa0IsR0FBRyxJQUFJLENBQUMs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
1083
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BzLXZpZXctbmV0d29yay1hY3Rpdml0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzX3dlYi9lbGVtZW50cy9uZXR3b3JrL29wcy12aWV3LW5ldHdvcmstYWN0aXZpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQXVCLEdBQUcsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDdEksT0FBTyxLQUFLLFFBQVEsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEtBQUssVUFBVSxNQUFNLHNDQUFzQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMvQyxPQUFPLEVBQW1CLE1BQU0sNkJBQTZCLENBQUM7QUFFOUQsT0FBTyxFQUNMLDhCQUE4QixFQUM5Qiw4QkFBOEIsRUFDOUIsMkJBQTJCLEVBQzNCLGdCQUFnQixFQUNoQiw4QkFBOEIsRUFDOUIsaUNBQWlDLEdBR2xDLE1BQU0sK0JBQStCLENBQUM7QUFFdkMsTUFBTSxlQUFlLEdBQTJCO0lBQzlDLFVBQVUsRUFBRSxTQUFTO0lBQ3JCLFFBQVEsRUFBRSxTQUFTO0lBQ25CLFFBQVEsRUFBRSxTQUFTO0lBQ25CLFdBQVcsRUFBRSxTQUFTO0lBQ3RCLE9BQU8sRUFBRSxTQUFTO0NBQ25CLENBQUM7SUFTVyxzQkFBc0I7NEJBRGxDLGFBQWEsQ0FBQywyQkFBMkIsQ0FBQzs7OztzQkFDQyxXQUFXOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O3NDQUFuQixTQUFRLFdBQVc7Ozs7c0NBUXBELEtBQUssRUFBRTt3Q0FHUCxLQUFLLEVBQUU7eUNBSVAsS0FBSyxFQUFFOzBDQUdQLEtBQUssRUFBRTtvREFHUCxLQUFLLEVBQUU7bURBR1AsS0FBSyxFQUFFO1lB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QyxPQUFPLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQzs7OztzQkFJbkMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDO2lCQUM3QyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUM7Ozs7c0JBSW5DLFVBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQztpQkFDN0MsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDOzs7O3NCQUluQyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUM7aUJBQzdDLFVBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQzs7OztzQkFJbkMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDO2lCQUM3QyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUM7Ozs7c0JBSW5DLFVBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQztpQkFDN0MsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDOzs7O3NCQUluQyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUM7aUJBQzdDLFVBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQzs7OztzQkFJbkMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDO2lCQUM3QyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUM7Ozs7Ozs7Ozs7c0JBVW5DLFVBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQztpQkFDN0MsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDOzs7Ozs7Ozs7Ozs7OztzQkFjbkMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDO2lCQUM3QyxVQUFVLENBQUMsT0FBTyxDQUFD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
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@serve.zone/dcrouter",
3
3
  "private": false,
4
- "version": "17.1.8",
4
+ "version": "17.2.1",
5
5
  "description": "A multifaceted routing service handling mail and SMS delivery functions.",
6
6
  "type": "module",
7
7
  "bin": {
@@ -40,7 +40,7 @@
40
40
  "@push.rocks/smartbucket": "^4.6.1",
41
41
  "@push.rocks/smartchallenge": "^1.1.0",
42
42
  "@push.rocks/smartdata": "^7.3.1",
43
- "@push.rocks/smartdb": "^2.13.2",
43
+ "@push.rocks/smartdb": "^2.14.0",
44
44
  "@push.rocks/smartdns": "^7.12.1",
45
45
  "@push.rocks/smartfs": "^1.6.0",
46
46
  "@push.rocks/smartguard": "^3.1.2",
@@ -53,7 +53,7 @@
53
53
  "@push.rocks/smartnetwork": "^4.8.0",
54
54
  "@push.rocks/smartpath": "^6.0.0",
55
55
  "@push.rocks/smartpromise": "^4.2.4",
56
- "@push.rocks/smartproxy": "^27.18.0",
56
+ "@push.rocks/smartproxy": "^27.19.0",
57
57
  "@push.rocks/smartradius": "^1.3.0",
58
58
  "@push.rocks/smartrequest": "^5.0.4",
59
59
  "@push.rocks/smartrx": "^3.0.12",
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@serve.zone/dcrouter',
6
- version: '17.1.8',
6
+ version: '17.2.1',
7
7
  description: 'A multifaceted routing service handling mail and SMS delivery functions.'
8
8
  }
@@ -3,7 +3,7 @@ import { DcRouter } from '../classes.dcrouter.js';
3
3
  import { MetricsCache } from './classes.metricscache.js';
4
4
  import { SecurityLogger, SecurityEventType } from '../security/classes.securitylogger.js';
5
5
  import { logger } from '../logger.js';
6
- import type { IAsnActivity } from '../../ts_interfaces/data/stats.js';
6
+ import type { IAsnActivity, IProtocolConnectionHistoryPoint } from '../../ts_interfaces/data/stats.js';
7
7
 
8
8
  const NETWORK_STATS_CACHE_TTL_MS = 3_000;
9
9
  const ASN_INTELLIGENCE_CACHE_TTL_MS = 60_000;
@@ -12,6 +12,7 @@ const OBSERVED_IP_SAMPLE_INTERVAL_MS = 60_000;
12
12
  const MAX_ASN_CANDIDATE_IPS = 500;
13
13
  const MAX_OBSERVED_IP_SAMPLE_SIZE = 20;
14
14
  const MAX_SNAPSHOT_LIMIT = 1_000;
15
+ const NETWORK_HISTORY_SECONDS = 600;
15
16
 
16
17
  export class MetricsManager {
17
18
  private metricsLogger: plugins.smartlog.Smartlog;
@@ -655,6 +656,14 @@ export class MetricsManager {
655
656
  public async getNetworkStats() {
656
657
  return this.metricsCache.get('networkStats', async () => {
657
658
  const smartProxy = this.dcRouter.smartProxy;
659
+
660
+ if (smartProxy) {
661
+ try {
662
+ await smartProxy.refreshMetricsHistory(NETWORK_HISTORY_SECONDS);
663
+ } catch (error) {
664
+ logger.log('warn', `SmartProxy history refresh failed: ${(error as Error).message}`);
665
+ }
666
+ }
658
667
  const proxyMetrics = smartProxy ? smartProxy.getMetrics() : null;
659
668
 
660
669
  if (!proxyMetrics) {
@@ -667,6 +676,8 @@ export class MetricsManager {
667
676
  topASNs: [] as IAsnActivity[],
668
677
  totalDataTransferred: { bytesIn: 0, bytesOut: 0 },
669
678
  throughputHistory: [] as Array<{ timestamp: number; in: number; out: number }>,
679
+ frontendConnectionHistory: [] as IProtocolConnectionHistoryPoint[],
680
+ backendConnectionHistory: [] as IProtocolConnectionHistoryPoint[],
670
681
  throughputByIP: new Map<string, { in: number; out: number }>(),
671
682
  requestsPerSecond: 0,
672
683
  requestsTotal: 0,
@@ -701,8 +712,8 @@ export class MetricsManager {
701
712
  bytesOut: proxyMetrics.totals.bytesOut()
702
713
  };
703
714
 
704
- // Get throughput history from Rust engine (up to 300 seconds)
705
- const throughputHistory = proxyMetrics.throughput.history(300);
715
+ // Read the ten-minute histories populated by the bounded Rust history refresh.
716
+ const throughputHistory = proxyMetrics.throughput.history(NETWORK_HISTORY_SECONDS);
706
717
 
707
718
  // Get per-IP throughput
708
719
  const throughputByIP = proxyMetrics.throughput.byIP();
@@ -715,6 +726,8 @@ export class MetricsManager {
715
726
  // Get frontend/backend protocol distribution
716
727
  const frontendProtocols = proxyMetrics.connections.frontendProtocols() ?? null;
717
728
  const backendProtocols = proxyMetrics.connections.backendProtocols() ?? null;
729
+ const frontendConnectionHistory = proxyMetrics.connections.frontendHistory(NETWORK_HISTORY_SECONDS);
730
+ const backendConnectionHistory = proxyMetrics.connections.backendHistory(NETWORK_HISTORY_SECONDS);
718
731
 
719
732
  // Collect backend protocol data
720
733
  const backendMetrics = proxyMetrics.backends.byBackend();
@@ -994,6 +1007,8 @@ export class MetricsManager {
994
1007
  topASNs,
995
1008
  totalDataTransferred,
996
1009
  throughputHistory,
1010
+ frontendConnectionHistory,
1011
+ backendConnectionHistory,
997
1012
  throughputByIP,
998
1013
  requestsPerSecond,
999
1014
  requestsTotal,
@@ -101,6 +101,8 @@ export class SecurityHandler {
101
101
  topASNs: networkStats.topASNs,
102
102
  totalDataTransferred: networkStats.totalDataTransferred,
103
103
  throughputHistory: networkStats.throughputHistory || [],
104
+ frontendConnectionHistory: networkStats.frontendConnectionHistory || [],
105
+ backendConnectionHistory: networkStats.backendConnectionHistory || [],
104
106
  throughputByIP,
105
107
  domainActivity: networkStats.domainActivity || [],
106
108
  requestsPerSecond: networkStats.requestsPerSecond || 0,
@@ -121,6 +123,8 @@ export class SecurityHandler {
121
123
  totalDataTransferred: { bytesIn: 0, bytesOut: 0 },
122
124
  throughputHistory: [],
123
125
  throughputByIP: [],
126
+ frontendConnectionHistory: [],
127
+ backendConnectionHistory: [],
124
128
  domainActivity: [],
125
129
  requestsPerSecond: 0,
126
130
  requestsTotal: 0,
@@ -336,6 +336,8 @@ export class StatsHandler {
336
336
  topASNs: stats.topASNs || [],
337
337
  domainActivity: stats.domainActivity || [],
338
338
  throughputHistory: stats.throughputHistory || [],
339
+ frontendConnectionHistory: stats.frontendConnectionHistory || [],
340
+ backendConnectionHistory: stats.backendConnectionHistory || [],
339
341
  requestsPerSecond: stats.requestsPerSecond || 0,
340
342
  requestsTotal: stats.requestsTotal || 0,
341
343
  backends: stats.backends || [],