特征
- 路由发现: 自动扫描您的 ExpressototS 应用程序以发现所有路径、 控制器和服务
- 打开远程跟踪: 带有自动仪器的完全分布式追踪
- 请求记录: 记录并重放 HTTP 调试请求
- WebSocket 通讯: 实时更新到 Studio UI
- 计量收藏: P50/P95/P99 延迟率、误差率等
安装
npm install @expressots/studio-agent
快速启动
import { StudioAgent } from "@expressots/studio-agent";
const agent = new StudioAgent({
port: 3334,
serviceName: "my-app",
enableRecording: true,
});
// Start the agent
await agent.start();
// Use the middleware (optional, for request recording)
app.use(agent.createMiddleware());
// Get discovered routes
const routes = agent.getRoutes();
// Stop when done
await agent.stop();
配置
interface AgentConfig {
/** Port for the agent WebSocket server (default: 3334) */
port: number;
/** Path to store SQLite database (default: '.studio/studio.db') */
dbPath: string;
/** Enable request/response recording (default: true) */
enableRecording: boolean;
/** Maximum number of recorded exchanges to keep (default: 1000) */
maxRecordedExchanges: number;
/** Enable performance profiling (default: true) */
enableProfiling: boolean;
/** Sample rate for tracing 0-1 (default: 1.0) */
traceSampleRate: number;
/** Custom service name (default: 'expressots-app') */
serviceName: string;
/** Express app instance for runtime route scanning */
expressApp?: any;
}
构成部分
工作室代理员
协调所有功能的主管弦乐手.
路由扫描器
扫描 TypeScript 源文件以发现路径及其元数据 :
import { RouteScanner } from "@expressots/studio-agent";
const scanner = new RouteScanner("./src");
const structure = await scanner.scan();
console.log(structure.controllers);
console.log(structure.services);
console.log(structure.dependencies);
请求记录
记录 HTTP 以后重播的请求/答复 :
import { RequestRecorder } from "@expressots/studio-agent";
const recorder = new RequestRecorder(".studio/studio.db");
await recorder.initialize();
// Get recent exchanges
const exchanges = recorder.getRecentExchanges(100);
// Search by path
const results = recorder.searchExchanges("/api/users", "GET");
工作室追踪器
带有自定义跨度处理的 OpenTeleometry 跟踪器 :
import { StudioTracer } from "@expressots/studio-agent";
const tracer = new StudioTracer("my-service");
await tracer.start((trace) => {
console.log("Trace completed:", trace.traceId);
});
// Create custom spans
await tracer.createSpan(
"my-operation",
async () => {
// Your code here
},
{ attribute: "value" },
);
WebSocket 事件
代理向连接客户端发送实时事件 :
| 活动 | 说明 |
|---|---|
routes | 已发现路线 |
trace | 已完成追踪 |
request | 记录的新请求 |
metrics | 更新的衡量标准 |
structure | 应用结构 |
许可证
麻省理工学院