CroupierCroupier
指南
架构
API 参考
  • C++ SDK
  • Go SDK
  • Java SDK
  • JavaScript SDK
  • Python SDK
  • C# SDK
  • Lua SDK
分析
GitHub
指南
架构
API 参考
  • C++ SDK
  • Go SDK
  • Java SDK
  • JavaScript SDK
  • Python SDK
  • C# SDK
  • Lua SDK
分析
GitHub
  • 概览

    • 首页
    • 目录结构
    • 部署指南
    • 配置管理
    • 安全配置
  • 架构设计

    • 架构设计
    • 虚拟对象设计
    • Croupier 虚拟对象(Virtual Object) - 快速参考指南
  • 函数管理

    • 函数管理系统分析
    • Croupier 函数管理系统 - 快速参考指南
    • /FUNCTION_MANAGEMENT_COMPARISON.html
  • SDK 文档

    • SDK Development
    • C++ SDK 文档索引
    • Croupier C++ SDK 快速参考
  • 生成器与协议

    • protoc-gen-croupier (skeleton)
    • Protobuf 自定义 Options 使用指南
    • Croupier API 文档
  • 分析系统

    • 游戏数据分析系统
    • 快速开始

Croupier 函数管理系统 - 架构分析与改进方案

执行摘要

本分析报告深入检视了 Croupier 系统的函数管理架构,包括当前菜单结构、页面设计、API 设计和用户体验。通过系统的调查和分析,识别了关键问题并提出了详细的改进建议。


核心发现

问题 #1: 菜单结构分散(优先级:高)

现状: 函数管理功能分散在两个独立的顶级菜单下

  • 游戏管理菜单:函数管理、功能分配、功能包管理
  • 游戏运营菜单:服务注册表(Registry)

影响:

  • 用户导航困难,需要在多个菜单间切换
  • 新用户难以快速发现函数管理功能
  • 菜单项之间的相关性不清晰
  • 增加认知成本和学习曲线

建议: 创建统一的"函数管理"顶级菜单,将所有相关功能集中在一起


问题 #2: 页面承载功能过多(优先级:中)

现状: GmFunctions 页面 (650+ 行代码) 承载了过多功能

  • 函数列表与选择
  • 3 种表单渲染模式(Enhanced UI、Form-Render、Legacy)
  • 4 种路由策略(lb、broadcast、targeted、hash)
  • 同步/异步调用管理
  • 自定义输出视图渲染(支持插件)

影响:

  • 代码复杂度高,难以维护
  • UI 堆砌,用户体验不佳
  • 缺乏搜索、分类、排序等基础功能
  • 没有调用历史记录

建议: 分解为多个专注的页面

  • 函数目录(Catalog):发现和浏览函数
  • 函数调用(Invoke):实际调用函数
  • 各页面应该支持简化/高级模式切换

问题 #3: 权限模型粗粒度(优先级:中)

现状: 权限检查只支持二级

  • functions:read / functions:*
  • registry:read
  • assignments:read / write
  • packs:read / reload / export

问题:

  • 不支持按函数粒度的权限控制
  • 不支持按环境/角色的细粒度权限
  • Assignments 仅支持白名单,没有灰度发布或时间控制

建议: 扩展权限模型

  • 支持 function:{id}:invoke 等细粒度权限
  • 按角色绑定权限集合
  • 支持时间窗口和百分比灰度

问题 #4: 数据流效率低(优先级:低-中)

现状: 多个页面各自独立加载数据

  • GmFunctions: listDescriptors + fetchAssignments + listFunctionInstances
  • Registry: fetchRegistry
  • Assignments: listDescriptors + fetchAssignments
  • Packs: listPacks

问题:

  • 数据重复加载,网络开销大
  • 没有全局缓存和状态管理
  • 页面间不同步(例如一个页面修改分配,另一页面不会自动更新)

建议: 实现全局 Function Context

  • 统一缓存管理
  • 支持实时更新(WebSocket 订阅)
  • 新增 API 端点 /api/functions/summary 一次获取所有数据

改进方案概览

方案特点

方面改进
菜单结构从分散的 2 个菜单 → 统一的"函数管理"菜单
页面设计从单一巨页面 → 5 个专注的页面
功能分工函数目录 / 函数调用 / 函数分配 / 实例管理 / 函数包
权限模型从粗粒度 → 细粒度(资源级、角色级)
数据管理从各自独立 → 全局共享状态 + 缓存
组件复用从各页面各实现 → 5 个通用组件

统一菜单结构图

