jinko-mcp-dev
Version:
MCP server for Jinko Travel BFF
62 lines (61 loc) • 1.86 kB
JavaScript
export class TelemetryMiddleware {
metrics;
constructor(metrics) {
this.metrics = metrics;
}
/**
* Wrap a tool function with metrics collection
*/
instrumentTool(toolName, toolFunction) {
return (async (...args) => {
const startTime = Date.now();
try {
const result = await toolFunction.apply(this, args);
const duration = (Date.now() - startTime) / 1000;
this.metrics.recordToolCall(toolName, duration, 'success');
return result;
}
catch (error) {
const duration = (Date.now() - startTime) / 1000;
this.metrics.recordToolCall(toolName, duration, 'error');
throw error;
}
});
}
/**
* Create a tool execution context for manual instrumentation
*/
createToolContext(toolName, params) {
return {
toolName,
params,
startTime: Date.now(),
};
}
/**
* Complete a tool execution context
*/
completeToolContext(context, result, error) {
const duration = (Date.now() - context.startTime) / 1000;
const status = error ? 'error' : 'success';
this.metrics.recordToolCall(context.toolName, duration, status);
}
/**
* Record API call metrics
*/
recordApiCall(endpoint, method, duration, status) {
this.metrics.recordApiCall(endpoint, method, duration, status);
}
/**
* Record hotel search results count
*/
recordHotelSearchResults(hotelCount) {
this.metrics.recordHotelSearchResults(hotelCount);
}
/**
* Record hotel search call with detailed labels
*/
recordHotelSearchCall(params) {
this.metrics.recordHotelSearchCall(params);
}
}