Skip to content

Commit 7009ab2

Browse files
committed
feat(backend): enhance bucket filling with default metric fields
1 parent a1ff115 commit 7009ab2

File tree

2 files changed

+23
-4
lines changed

2 files changed

+23
-4
lines changed

services/backend/src/services/metrics/McpClientActivityMetricsService.ts

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,14 @@ export class McpClientActivityMetricsService extends TimeSeriesMetricsService {
2929
return 'mcp_client_activity';
3030
}
3131

32+
getDefaultMetricFields(): Record<string, number> {
33+
return {
34+
request_count: 0,
35+
tool_call_count: 0,
36+
active_client_count: 0
37+
};
38+
}
39+
3240
async queryBuckets(params: McpActivityQueryParams): Promise<BucketData[]> {
3341
this.logger.debug({
3442
operation: 'query_buckets',
@@ -143,7 +151,11 @@ export class McpClientActivityMetricsService extends TimeSeriesMetricsService {
143151

144152
const expectedTimestamps = this.generateBucketTimestamps(start, end, interval);
145153

146-
const filledBuckets = this.fillMissingBuckets(buckets, expectedTimestamps);
154+
const filledBuckets = this.fillMissingBuckets(
155+
buckets,
156+
expectedTimestamps,
157+
this.getDefaultMetricFields()
158+
);
147159

148160
const summary = this.calculateSummary(filledBuckets);
149161

services/backend/src/services/metrics/TimeSeriesMetricsService.ts

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,11 @@ export abstract class TimeSeriesMetricsService {
154154
return timestamps;
155155
}
156156

157-
fillMissingBuckets(buckets: BucketData[], timestamps: number[]): BucketData[] {
157+
fillMissingBuckets(
158+
buckets: BucketData[],
159+
timestamps: number[],
160+
defaultFields?: Record<string, number>
161+
): BucketData[] {
158162
const bucketMap = new Map<number, BucketData>();
159163

160164
for (const bucket of buckets) {
@@ -169,7 +173,9 @@ export abstract class TimeSeriesMetricsService {
169173
} else {
170174
const zeroBucket: BucketData = { timestamp };
171175

172-
if (buckets.length > 0) {
176+
if (defaultFields) {
177+
Object.assign(zeroBucket, defaultFields);
178+
} else if (buckets.length > 0) {
173179
const sampleBucket = buckets[0];
174180
for (const key of Object.keys(sampleBucket)) {
175181
if (key !== 'timestamp') {
@@ -186,7 +192,8 @@ export abstract class TimeSeriesMetricsService {
186192
operation: 'fill_missing_buckets',
187193
expectedBuckets: timestamps.length,
188194
actualBuckets: buckets.length,
189-
filledBuckets: filledBuckets.length
195+
filledBuckets: filledBuckets.length,
196+
defaultFieldsProvided: !!defaultFields
190197
}, 'Filled missing buckets');
191198

192199
return filledBuckets;

0 commit comments

Comments
 (0)