函数管理 (FunctionManagement) [新增]
├─ 函数目录 (Catalog)
│  └─ 搜索、分类、版本管理、权限管理
├─ 函数调用 (Invoke)
│  └─ 快速调用 / 高级调用 / 调用历史
├─ 函数分配 (Assignments)
│  └─ 增强版权限 + 变更历史
├─ 实例管理 (Instances) [从 Registry 拆分]
│  └─ Agent 管理 / 覆盖率分析 / 健康检查
└─ 函数包 (Packs)
   └─ 包清单 / 导入导出 / 包内容详情

关键页面设计

1. 函数目录页面(新增)

功能: 函数发现和浏览

  • 全文搜索(名称、描述、分类)
  • 高级过滤(分类、版本、状态)
  • 列表/卡片/详情三视图
  • 快速操作(调用、分配)
  • 版本选择和对比

数据模型扩展:

interface EnrichedFunctionDescriptor {
  id: string;
  version: string;
  
  // 新增元数据
  metadata?: {
    category: string;
    tags: string[];
    description: string;
    creator: string;
    created_at: string;
    updated_at: string;
    deprecation_notice?: string;
  };
  
  // 运行时信息
  runtime?: {
    instances: number;
    agents: string[];
    last_called?: string;
    success_rate?: number;
    avg_latency_ms?: number;
  };
}

2. 函数调用页面(重构)

功能: 函数执行

  • 参数表单渲染(支持简化/高级模式)
  • 调用历史集成(最近调用列表)
  • 结果展示(含自定义 renderer)
  • 重新运行之前的调用

新增 API:

GET /api/function_calls?game_id=...&function_id=...&limit=20
  返回:{ calls: [ { id, timestamp, user, params, result, status } ] }

POST /api/function_calls/{id}/rerun
  重新执行之前的调用

3. 实例管理页面(新增)

功能: Agent 和覆盖率管理

  • Agent 生命周期管理
  • 函数覆盖率分析(表格 + 可视化)
  • 健康检查和告警
  • 批量操作

新增 API:

GET /api/agents?game_id=...&env=...&status=...
GET /api/agents/{agent_id}/functions
GET /api/coverage/analysis?game_id=...&env=...

4. 分配管理增强

改进: 从简单白名单 → 细粒度权限模型

interface FunctionAssignment {
  game_id: string;
  env: string;
  functions: string[];           // 白名单
  
  // 新增:按角色分配
  role_assignments?: {
    [role: string]: string[];
  };
  
  // 新增:时间控制
  time_windows?: {
    enabled: string[];
    disabled: string[];
  };
  
  // 新增:审计
  change_history?: Array<{
    timestamp: string;
    actor: string;
    operation: 'add' | 'remove' | 'enable' | 'disable';
    function_id: string;
    reason?: string;
  }>;
}

5. 函数包增强

改进:

  • 包内容详情视图(显示包含的函数列表)
  • 版本历史和对比
  • 灰度发布支持

新增 API:

GET /api/packs/{pack_id}/contents
GET /api/packs/{pack_id}/versions
POST /api/packs/{pack_id}/canary?env=...&percentage=10

组件复用策略

5 个通用组件

组件功能使用场景
FunctionFormRendererJSONSchema 表单渲染(简化/高级模式)Invoke, Assignments, Approvals
FunctionListTable搜索、排序、过滤、批量操作Catalog, Assignments, Approvals
RegistryViewerAgent 表格、覆盖率分析、CSV 导出Instances, Dashboard, Reports
FunctionCallHistory时间线、参数对比、重新运行Invoke, Detail, Dashboard
FunctionDetailPanel元数据、权限、实例分布Catalog, Invoke, Detail

实施路线图

