augushong
0e1df3852d
feat(update): 新增 admin:update --fetch-only 纯拉取模式
2026-08-08 19:09:21 +08:00
augushong
ad96755ff5
docs(permission): 统一校准权限节点措辞,消除更新节点误解
...
admin:permission:nodes 是查看型命令(实时扫描注解、不写库、改注解即生效),但文档/注释多处用一键更新/自动更新/生成等动作词描述,导致开发者系统性误以为它是更新权限节点命令。本次校准 8 个文件 10 处误导措辞,并在命令输出末尾追加机制提示。@NodeAnotation 拼写保持不变(框架故意少一个 t)。
2026-08-08 18:21:25 +08:00
augushong
8faa52ce90
feat(nginx-log): 多节点适配(node_id 全链路 + 全局/按节点聚合 + 节点筛选 + v2.4.0 升级脚本)
...
- 6 张表加 node_id 字段 + position/stat 改复合唯一键(migration)
- 6 个 Scheme 同步 node_id 注解 + 唯一键
- Reader 带 node_id 参数 + 懒加载接管(getLastPosition 回退查 node_id='')
- Aggregator 全局行(node_id='')+ 按节点循环 insertAggregatesForScope
- Stat 所有查询方法加 where node_id 条件
- Dashboard 控制器/视图加节点筛选下拉框 + AJAX 带 node_id
- AccessLog 列表加节点列 + 采集进度卡片显示节点信息
- import 定时任务 run_type 改 all(每节点采集自己的日志)
- v2.4.0 升级脚本追加 ALTER TABLE(幂等 check-then-alter)
- 菜单调整:去掉 Nginx 顶级菜单 + 读取位置管理,改为系统管理下挂两个子菜单
- ulthon-timer 文档补充 run_type=all 多节点部署注意事项
2026-08-08 10:33:20 +08:00
augushong
0f9f12174c
test(nginx-log): 权限节点扫描 + 端到端 QA 验证 + curd 路径修复
...
- 跑 admin:permission:nodes 扫描 138 个权限节点(17 个 nginx 相关节点)
- 17 个 nginx 节点 assign 给 role-id=1(写入 ul_system_auth_node 满足 plan 验收)
- curd 路径修复:菜单 href 由 system.nginx_access_log/index 改为 nginx.access_log/index(匹配 curd 生成的实际 URL,方案 B)
- SystemMenu.php / v2.4.0.php / DB ul_system_menu 三处同步(含 id=303 log_position)
- dashboard id=301 system.nginx_log_stat/index 保持不变(控制器确实在 system 模块)
- 端到端 QA 全通过:100 行日志 → import 74 行(静态过滤)→ aggregate stat_hour=1/url=6 → dashboard 数据完整
- 修复 T10 遗留 bug:cleanStatTables 用 Unix 时间戳当阈值,与 stat_date YYYYMMDD 不匹配导致误删
- threshold 从 strtotime('today')-days*86400 改为 (int) date('Ymd', strtotime('today')-days*86400)
- 验证:366 天前 stat 数据被删,今天 stat 数据保留
- 权限隔离:超管可访问,未登录被拦(code=40101 请先登录后台)
- Evidence: .omo/evidence/task-16-nginx-log-analytics-e2e/(15 个文件)
2026-07-28 06:47:24 +08:00
augushong
8a5a0d9877
feat(nginx-log): NginxLogStat dashboard 视图与 JS(echarts 趋势图)
2026-07-28 06:34:30 +08:00
augushong
3e983d8b8f
feat(nginx-log): adminUpdateCodeData v2.4.0 存量升级代码(sysconfig + 菜单幂等补齐)
2026-07-28 06:28:17 +08:00
augushong
d5329cdd45
feat(nginx-log): curd 生成 raw/position 后台并改只读
...
- NginxAccessLog + NginxLogPosition Scheme 加 #[Component] 注解
- Scheme Table name 补 ul_ 前缀(curd 严格校验要求)
- curd 生成 nginx 模块完整后台(controller/model/view/js)
- Base/App 双层只读控制器(参照 TimerLogBase 范式)
- AccessLogBase: add/edit/delete/modify 全部 error
- LogPositionBase: 同上
- 视图改造:
- access_log 裁剪到 8 列核心字段(time_local/method/uri/status/remote_addr/request_time/body_bytes_sent/http_user_agent)
- status/request_time 自定义 badge 渲染
- toolbar 清空 + operat 仅保留详情(B 类只读页面)
- log_position 全字段 + 只读化
- HTTP 验证:index 200 OK + add/edit/delete/modify 全部返回错误
2026-07-28 06:21:13 +08:00
augushong
7987001cd2
feat(nginx-log): NginxLogStat dashboard 控制器(Base/App 双层,日/周/月/年聚合)
...
- extend/base/admin/controller/system/NginxLogStatBase.php:完整逻辑
- @ControllerAnnotation(title=Nginx访问统计) + @NodeAnotation(title=访问统计)
- index() 页面/接口同体:isAjax() 返回 JSON,否则 fetch()
- period 解析:day(24h)/week(7d)/month(30d)/year(12m)/custom,invalid 自动 fallback day
- custom start>end 自动 swap
- 整体指标:SUM stat_hour,avg_request_time 按 PV 加权平均
- 趋势:day 按 stat_hour 聚合补 0-23;week/month/custom 按 stat_date 补日期序列;year 按 (stat_date DIV 100) 聚合补 1-12 月
- Top N:sysconfig('nginx_log','topn_default',10),topN=0 不截断
- 跨周期 UV 标注:uv_is_estimate = period !== 'day'
- 空表/空范围不崩(返回 0/[])
- app/admin/controller/system/NginxLogStat.php:App 入口,仅 extends Base
性能:stat_hour 10 万行 + period=year 服务端 < 700ms(< 2s 要求)
依赖:T1 stat 模型、T9 Aggregate;blocks:T13 视图
2026-07-28 06:17:22 +08:00
augushong
ce191adfd8
feat(nginx-log): 4 个 stack 模板增加 log_format 与 access_log 配置(Docker 开箱即用)
2026-07-28 00:24:26 +08:00
augushong
3405f8de60
feat(nginx-log): adminInitData 增加 nginx_log 默认配置(保留策略/topN/静态排除)
2026-07-28 00:18:56 +08:00
augushong
97eb8ca99a
fix(timer): timer_log 列表页补全刷新按钮与事件监听方法修正
...
toolbar 从 [] 改为 ['refresh'](B 类只读页面保留刷新),ua.table.on 修正为 layui.table.on。
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-07-26 09:53:27 +08:00
augushong
739b536f8d
fix(host): Host 控制器禁用手动增删改与按钮配置修正
...
HostBase 补 add/edit/delete/modify 禁用方法(节点自动注册,不支持手动操作)。_common.js 的 addUrl/editUrl/deleteUrl/exportUrl/modifyUrl 改空字符串。index.js 补 toolbar: ['refresh'](C 类页面,去掉默认的 add/delete/export)。
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-07-25 22:40:05 +08:00
augushong
908f84ee9f
refactor(timer): TimerLog 控制器迁移到 Base 层 + toolbar 与事件监听修正
...
控制器逻辑移入 extend/base/admin/controller/system/TimerLogBase.php,app 层改为空壳继承。index.js 补 toolbar:[] + defaultToolbar:['filter'](B 类只读页面),修正 ua.table.on → layui.table.on。
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-07-25 22:39:53 +08:00
augushong
009647f96f
refactor(timer): TimerConfig 控制器与视图迁移到 Base 层
...
控制器逻辑移入 extend/base/admin/controller/system/TimerConfigBase.php,app 层改为空壳继承。9 个视图文件迁移到 extend/base/admin/view/system/timer_config/。index.js 补 toolbar: ['refresh', 'export'] 声明(C 类页面,去掉默认的 add/delete)。
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-07-25 22:39:20 +08:00
augushong
236a343fa9
feat(timer): 新增并发数/触发节点/触发时间三字段及幂等分发
...
Scheme 定义 concurrency(nullable)/trigger_node_id/last_trigger_time 三字段,Model 声明属性,v2.3.0 分发代码幂等 ALTER 保证升级自动同步。
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-07-25 21:57:14 +08:00
augushong
e40d497515
fix(curd): 修正关联表 onlyFields 键名拼写错误
...
- CurdBase 注释解析只识别 onlyFields(正确拼写),不再支持历史错误拼写 onlyFileds
- BuildCurdServiceBase 内部局部变量 onlyShowFileds 改为 onlyShowFields(按位置传参,外部 API 不变)
- 同步文档(ulthon-database-design 已删除,ulthon-scheme-definition 技能已使用正确拼写)
2026-07-19 09:07:49 +08:00
augushong
51d0ed7331
fix(auth): 修复角色分配用户列表layui filter传参导致参数绑定错误
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-07-18 21:33:33 +08:00
augushong
1ca1f86150
feat(auth): 角色分配用户页面视图与列表入口按钮
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-07-17 23:44:33 +08:00
augushong
50cb069677
feat(auth): 角色管理新增分配用户后端方法(assignUsers+toggleUser)
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-07-17 23:44:23 +08:00
augushong
c16964679d
feat(menu): 补充定时器和主机列表的默认菜单初始化数据
...
在 SystemMenu 初始化数据中新增定时器配置(id=256)、定时器日志(id=257)、主机列表(id=258)三条菜单,确保 seed:run 后菜单自动可用
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-05-27 20:22:23 +08:00
augushong
a2916d7505
refactor(ulthon-admin): 重写入口文件并更新模板引用
...
将 ulthon-admin.js 简化为入口文件(8行),仅负责组装 admin 对象并清理临时变量。更新 _require.html 按依赖顺序加载 6 个拆分文件。
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-05-27 07:51:42 +08:00
augushong
3f8f79b445
feat(update): 新增 --keep-repo 参数,dry-run 模式下保留上游克隆目录便于对比
2026-05-26 21:38:16 +08:00
augushong
b7094eee8a
fix(host): 主机列表页设为只读
...
Remove add/edit/delete buttons and auth attributes from host list page. Hosts are auto-registered via heartbeat, manual CRUD is meaningless. Keep only setMaster operation.
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-05-26 18:33:47 +08:00
augushong
90e584f5a1
feat(timer): 新增定时器配置、日志和主机的后台管理界面
...
T10: TimerConfig CURD - task management with run_type/status editing,
manual trigger button, task_name read-only, no add/delete
T11: TimerLog CURD - read-only log viewer with filters and color badges
T12: Host list enhanced - is_master column, setMaster button
2026-05-26 18:33:43 +08:00
augushong
abeac2c3cb
feat(timer): 新增配置同步到数据库及主节点选举
...
T5: TimerServiceBase.syncConfigToDatabase() - syncs task config to DB
T6: HostServiceBase - auto master election, stale node detection,
getMasterNode/setMasterNode methods
2026-05-26 18:33:41 +08:00
augushong
ca094c9116
feat(update): 输出增强 -- 按目录分组、风险摘要、策略标注、--show 过滤
2026-05-25 22:47:46 +08:00
augushong
67c613788f
feat(update): 冲突策略参数替代交互确认
2026-05-25 22:44:34 +08:00
augushong
2e3fac93f0
feat(update): 注册冲突策略和输出范围选项
2026-05-25 22:41:08 +08:00
augushong
07d5823c81
feat(update): 后更新引导提示
2026-05-25 21:41:55 +08:00
augushong
65b196e768
feat(update): composer.json 智能对比输出具体命令
2026-05-25 21:38:58 +08:00
augushong
a17ba88068
feat(update): 新增 --dry-run 预览模式
2026-05-25 21:35:47 +08:00
augushong
fb3f807877
refactor(update): extend/think 归入可选更新范围
2026-05-25 21:30:27 +08:00
augushong
76fe865274
perf(update): clone 一次仓库并本地复制替代第二次网络 clone; 排除 public/storage 和 public/build
2026-05-25 21:28:21 +08:00
augushong
218810a7db
refactor: 迁移根目录 docker/ 到 source/docker/,更新所有路径引用
...
- 将 docker/{nginx.conf,run.sh,zz-phprun.ini,zz-phpfpm.conf} 移动到 source/docker/
- 更新所有 Dockerfile 中 /var/www/html/docker/ -> /var/www/html/source/docker/
- 更新 stack.json managed_files 路径前缀
- 重组 stack 模式目录结构 docker/ -> source/docker/
- 更新 source/README.md 目录描述
- 更新 AdminUpdateServiceBase.php 可选文件前缀
2026-05-12 23:13:47 +08:00
augushong
37c8142721
feat(update): 支持更新到 ulthon_admin 的 master 分支
...
新增 `--update-master` 选项,允许用户选择更新到远程仓库的 master 分支,而非默认的最新标签版本。这为需要最新开发版代码的场景提供了灵活性。
2026-05-07 22:59:19 +08:00
augushong
718034a7b4
fix(update): 修复目录忽略逻辑的前缀匹配误命中问题
...
isIgnoredPath 和 testIsOptionalFiles 方法使用 str_starts_with 做前缀匹配,
导致 .gitea 被 .git 规则误跳过,.gitignore/.gitattributes 同样受影响。
改为精确目录名匹配: === || str_starts_with(, . '/')
2026-05-06 20:55:17 +08:00
augushong
7ef19f6357
refactor: 提取文件收集逻辑到独立方法
...
将重复的文件收集和忽略前缀检查代码提取为 `collectTrackedFiles` 和 `isIgnoredPath` 方法,提高代码复用性和可读性。
2026-03-27 20:26:34 +08:00
augushong
8cc08bcb8c
feat: 发布智能体版
2026-03-26 20:22:34 +08:00
augushong
0fad2b7e10
docs: 更新项目文档中的框架版本信息
2026-01-28 20:36:15 +08:00
augushong
6eefa1cd2e
refactor(admin): 重构系统状态模块以支持模块化结构
2026-01-23 00:02:51 +08:00
augushong
3c0d39c4ce
fix(status): 修复系统状态页面布局问题并添加刷新功能
2026-01-22 23:49:06 +08:00
augushong
3a4194d3e9
feat: 新增系统状态页面功能
2026-01-22 23:28:13 +08:00
augushong
ee40374732
feat(scheme): 增强 Scheme 与数据库同步机制并添加严格校验
2026-01-12 12:37:37 +08:00
augushong
d5be4cbbaa
feat: 完成基本的详情生成
2026-01-09 00:02:33 +08:00
augushong
0e92ab2363
feat: 初步完成详情生成
2026-01-08 23:43:21 +08:00
augushong
3fdea8b85b
feat: 实现基本的详情生成
2026-01-05 22:59:12 +08:00
augushong
9b91b2507c
fix: 修复上传类生成必填显示错误问题
2025-11-12 18:28:14 +08:00
augushong
3eab01197e
chore: 调整日志每页大小
2025-10-10 22:36:48 +08:00
augushong
247bfd1966
feat: 增加按级别查询日志
2025-10-10 22:33:28 +08:00
augushong
63b1cb472a
feat: 增加按应用、控制器、方法查询日志
2025-10-10 22:28:47 +08:00