feat(03-01): hook metrics recording into agent request flow
- Track active requests with startRequest/endRequest around lane queue work - Increment messagesProcessed on successful agent.process completion - Record errors and error events on agent.send failures - Record tool failure events with tool name and error details
This commit is contained in:
@@ -37,6 +37,9 @@ export function createAgentHandlers(deps: AgentHandlerDeps) {
|
||||
|
||||
// Enqueue the work — if the lane is idle it runs immediately,
|
||||
// otherwise it waits for earlier requests on the same session to finish.
|
||||
const requestId = request.id.toString();
|
||||
deps.metrics?.startRequest(requestId, { sessionId: laneId, channel: 'ws' });
|
||||
|
||||
return deps.laneQueue.enqueue(laneId, async () => {
|
||||
deps.sessionBridge.setBusy(connectionId, true);
|
||||
|
||||
@@ -53,6 +56,17 @@ export function createAgentHandlers(deps: AgentHandlerDeps) {
|
||||
error: event.result.error,
|
||||
} : undefined,
|
||||
}));
|
||||
// Record tool failures as error events
|
||||
if (event.result && !event.result.success) {
|
||||
deps.metrics?.incrementErrors();
|
||||
deps.metrics?.recordEvent({
|
||||
timestamp: Date.now(),
|
||||
level: 'error',
|
||||
source: 'tool',
|
||||
message: `Tool '${event.tool}' failed: ${event.result.error ?? 'unknown error'}`,
|
||||
context: { sessionId: laneId, tool: event.tool },
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -66,13 +80,23 @@ export function createAgentHandlers(deps: AgentHandlerDeps) {
|
||||
}));
|
||||
|
||||
const response = await agent.process(params.message!, attachments);
|
||||
deps.metrics?.incrementMessages();
|
||||
send(makeEvent(request.id, 'done', { content: response }));
|
||||
} catch (err) {
|
||||
const message = err instanceof Error ? err.message : 'Unknown error';
|
||||
deps.metrics?.incrementErrors();
|
||||
deps.metrics?.recordEvent({
|
||||
timestamp: Date.now(),
|
||||
level: 'error',
|
||||
source: 'agent.send',
|
||||
message,
|
||||
context: { sessionId: laneId },
|
||||
});
|
||||
send(makeEvent(request.id, 'error', { code: ErrorCode.InternalError, message }));
|
||||
} finally {
|
||||
deps.sessionBridge.setBusy(connectionId, false);
|
||||
deps.sessionBridge.setOnToolUse(connectionId, undefined);
|
||||
deps.metrics?.endRequest(requestId);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user