Skip to content

fix: Real-time event dashboard UI#3

Open
Xanoutas wants to merge 1 commit intojoshualamerton:mainfrom
Xanoutas:fix/issue-2-auto
Open

fix: Real-time event dashboard UI#3
Xanoutas wants to merge 1 commit intojoshualamerton:mainfrom
Xanoutas:fix/issue-2-auto

Conversation

@Xanoutas
Copy link

Fix for #2: Real-time event dashboard UI

# dashboard/server.py

import asyncio
import websockets
import json
from core.event_stream import EventStream

class DashboardServer:
    def __init__(self):
        self.event_stream = EventStream()
        self.clients = set()

    async def register(self, websocket):
        self.clients.add(websocket)
        try:
            await self.distribute_events(websocket)
        finally:
            await self.deregister(websocket)

    async def deregister(self, websocket):
        self.clients.remove(websocket)

    async def distribute_events(self, websocket):
        async for event in self.event_stream:
            await websocket.send(json.dumps(event))

    async def handle_client(self, websocket, path):
        await self.register(websocket)

    def start(self):
        start_server = websockets.serve(self.handle_client, "localhost", 8765)
        asyncio.get_event_loop().run_until_complete(start_server)
        asyncio.get_event_loop().run_forever()

if __name__ == "__main__":
    server = DashboardServer()
    server.start()
# core/event_stream.py

import asyncio
from collections import deque

class EventStream:
    def __init__(self):
        self.queue = asyncio.Queue()
        self.buffer = deque(maxlen=100)

    async def __aiter__(self):
        while True:
            event = await self.queue.get()
            self.buffer.append(event)
            yield event

    def add_event(self, event):
        asyncio.create_task(self.queue.put(event))
# core/instrumentation.py

from core.event_stream import EventStream

class Instrumentation:
    def __init__(self):
        self.event_stream = EventStream()

    def log_event(self, event_type, data):
        event = {"type": event_type, "data": data}
        self.event_stream.add_event(event)

# Example usage in examples/simple_agent_demo.py
instrumentation = Instrumentation()

# Simulate logging events
instrumentation.log_event("tool_call", {"tool": "example_tool"})
instrumentation.log_event("tool_result", {"result": "example_result"})
<!-- dashboard/index.html -->

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>AgentLens Dashboard</title>
    <style>
        body {
            font-family: Arial, sans-serif;
        }
        #event-list {
            list-style-type: none;
            padding: 0;
        }
    </style>
</head>
<body>
    <h1>AgentLens Dashboard</h1>
    <div>
        <label for="filter">Filter by event type:</label>
        <input type="text" id="filter" oninput="filterEvents()">
    </div>
    <ul id="event-list"></ul>

    <script>
        const socket = new WebSocket('ws://localhost:8765');

        socket.onmessage = function(event) {
            const eventList = document.getElementById('event-list');
            const newEvent = document.createElement('li');
            newEvent.textContent = event.data;
     

---
Closes #2

> Auto-generated fix | deepseek-coder:33b (RTX 5070)
> EVM: `0x22FD4d24771358fD18a3964456CD5F9d7b6E8f9f` | SOL: `C4PcQjqDW4a5Pvhx5ZFPvAodkGiVG49q8dMvpskqSvuH`

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant