
Encore Local Development Dashboard本地开发内置的可视化调试工作台【免费下载链接】encoreThe infrastructure platform for the intelligence era项目地址: https://gitcode.com/GitHub_Trending/encor/encoreEncore 在本地开发环境中内置了 Local Development Dashboard本地开发仪表盘它在应用运行时自动启动把服务目录、API 文档、API Explorer、分布式追踪与架构可视化集中在一个实时刷新的 Web 界面中。本文基于 dev-dash.md 展开并结合仓库中 cli/daemon/dash 的实现源码说明它的启动方式、核心功能、实时更新机制与底层架构帮助你在一键encore run后充分用好这个内置调试工作台。什么是 Local Development DashboardEncore 的本地开发工作流会自动为应用提供本地基础设施如 PostgreSQL、对象存储模拟器等详见 infra.md并支持带专属测试基础设施的自动化测试。在此基础上本地环境还内置了一个 Local Development Dashboard将设计、开发、调试应用所需的工具统一收口到一个页面中。从 server.go 的包注释可以看到dash包就是用来服务 Encore Developer Dashboard 的。它本质上是一个本地 HTTP 服务把远程托管的仪表盘前端默认来自devdash.encore.dev代理到localhost一组本地 RPC 能力数据库查询、对象存储浏览、追踪查询、应用状态等通过 WebSocket 与前端通信一个应用运行状态监听器把编译、启动、重载、报错等事件实时推送给已打开的仪表盘页面。快速启动encore run打开仪表盘在应用根目录执行encore runEncore 会编译并启动你的应用同时启动本地开发仪表盘。它默认会自动打开浏览器你也可以手动点击终端中打印的链接$ encore run API Base URL: http://localhost:4000 Dev Dashboard URL: http://localhost:9400/hello-world-cgu2从 cli/daemon/run.go 的实现可以看到应用成功启动后 daemon 会向终端打印Your API is running at即应用 API 的监听地址runInstance.ListenAddrDevelopment Dashboard URL由DashBaseURL仪表盘基础地址含端口如http://localhost:9400与应用 IDapp.PlatformOrLocalID()拼接而成因此每个应用都有自己的仪表盘路径此外还会打印MCP SSE URL本地 MCP 服务的 SSE 端点与当前使用的 Namespace 等运行时信息。如果你不想让浏览器自动弹出可以通过encore run --browsernever关闭run.go 定义了三种浏览器打开模式模式行为auto默认若仪表盘尚未打开则自动打开never从不自动打开浏览器always每次启动都强制打开浏览器模式的解析顺序在 cli/daemon/run.go先看命令行参数req.Browser若为auto再回退到用户配置文件BrowserModeFromConfig。在 dash.go 的OnStart回调中auto模式会先判断当前是否已有仪表盘客户端连接hasClients()已存在则不重复打开浏览器。仪表盘的四大核心功能原文档明确列出仪表盘包含以下功能它们全部随应用改动实时更新1. Service Catalog 与自动 API 文档仪表盘会自动解析应用元数据meta.Data生成完整的服务目录与 API 文档列出每个服务暴露的 endpoint、请求/响应类型与 schema。这些元数据来自 v2/app/app.go 等解析器产物由 daemon 侧的GetMetaRPC 提供见 dash.go。2. API Explorer直接在浏览器里调用你的 APIAPI Explorer 允许你从文档中直接发起请求、填写参数并查看响应免去另开 curl 或 Postman。它的底层是api-callRPCdash.go转发到 run/call.go 的CallAPI实现请求会打到运行中实例的ListenAddr上。若应用未运行会返回明确错误提示app not running。3. 分布式追踪简单而强大的调试工具仪表盘内置分布式追踪视图可以查看每个请求在服务间的完整调用链。相关 RPC 包括traces/list按应用列出最近的追踪默认上限 100 条见 dash.gotraces/get按 trace ID 拉取完整事件序列traces/spans/summaries/list与traces/spans/events/list获取单个 trace 的 span 摘要与事件明细traces/clear清空本地存储的追踪记录。追踪数据由 cli/daemon/engine/trace2 的trace2.Store统一存储仪表盘 server 在创建时即注册为 trace 监听者server.go任何新 span 都会实时推送到已连接的页面。4. Encore Flow微服务架构可视化Encore Flow 以架构图形式展示服务、API 调用与基础设施资源数据库、Pub/Sub、缓存等之间的关系。它同样基于应用元数据渲染随代码改动实时更新。其数据链路与 Service Catalog 一致均来自meta.Data通过GetMeta/statusRPC 下发只是前端展示形态不同。实时更新的原理WebSocket 推送 事件监听所有功能随代码改动实时更新并非轮询实现而是基于 WebSocket 的主动推送。从 server.go 的路由可以看出仪表盘前端与 daemon 之间建立了一条jsonrpc2over WebSocket 通道/__encore由 internal/jsonrpc2 实现客户端请求前端通过 jsonrpc2 调用db/query、objects/list、traces/list、status、api-call等 RPC完整方法列表见 dash.go 的Handle分发服务端推送daemon 通过notify机制向所有在线客户端推送事件包括trace/new新追踪、process/start、process/reload、process/stop、process/compile-start、process/compile-error、process/output实时日志等。推送的来源主要有两路追踪通道listenTraces从traceCh持续读取新 span仅当存在在线客户端时才序列化并广播server.go运行事件Server实现了run.EventListener接口dash.go在run.Manager上注册为监听器server.go因此应用启动、重载、停止、编译出错、输出日志时都会触发对应推送。这解释了两个体验细节编译错误会立即以process/compile-error事件出现在仪表盘错误信息还会相对应用根目录做路径归一化见 dash.go应用输出日志会通过process/output实时流式显示且日志在推送前会复制一份避免异步发送期间缓冲区被复用dash.go。内置数据库浏览器仪表盘内置数据库浏览器可以在界面上直接执行 SQL。它通过db/query与db/transaction两个 RPC 暴露能力dash.go底层实现见 dbbrowser.godb/query执行单条 SQL支持ArrayMode以数组行返回与默认的对象行按列名返回两种结果形态db/transaction在单个事务内依次执行多条 SQL最后统一提交适合验证多语句的原子性。连接建立过程browserConndbbrowser.go先按 app ID 解析应用与 namespace再从ClusterMgr获取本地 SQL 集群必要时自动Setup建库最后用 pgx 直连数据库。查询结果会原样返回给前端渲染整个链路完全在本地完成。内置对象存储浏览器对于使用了 Object Storage 的应用仪表盘还提供存储桶浏览器bucketbrowser.go能力包括objects/list按前缀、分隔符分页列出对象页面大小上限 1000objects/search按prefix或glob模式搜索对象objects/delete批量删除单次上限 1000 个 keyobjects/create-folder创建虚拟目录objects/download-url生成带签名的下载 URL默认有效期 15 分钟最长 1 小时见 bucketbrowser.goobjects/open/objects/reveal在文件管理器中打开或定位本地模拟器中的对象文件。数据源是 pkg/emulators/storage/gcsemu 的本地存储模拟器因此浏览的是真实存在于本地磁盘上的对象内容对象内容本身通过/__encore/objects/content端点提供server.go单次代理上限 1 GiB。这些行为参数与 Encore Cloud 的存储桶浏览契约保持一致代码注释中明确说明。前端与后端如何协作双代理架构仪表盘的 HTTP 服务在 server.go 的NewServer中组装整体是一个双代理 WebSocket架构路径处理方式/__encoreWebSocket 升级承载 jsonrpc2 双向通信/__graphql反向代理到本地 GraphQL 端点APIBaseURL /graphql/__encore/objects/content直接由对象浏览器服务对象内容其余路径反向代理到DevDashURL前端静态资源前端静态资源代理dashproxy.go默认代理到https://devdash.encore.dev前端代码按需拉取并做磁盘缓存缓存目录{用户缓存目录}/encore/dashcache上限 1 GiB、gzip 压缩见 dashproxy.go配合stale-if-error与max-age60的缓存策略实现离线可用。请求会带上当前 CLI 版本号便于前端按版本匹配功能。WebSocket 实时通道承载上述所有 RPC 与事件推送是仪表盘实时性的核心。也就是说浏览器里看到的界面是托管的前端代码而所有数据都来自你本机的 daemon 与本地基础设施——数据不出本机。相关配置项仪表盘的地址与前端来源可以通过环境变量定制internal/conf/conf.go环境变量作用ENCORE_DEVDASH_URL覆盖仪表盘前端代码的来源地址默认https://devdash.encore.devENCORE_PLATFORM_API_URL覆盖 Encore Platform API 地址默认https://api.encore.dev同时影响/__graphql代理目标其中CacheDevDash会自动判断只要DevDashURL包含localhost就禁用磁盘缓存conf.go方便前端本地开发调试。小结Local Development Dashboard 是 Encore 本地开发体验的核心组成部分encore run一条命令同时带来 API 服务、自动化的 API 文档、可交互的 API Explorer、分布式追踪与架构可视化并且通过 WebSocket 事件监听实现代码一改仪表盘即刷新。从源码看它的实时性与完整性来自 daemon 侧的扎实设计——trace2.Store追踪存储、run.EventListener运行事件、jsonrpc2双向通道以及数据库/对象存储两个内嵌浏览器共同支撑。相关实现可继续深入阅读 cli/daemon/dash 目录功能文档见 service-catalog.md、tracing.md 与 encore-flow.md。【免费下载链接】encoreThe infrastructure platform for the intelligence era项目地址: https://gitcode.com/GitHub_Trending/encor/encore创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考