opencode-tps-meter 0.1.3 → 0.1.5
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/dist/constants.d.ts +6 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/index.js +66 -39
- package/dist/index.mjs +61 -37
- package/dist/package.json +3 -0
- package/dist/tracker.d.ts +1 -0
- package/dist/tracker.d.ts.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/constants.d.ts
CHANGED
|
@@ -14,6 +14,12 @@ export declare const DEFAULT_ROLLING_WINDOW_MS = 1000;
|
|
|
14
14
|
export declare const MAX_BUFFER_SIZE = 100;
|
|
15
15
|
/** Minimum window duration for TPS calculation (seconds) to avoid division by near-zero */
|
|
16
16
|
export declare const MIN_WINDOW_DURATION_SECONDS = 0.1;
|
|
17
|
+
/** Token count threshold to trigger burst smoothing (tokens) */
|
|
18
|
+
export declare const BURST_TOKEN_THRESHOLD = 120;
|
|
19
|
+
/** Default EWMA half-life (ms) for smoothing normal streaming */
|
|
20
|
+
export declare const DEFAULT_EWMA_HALF_LIFE_MS = 500;
|
|
21
|
+
/** EWMA half-life (ms) applied during bursts */
|
|
22
|
+
export declare const BURST_EWMA_HALF_LIFE_MS = 2000;
|
|
17
23
|
/** Default UI update interval in milliseconds */
|
|
18
24
|
export declare const DEFAULT_UPDATE_INTERVAL_MS = 50;
|
|
19
25
|
/** Minimum interval between toast updates (ms) - prevents UI flooding */
|
package/dist/constants.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,8EAA8E;AAC9E,eAAO,MAAM,kBAAkB,MAAM,CAAC;AAEtC,+DAA+D;AAC/D,eAAO,MAAM,yBAAyB,OAAO,CAAC;AAE9C,mDAAmD;AACnD,eAAO,MAAM,eAAe,MAAM,CAAC;AAEnC,2FAA2F;AAC3F,eAAO,MAAM,2BAA2B,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,8EAA8E;AAC9E,eAAO,MAAM,kBAAkB,MAAM,CAAC;AAEtC,+DAA+D;AAC/D,eAAO,MAAM,yBAAyB,OAAO,CAAC;AAE9C,mDAAmD;AACnD,eAAO,MAAM,eAAe,MAAM,CAAC;AAEnC,2FAA2F;AAC3F,eAAO,MAAM,2BAA2B,MAAM,CAAC;AAE/C,gEAAgE;AAChE,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC,iEAAiE;AACjE,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAE7C,gDAAgD;AAChD,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAM5C,iDAAiD;AACjD,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAE7C,yEAAyE;AACzE,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC,qDAAqD;AACrD,eAAO,MAAM,yBAAyB,QAAQ,CAAC;AAE/C,qDAAqD;AACrD,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAM5C,sEAAsE;AACtE,eAAO,MAAM,kBAAkB,QAAgB,CAAC;AAEhD,qEAAqE;AACrE,eAAO,MAAM,mBAAmB,QAAQ,CAAC;AAMzC,yEAAyE;AACzE,eAAO,MAAM,WAAW,IAAI,CAAC;AAE7B,sEAAsE;AACtE,eAAO,MAAM,WAAW,IAAI,CAAC;AAE7B,qEAAqE;AACrE,eAAO,MAAM,cAAc,OAAO,CAAC;AAMnC,uDAAuD;AACvD,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAE7C,yDAAyD;AACzD,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAM7C,2DAA2D;AAC3D,eAAO,MAAM,sBAAsB,aAAqC,CAAC;AAEzE,0DAA0D;AAC1D,eAAO,MAAM,oBAAoB,aAAiC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -44,14 +44,15 @@ var exports_src = {};
|
|
|
44
44
|
__export(exports_src, {
|
|
45
45
|
default: () => TpsMeterPlugin
|
|
46
46
|
});
|
|
47
|
-
// OpenCode compatibility: export plugin function
|
|
48
|
-
module.exports = exports_src.default;
|
|
49
47
|
|
|
50
48
|
// src/constants.ts
|
|
51
49
|
var MIN_TPS_ELAPSED_MS = 250;
|
|
52
50
|
var DEFAULT_ROLLING_WINDOW_MS = 1000;
|
|
53
51
|
var MAX_BUFFER_SIZE = 100;
|
|
54
52
|
var MIN_WINDOW_DURATION_SECONDS = 0.1;
|
|
53
|
+
var BURST_TOKEN_THRESHOLD = 120;
|
|
54
|
+
var DEFAULT_EWMA_HALF_LIFE_MS = 500;
|
|
55
|
+
var BURST_EWMA_HALF_LIFE_MS = 2000;
|
|
55
56
|
var DEFAULT_UPDATE_INTERVAL_MS = 50;
|
|
56
57
|
var MIN_TOAST_INTERVAL_MS = 150;
|
|
57
58
|
var DEFAULT_TOAST_DURATION_MS = 20000;
|
|
@@ -73,53 +74,71 @@ function createTracker(options = {}) {
|
|
|
73
74
|
let buffer = [];
|
|
74
75
|
const sessionId = options.sessionId;
|
|
75
76
|
const windowMs = typeof options.rollingWindowMs === "number" && options.rollingWindowMs > 0 ? options.rollingWindowMs : DEFAULT_ROLLING_WINDOW_MS;
|
|
77
|
+
let smoothedTps = 0;
|
|
78
|
+
let lastSmoothedAt = 0;
|
|
79
|
+
let hasSmoothedValue = false;
|
|
76
80
|
function pruneBuffer(now) {
|
|
77
81
|
const cutoff = now - windowMs;
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
buffer = buffer.slice(validStartIndex);
|
|
82
|
+
const validStartIndex = buffer.findIndex((e) => e.timestamp >= cutoff);
|
|
83
|
+
if (validStartIndex === -1) {
|
|
84
|
+
buffer.length = 0;
|
|
85
|
+
} else if (validStartIndex > 0) {
|
|
86
|
+
buffer.splice(0, validStartIndex);
|
|
84
87
|
}
|
|
85
88
|
if (buffer.length > MAX_BUFFER_SIZE) {
|
|
86
|
-
buffer
|
|
89
|
+
buffer.splice(0, buffer.length - MAX_BUFFER_SIZE);
|
|
87
90
|
}
|
|
88
91
|
}
|
|
92
|
+
function calculateRawTPS(now) {
|
|
93
|
+
if (buffer.length === 0) {
|
|
94
|
+
return 0;
|
|
95
|
+
}
|
|
96
|
+
const cutoff = now - windowMs;
|
|
97
|
+
let tokensInWindow = 0;
|
|
98
|
+
let oldestTimestamp = now;
|
|
99
|
+
let newestTimestamp = 0;
|
|
100
|
+
for (const entry of buffer) {
|
|
101
|
+
if (entry.timestamp >= cutoff) {
|
|
102
|
+
tokensInWindow += entry.count;
|
|
103
|
+
if (entry.timestamp < oldestTimestamp) {
|
|
104
|
+
oldestTimestamp = entry.timestamp;
|
|
105
|
+
}
|
|
106
|
+
if (entry.timestamp > newestTimestamp) {
|
|
107
|
+
newestTimestamp = entry.timestamp;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
if (tokensInWindow === 0) {
|
|
112
|
+
return 0;
|
|
113
|
+
}
|
|
114
|
+
const windowDurationMs = newestTimestamp - oldestTimestamp;
|
|
115
|
+
const windowDurationSeconds = windowDurationMs / 1000;
|
|
116
|
+
const effectiveDuration = Math.max(windowDurationSeconds, MIN_WINDOW_DURATION_SECONDS);
|
|
117
|
+
return tokensInWindow / effectiveDuration;
|
|
118
|
+
}
|
|
89
119
|
return {
|
|
90
120
|
recordTokens(count, timestamp) {
|
|
91
121
|
const ts = timestamp ?? Date.now();
|
|
92
122
|
totalTokens += count;
|
|
93
123
|
buffer.push({ timestamp: ts, count });
|
|
94
124
|
pruneBuffer(ts);
|
|
125
|
+
const rawTPS = calculateRawTPS(ts);
|
|
126
|
+
if (!hasSmoothedValue) {
|
|
127
|
+
smoothedTps = rawTPS;
|
|
128
|
+
hasSmoothedValue = true;
|
|
129
|
+
} else {
|
|
130
|
+
const timeDelta = Math.max(1, ts - lastSmoothedAt);
|
|
131
|
+
const halfLife = count > BURST_TOKEN_THRESHOLD ? BURST_EWMA_HALF_LIFE_MS : DEFAULT_EWMA_HALF_LIFE_MS;
|
|
132
|
+
const alpha = Math.exp(-Math.LN2 * timeDelta / halfLife);
|
|
133
|
+
smoothedTps = alpha * smoothedTps + (1 - alpha) * rawTPS;
|
|
134
|
+
}
|
|
135
|
+
lastSmoothedAt = ts;
|
|
95
136
|
},
|
|
96
137
|
getInstantTPS() {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
const cutoff = now - windowMs;
|
|
102
|
-
let tokensInWindow = 0;
|
|
103
|
-
let oldestTimestamp = now;
|
|
104
|
-
let newestTimestamp = 0;
|
|
105
|
-
for (const entry of buffer) {
|
|
106
|
-
if (entry.timestamp >= cutoff) {
|
|
107
|
-
tokensInWindow += entry.count;
|
|
108
|
-
if (entry.timestamp < oldestTimestamp) {
|
|
109
|
-
oldestTimestamp = entry.timestamp;
|
|
110
|
-
}
|
|
111
|
-
if (entry.timestamp > newestTimestamp) {
|
|
112
|
-
newestTimestamp = entry.timestamp;
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
if (tokensInWindow === 0) {
|
|
117
|
-
return 0;
|
|
118
|
-
}
|
|
119
|
-
const windowDurationMs = newestTimestamp - oldestTimestamp;
|
|
120
|
-
const windowDurationSeconds = windowDurationMs / 1000;
|
|
121
|
-
const effectiveDuration = Math.max(windowDurationSeconds, MIN_WINDOW_DURATION_SECONDS);
|
|
122
|
-
return tokensInWindow / effectiveDuration;
|
|
138
|
+
return calculateRawTPS(Date.now());
|
|
139
|
+
},
|
|
140
|
+
getSmoothedTPS() {
|
|
141
|
+
return hasSmoothedValue ? smoothedTps : calculateRawTPS(Date.now());
|
|
123
142
|
},
|
|
124
143
|
getAverageTPS() {
|
|
125
144
|
const elapsedSeconds = (Date.now() - startTime) / 1000;
|
|
@@ -141,6 +160,9 @@ function createTracker(options = {}) {
|
|
|
141
160
|
startTime = Date.now();
|
|
142
161
|
totalTokens = 0;
|
|
143
162
|
buffer = [];
|
|
163
|
+
smoothedTps = 0;
|
|
164
|
+
hasSmoothedValue = false;
|
|
165
|
+
lastSmoothedAt = 0;
|
|
144
166
|
},
|
|
145
167
|
getBufferSize() {
|
|
146
168
|
return buffer.length;
|
|
@@ -711,15 +733,15 @@ function TpsMeterPlugin(context) {
|
|
|
711
733
|
messageTokenCache.set(sessionId, messageCache);
|
|
712
734
|
const previousTokens = messageCache.get(messageId) ?? 0;
|
|
713
735
|
messageCache.set(messageId, previousTokens + tokenCount);
|
|
714
|
-
const
|
|
736
|
+
const smoothedTps = tracker.getSmoothedTPS();
|
|
715
737
|
const avgTps = tracker.getAverageTPS();
|
|
716
738
|
const totalTokens = tracker.getTotalTokens();
|
|
717
739
|
const elapsedMs = tracker.getElapsedMs();
|
|
718
740
|
const elapsedSinceFirstToken = Math.max(0, now - firstTokenAt);
|
|
719
|
-
if (elapsedSinceFirstToken >= MIN_TPS_ELAPSED_MS &&
|
|
720
|
-
ui.updateDisplay(
|
|
741
|
+
if (elapsedSinceFirstToken >= MIN_TPS_ELAPSED_MS && smoothedTps >= resolvedConfig.minVisibleTPS) {
|
|
742
|
+
ui.updateDisplay(smoothedTps, avgTps, totalTokens, elapsedMs);
|
|
721
743
|
}
|
|
722
|
-
logger.debug(`[TpsMeter] Session ${sessionId}: +${tokenCount} tokens, TPS: ${
|
|
744
|
+
logger.debug(`[TpsMeter] Session ${sessionId}: +${tokenCount} tokens, TPS: ${smoothedTps.toFixed(1)} (avg: ${avgTps.toFixed(1)})`);
|
|
723
745
|
}
|
|
724
746
|
function handleMessageUpdated(event) {
|
|
725
747
|
const info = event.properties.info;
|
|
@@ -834,3 +856,8 @@ function TpsMeterPlugin(context) {
|
|
|
834
856
|
}
|
|
835
857
|
};
|
|
836
858
|
}
|
|
859
|
+
|
|
860
|
+
// OpenCode compatibility: export plugin function
|
|
861
|
+
module.exports = exports_src.default;
|
|
862
|
+
module.exports.default = exports_src.default;
|
|
863
|
+
Object.defineProperty(module.exports, "__esModule", { value: true });
|
package/dist/index.mjs
CHANGED
|
@@ -3,6 +3,9 @@ var MIN_TPS_ELAPSED_MS = 250;
|
|
|
3
3
|
var DEFAULT_ROLLING_WINDOW_MS = 1000;
|
|
4
4
|
var MAX_BUFFER_SIZE = 100;
|
|
5
5
|
var MIN_WINDOW_DURATION_SECONDS = 0.1;
|
|
6
|
+
var BURST_TOKEN_THRESHOLD = 120;
|
|
7
|
+
var DEFAULT_EWMA_HALF_LIFE_MS = 500;
|
|
8
|
+
var BURST_EWMA_HALF_LIFE_MS = 2000;
|
|
6
9
|
var DEFAULT_UPDATE_INTERVAL_MS = 50;
|
|
7
10
|
var MIN_TOAST_INTERVAL_MS = 150;
|
|
8
11
|
var DEFAULT_TOAST_DURATION_MS = 20000;
|
|
@@ -24,18 +27,47 @@ function createTracker(options = {}) {
|
|
|
24
27
|
let buffer = [];
|
|
25
28
|
const sessionId = options.sessionId;
|
|
26
29
|
const windowMs = typeof options.rollingWindowMs === "number" && options.rollingWindowMs > 0 ? options.rollingWindowMs : DEFAULT_ROLLING_WINDOW_MS;
|
|
30
|
+
let smoothedTps = 0;
|
|
31
|
+
let lastSmoothedAt = 0;
|
|
32
|
+
let hasSmoothedValue = false;
|
|
27
33
|
function pruneBuffer(now) {
|
|
28
34
|
const cutoff = now - windowMs;
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
buffer = buffer.slice(validStartIndex);
|
|
35
|
+
const validStartIndex = buffer.findIndex((e) => e.timestamp >= cutoff);
|
|
36
|
+
if (validStartIndex === -1) {
|
|
37
|
+
buffer.length = 0;
|
|
38
|
+
} else if (validStartIndex > 0) {
|
|
39
|
+
buffer.splice(0, validStartIndex);
|
|
35
40
|
}
|
|
36
41
|
if (buffer.length > MAX_BUFFER_SIZE) {
|
|
37
|
-
buffer
|
|
42
|
+
buffer.splice(0, buffer.length - MAX_BUFFER_SIZE);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function calculateRawTPS(now) {
|
|
46
|
+
if (buffer.length === 0) {
|
|
47
|
+
return 0;
|
|
48
|
+
}
|
|
49
|
+
const cutoff = now - windowMs;
|
|
50
|
+
let tokensInWindow = 0;
|
|
51
|
+
let oldestTimestamp = now;
|
|
52
|
+
let newestTimestamp = 0;
|
|
53
|
+
for (const entry of buffer) {
|
|
54
|
+
if (entry.timestamp >= cutoff) {
|
|
55
|
+
tokensInWindow += entry.count;
|
|
56
|
+
if (entry.timestamp < oldestTimestamp) {
|
|
57
|
+
oldestTimestamp = entry.timestamp;
|
|
58
|
+
}
|
|
59
|
+
if (entry.timestamp > newestTimestamp) {
|
|
60
|
+
newestTimestamp = entry.timestamp;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
38
63
|
}
|
|
64
|
+
if (tokensInWindow === 0) {
|
|
65
|
+
return 0;
|
|
66
|
+
}
|
|
67
|
+
const windowDurationMs = newestTimestamp - oldestTimestamp;
|
|
68
|
+
const windowDurationSeconds = windowDurationMs / 1000;
|
|
69
|
+
const effectiveDuration = Math.max(windowDurationSeconds, MIN_WINDOW_DURATION_SECONDS);
|
|
70
|
+
return tokensInWindow / effectiveDuration;
|
|
39
71
|
}
|
|
40
72
|
return {
|
|
41
73
|
recordTokens(count, timestamp) {
|
|
@@ -43,34 +75,23 @@ function createTracker(options = {}) {
|
|
|
43
75
|
totalTokens += count;
|
|
44
76
|
buffer.push({ timestamp: ts, count });
|
|
45
77
|
pruneBuffer(ts);
|
|
78
|
+
const rawTPS = calculateRawTPS(ts);
|
|
79
|
+
if (!hasSmoothedValue) {
|
|
80
|
+
smoothedTps = rawTPS;
|
|
81
|
+
hasSmoothedValue = true;
|
|
82
|
+
} else {
|
|
83
|
+
const timeDelta = Math.max(1, ts - lastSmoothedAt);
|
|
84
|
+
const halfLife = count > BURST_TOKEN_THRESHOLD ? BURST_EWMA_HALF_LIFE_MS : DEFAULT_EWMA_HALF_LIFE_MS;
|
|
85
|
+
const alpha = Math.exp(-Math.LN2 * timeDelta / halfLife);
|
|
86
|
+
smoothedTps = alpha * smoothedTps + (1 - alpha) * rawTPS;
|
|
87
|
+
}
|
|
88
|
+
lastSmoothedAt = ts;
|
|
46
89
|
},
|
|
47
90
|
getInstantTPS() {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
const cutoff = now - windowMs;
|
|
53
|
-
let tokensInWindow = 0;
|
|
54
|
-
let oldestTimestamp = now;
|
|
55
|
-
let newestTimestamp = 0;
|
|
56
|
-
for (const entry of buffer) {
|
|
57
|
-
if (entry.timestamp >= cutoff) {
|
|
58
|
-
tokensInWindow += entry.count;
|
|
59
|
-
if (entry.timestamp < oldestTimestamp) {
|
|
60
|
-
oldestTimestamp = entry.timestamp;
|
|
61
|
-
}
|
|
62
|
-
if (entry.timestamp > newestTimestamp) {
|
|
63
|
-
newestTimestamp = entry.timestamp;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
if (tokensInWindow === 0) {
|
|
68
|
-
return 0;
|
|
69
|
-
}
|
|
70
|
-
const windowDurationMs = newestTimestamp - oldestTimestamp;
|
|
71
|
-
const windowDurationSeconds = windowDurationMs / 1000;
|
|
72
|
-
const effectiveDuration = Math.max(windowDurationSeconds, MIN_WINDOW_DURATION_SECONDS);
|
|
73
|
-
return tokensInWindow / effectiveDuration;
|
|
91
|
+
return calculateRawTPS(Date.now());
|
|
92
|
+
},
|
|
93
|
+
getSmoothedTPS() {
|
|
94
|
+
return hasSmoothedValue ? smoothedTps : calculateRawTPS(Date.now());
|
|
74
95
|
},
|
|
75
96
|
getAverageTPS() {
|
|
76
97
|
const elapsedSeconds = (Date.now() - startTime) / 1000;
|
|
@@ -92,6 +113,9 @@ function createTracker(options = {}) {
|
|
|
92
113
|
startTime = Date.now();
|
|
93
114
|
totalTokens = 0;
|
|
94
115
|
buffer = [];
|
|
116
|
+
smoothedTps = 0;
|
|
117
|
+
hasSmoothedValue = false;
|
|
118
|
+
lastSmoothedAt = 0;
|
|
95
119
|
},
|
|
96
120
|
getBufferSize() {
|
|
97
121
|
return buffer.length;
|
|
@@ -662,15 +686,15 @@ function TpsMeterPlugin(context) {
|
|
|
662
686
|
messageTokenCache.set(sessionId, messageCache);
|
|
663
687
|
const previousTokens = messageCache.get(messageId) ?? 0;
|
|
664
688
|
messageCache.set(messageId, previousTokens + tokenCount);
|
|
665
|
-
const
|
|
689
|
+
const smoothedTps = tracker.getSmoothedTPS();
|
|
666
690
|
const avgTps = tracker.getAverageTPS();
|
|
667
691
|
const totalTokens = tracker.getTotalTokens();
|
|
668
692
|
const elapsedMs = tracker.getElapsedMs();
|
|
669
693
|
const elapsedSinceFirstToken = Math.max(0, now - firstTokenAt);
|
|
670
|
-
if (elapsedSinceFirstToken >= MIN_TPS_ELAPSED_MS &&
|
|
671
|
-
ui.updateDisplay(
|
|
694
|
+
if (elapsedSinceFirstToken >= MIN_TPS_ELAPSED_MS && smoothedTps >= resolvedConfig.minVisibleTPS) {
|
|
695
|
+
ui.updateDisplay(smoothedTps, avgTps, totalTokens, elapsedMs);
|
|
672
696
|
}
|
|
673
|
-
logger.debug(`[TpsMeter] Session ${sessionId}: +${tokenCount} tokens, TPS: ${
|
|
697
|
+
logger.debug(`[TpsMeter] Session ${sessionId}: +${tokenCount} tokens, TPS: ${smoothedTps.toFixed(1)} (avg: ${avgTps.toFixed(1)})`);
|
|
674
698
|
}
|
|
675
699
|
function handleMessageUpdated(event) {
|
|
676
700
|
const info = event.properties.info;
|
package/dist/tracker.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Token tracking logic for OpenCode TPS Meter Plugin
|
|
3
3
|
* Implements a TPS tracker with a configurable rolling window using a ring buffer
|
|
4
|
+
* Includes EWMA smoothing to prevent spikes from bursty token arrivals
|
|
4
5
|
*/
|
|
5
6
|
import type { TPSTrackerOptions, TPSTracker } from "./types.js";
|
|
6
7
|
/**
|
package/dist/tracker.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../src/tracker.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../src/tracker.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAe,UAAU,EAAE,MAAM,YAAY,CAAC;AAG7E;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,OAAO,GAAE,iBAAsB,GAAG,UAAU,CAuNzE"}
|
package/dist/types.d.ts
CHANGED
|
@@ -287,6 +287,8 @@ export interface TPSTracker {
|
|
|
287
287
|
recordTokens(count: number, timestamp?: number): void;
|
|
288
288
|
/** Calculates the instantaneous TPS over the last 2-second rolling window */
|
|
289
289
|
getInstantTPS(): number;
|
|
290
|
+
/** Gets the EWMA-smoothed TPS to prevent spikes from bursts */
|
|
291
|
+
getSmoothedTPS(): number;
|
|
290
292
|
/** Calculates the average TPS over the entire session */
|
|
291
293
|
getAverageTPS(): number;
|
|
292
294
|
/** Gets the total number of tokens recorded */
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|