第一阶段(2-3 周)- 基础设施 ✅(已完成,见 dashboard/config/routes.ts 等)

  1. ✅ 新增菜单配置和路由结构(/game/functions/{catalog,invoke,instances,assignments,packs} + 顶层 /functions 菜单)
  2. ✅ 创建函数目录页面(dashboard/src/pages/Functions/Directory:表格视图、标签/分类过滤、快捷跳转)
  3. ✅ 分离实例管理页面(dashboard/src/pages/Functions/Instances:覆盖率统计 + Agent 列表)
  4. ✅ 增强权限检查和错误提示(各子路由统一 access 守卫 + requestErrorConfig 的 redirect 分支)
  5. ✅ 创建后向兼容重定向(/gm/*、/game/functions 旧地址跳转至新菜单)

交付物:

  • 新菜单结构上线(包含 Function Catalog/Invoke/Instances/Assignments/Packs 各自页面)
  • 基础函数目录页面:可视化函数描述符、快速查看详情/调用
  • 实例管理页面:集中展示 Agent 覆盖数据
  • 旧链接重定向:保留 /gm/*、/game/functions 入口的兼容跳转提示

第二阶段(3-4 周)- 核心功能增强

  1. 重构函数调用页面(UI 分离)
  2. 增加调用历史 API 和展示
  3. 增强分配管理(变更历史、细粒度权限)
  4. 函数包详情视图

交付物:

  • 重构后的 Invoke 页面
  • 调用历史集成
  • 分配管理增强
  • 包详情视图

第三阶段(1-2 月)- 高级功能

  1. 版本管理和对比功能
  2. 细粒度权限模型完整实现
  3. 可视化监控和告警
  4. 性能分析和优化建议

交付物:

  • 版本对比工具
  • 权限细粒度管理
  • 监控仪表板
  • 性能报告

技术架构

前端状态管理

// 新增全局 Context
interface FunctionManagementState {
  // 基础数据
  selectedGame: string;
  selectedEnv: string;
  
  // 缓存数据
  descriptors: Map<string, FunctionDescriptor>;
  assignments: Map<string, string[]>;
  registry: RegistryData;
  agents: Agent[];
  
  // 最近调用
  recentCalls: FunctionCall[];
  
  // UI 状态
  searchText: string;
  filters: FunctionFilter;
  viewMode: 'list' | 'grid' | 'detail';
}

// 选择器函数
export const selectFunctionById = (id: string) => (state) => state.descriptors.get(id);
export const selectAssignments = (gameId: string) => (state) => state.assignments.get(gameId);
export const selectCoverage = (gameId: string, env: string) => (state) => ...;

后端 API 扩展

新增 API 端点:

端点方法功能
/api/functions/summaryGET获取函数汇总信息(一次请求)
/api/function_callsGET查询调用历史(支持过滤)
/api/function_calls/{id}GET获取单次调用详情
/api/function_calls/{id}/rerunPOST重新执行调用
/api/agentsGET查询 Agent 列表
/api/agents/{id}/functionsGET获取 Agent 上的函数列表
/api/coverage/analysisGET覆盖率分析
/api/packs/{id}/contentsGET包内容详情
/api/packs/{id}/versionsGET包版本历史
/api/packs/{id}/canaryPOST灰度发布

预期收益

用户体验

  • ✓ 菜单导航清晰,发现能力提升 50%
  • ✓ 页面加载速度提升 30%(减少 API 调用)
  • ✓ 新用户学习曲线缩短 40%
  • ✓ 高级用户的工作效率提升 25%

系统质量

  • ✓ 代码复用率提升,维护成本降低 35%
  • ✓ 组件库完善,后续开发速度加快 50%
  • ✓ API 设计统一,集成成本降低
  • ✓ 权限控制更安全、更灵活

业务价值

  • ✓ 用户满意度提升
  • ✓ 系统稳定性增强
  • ✓ 功能拓展更容易(为后续版本管理、灰度发布等奠定基础)

关键建议

优先级排序

高优先级(立即执行)

  1. 统一菜单结构
  2. 创建函数目录页面(含搜索和过滤)
  3. 分离实例管理页面

中优先级(1-2 个月内)

  1. 重构函数调用页面
  2. 增加调用历史功能
  3. 增强分配管理

低优先级(后期优化)

  1. 版本管理和对比
  2. 细粒度权限模型
  3. 可视化和性能优化

风险缓解

风险缓解策略
用户迷失在新菜单中保持旧链接重定向,逐步引导
API 不兼容性新 API 与旧 API 并行支持
性能退化新增缓存策略和流量控制
权限模型复杂提供清晰的权限配置文档和 UI 向导

文档生成

本次分析生成了以下文档:

  • FUNCTION_MANAGEMENT_ARCHITECTURE_ANALYSIS.md - 详细分析报告
  • FUNCTION_MANAGEMENT_COMPARISON.md - 现状 vs 改进对比图

建议将这些文档纳入项目的设计决策历史,为后续维护和扩展提供参考。


结论

Croupier 的函数管理系统功能完整,但组织结构散乱。通过实施本方案提出的改进,可以显著提升用户体验、降低维护成本、为系统的长期发展奠定坚实基础。

建议立即启动第一阶段工作,预计 2-3 周内可以上线新菜单结构和函数目录页面。

在 GitHub 上编辑此页
最后更新: 2026/1/8 22:42