localgreenchain/pages/api/socket/stats.ts
Claude 7098335ce7
Add real-time updates system with Socket.io
Implement Agent 6: Real-Time Updates feature for LocalGreenChain:

- Add Socket.io server with room-based subscriptions
- Create client-side hooks (useSocket, useLiveFeed, usePlantUpdates)
- Add SocketProvider context for application-wide state
- Implement UI components:
  - ConnectionStatus: Shows WebSocket connection state
  - LiveFeed: Real-time event feed display
  - NotificationToast: Toast notifications with auto-dismiss
  - LiveChart: Real-time data visualization
- Add event type definitions and formatting utilities
- Create socket API endpoint for WebSocket initialization
- Add socket stats endpoint for monitoring
- Extend tailwind with fadeIn/slideIn animations

Integrates with existing EventStream SSE system for fallback.
2025-11-23 03:51:51 +00:00

63 lines
1.6 KiB
TypeScript

/**
* Socket.io Stats API Endpoint
*
* Returns statistics about the WebSocket server and connections.
*/
import type { NextApiRequest, NextApiResponse } from 'next';
import { getSocketServer } from '../../../lib/realtime/socketServer';
import { getEventStream } from '../../../lib/transparency/EventStream';
interface SocketStats {
server: {
connectedClients: number;
rooms: string[];
uptime: number;
};
events: {
totalEvents: number;
eventsLast24h: number;
eventsByType: Record<string, number>;
averageEventsPerMinute: number;
};
status: 'running' | 'stopped';
}
/**
* Get Socket.io server statistics
*/
export default function handler(
req: NextApiRequest,
res: NextApiResponse<SocketStats | { error: string }>
) {
if (req.method !== 'GET') {
res.status(405).json({ error: 'Method not allowed' });
return;
}
try {
const socketServer = getSocketServer();
const eventStream = getEventStream();
const serverStats = socketServer.getStats();
const eventStats = eventStream.getStats();
const stats: SocketStats = {
server: serverStats,
events: {
totalEvents: eventStats.totalEvents,
eventsLast24h: eventStats.eventsLast24h,
eventsByType: eventStats.eventsByType,
averageEventsPerMinute: eventStats.averageEventsPerMinute,
},
status: socketServer.getIO() ? 'running' : 'stopped',
};
res.status(200).json(stats);
} catch (error) {
console.error('[Socket Stats API] Error:', error);
res.status(500).json({
error: error instanceof Error ? error.message : 'Unknown error',
});
}
}