mirror of
https://gitee.com/ulthon/ulthon_admin.git
synced 2026-08-30 12:45:32 +08:00
- 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 多节点部署注意事项
229 lines
13 KiB
PHP
229 lines
13 KiB
PHP
<div class="layuimini-container detail-container">
|
||
<div class="layuimini-main">
|
||
<div class="layui-card detail-card">
|
||
<div class="layui-card-header detail-header">
|
||
<div class="layui-row">
|
||
<div class="layui-col-md9">
|
||
<h2 class="detail-title">#{$row.id} {$title|default=''}</h2>
|
||
<div class="detail-id">ID: {$row.id}</div>
|
||
</div>
|
||
<div class="layui-col-md3 text-right detail-actions">
|
||
<button class="layui-btn layui-btn-primary" layuimini-content-href="{$Request.param.backTagId}" data-back="1">返回</button>
|
||
<button class="layui-btn" onclick="location.href='{:url("edit", ["id" => $row.id])}'">编辑</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="layui-card-body detail-content">
|
||
<div class="layui-row layui-col-space12">
|
||
<!-- 左侧主体内容 -->
|
||
<div class="layui-col-md8 detail-main">
|
||
<div class="detail-field-group">
|
||
<div class="detail-field-item">
|
||
<div class="detail-field-label">来源日志文件路径</div>
|
||
<div class="detail-field-value">
|
||
{notempty name="row.file_path"}
|
||
{$row.file_path}
|
||
{else/}
|
||
<span class="layui-text-em">暂无数据</span>
|
||
{/notempty}
|
||
</div>
|
||
</div>
|
||
<div class="detail-field-item">
|
||
<div class="detail-field-label">客户端 IP(含 IPv6)</div>
|
||
<div class="detail-field-value">
|
||
{notempty name="row.remote_addr"}
|
||
{$row.remote_addr}
|
||
{else/}
|
||
<span class="layui-text-em">暂无数据</span>
|
||
{/notempty}
|
||
</div>
|
||
</div>
|
||
<div class="detail-field-item">
|
||
<div class="detail-field-label">HTTP 认证用户名</div>
|
||
<div class="detail-field-value">
|
||
{notempty name="row.remote_user"}
|
||
{$row.remote_user}
|
||
{else/}
|
||
<span class="layui-text-em">暂无数据</span>
|
||
{/notempty}
|
||
</div>
|
||
</div>
|
||
<div class="detail-field-item">
|
||
<div class="detail-field-label">请求时间戳(业务时区)</div>
|
||
<div class="detail-field-value">
|
||
{notempty name="row.time_local"}
|
||
{$row.time_local|date="Y-m-d H:i:s"}
|
||
{else/}
|
||
<span class="layui-text-em">暂无数据</span>
|
||
{/notempty}
|
||
</div>
|
||
</div>
|
||
<div class="detail-field-item">
|
||
<div class="detail-field-label">HTTP 方法</div>
|
||
<div class="detail-field-value">
|
||
{notempty name="row.method"}
|
||
{$row.method}
|
||
{else/}
|
||
<span class="layui-text-em">暂无数据</span>
|
||
{/notempty}
|
||
</div>
|
||
</div>
|
||
<div class="detail-field-item">
|
||
<div class="detail-field-label">请求 URI(超 255 截断)</div>
|
||
<div class="detail-field-value">
|
||
{notempty name="row.uri"}
|
||
{$row.uri}
|
||
{else/}
|
||
<span class="layui-text-em">暂无数据</span>
|
||
{/notempty}
|
||
</div>
|
||
</div>
|
||
<div class="detail-field-item">
|
||
<div class="detail-field-label">查询字符串</div>
|
||
<div class="detail-field-value">
|
||
{notempty name="row.query_string"}
|
||
{$row.query_string}
|
||
{else/}
|
||
<span class="layui-text-em">暂无数据</span>
|
||
{/notempty}
|
||
</div>
|
||
</div>
|
||
<div class="detail-field-item">
|
||
<div class="detail-field-label">HTTP 协议版本</div>
|
||
<div class="detail-field-value">
|
||
{notempty name="row.http_version"}
|
||
{$row.http_version}
|
||
{else/}
|
||
<span class="layui-text-em">暂无数据</span>
|
||
{/notempty}
|
||
</div>
|
||
</div>
|
||
<div class="detail-field-item">
|
||
<div class="detail-field-label">响应体字节数</div>
|
||
<div class="detail-field-value">
|
||
{notempty name="row.body_bytes_sent"}
|
||
{$row.body_bytes_sent}
|
||
{else/}
|
||
<span class="layui-text-em">暂无数据</span>
|
||
{/notempty}
|
||
</div>
|
||
</div>
|
||
<div class="detail-field-item">
|
||
<div class="detail-field-label">Referer</div>
|
||
<div class="detail-field-value">
|
||
{notempty name="row.http_referer"}
|
||
{$row.http_referer}
|
||
{else/}
|
||
<span class="layui-text-em">暂无数据</span>
|
||
{/notempty}
|
||
</div>
|
||
</div>
|
||
<div class="detail-field-item">
|
||
<div class="detail-field-label">User-Agent(超 500 截断)</div>
|
||
<div class="detail-field-value" style="white-space: pre-wrap;">
|
||
{notempty name="row.http_user_agent"}
|
||
{$row.http_user_agent|raw}
|
||
{else/}
|
||
<span class="layui-text-em">暂无内容</span>
|
||
{/notempty}
|
||
</div>
|
||
</div>
|
||
<div class="detail-field-item">
|
||
<div class="detail-field-label">nginx 请求总耗时</div>
|
||
<div class="detail-field-value">
|
||
{notempty name="row.request_time"}
|
||
{$row.request_time}
|
||
{else/}
|
||
<span class="layui-text-em">暂无数据</span>
|
||
{/notempty}
|
||
</div>
|
||
</div>
|
||
<div class="detail-field-item">
|
||
<div class="detail-field-label">upstream 响应时间</div>
|
||
<div class="detail-field-value">
|
||
{notempty name="row.upstream_response_time"}
|
||
{$row.upstream_response_time}
|
||
{else/}
|
||
<span class="layui-text-em">暂无数据</span>
|
||
{/notempty}
|
||
</div>
|
||
</div>
|
||
<div class="detail-field-item">
|
||
<div class="detail-field-label">总发送字节数(含 header)</div>
|
||
<div class="detail-field-value">
|
||
{notempty name="row.bytes_sent"}
|
||
{$row.bytes_sent}
|
||
{else/}
|
||
<span class="layui-text-em">暂无数据</span>
|
||
{/notempty}
|
||
</div>
|
||
</div>
|
||
<div class="detail-field-item">
|
||
<div class="detail-field-label">国家(GeoIP 预留)</div>
|
||
<div class="detail-field-value">
|
||
{notempty name="row.country"}
|
||
{$row.country}
|
||
{else/}
|
||
<span class="layui-text-em">暂无数据</span>
|
||
{/notempty}
|
||
</div>
|
||
</div>
|
||
<div class="detail-field-item">
|
||
<div class="detail-field-label">省份(GeoIP 预留)</div>
|
||
<div class="detail-field-value">
|
||
{notempty name="row.province"}
|
||
{$row.province}
|
||
{else/}
|
||
<span class="layui-text-em">暂无数据</span>
|
||
{/notempty}
|
||
</div>
|
||
</div>
|
||
<div class="detail-field-item">
|
||
<div class="detail-field-label">城市(GeoIP 预留)</div>
|
||
<div class="detail-field-value">
|
||
{notempty name="row.city"}
|
||
{$row.city}
|
||
{else/}
|
||
<span class="layui-text-em">暂无数据</span>
|
||
{/notempty}
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
<!-- 右侧基础信息 -->
|
||
<div class="layui-col-md4 detail-side">
|
||
<h3 class="detail-side-title">基础信息</h3>
|
||
<div class="detail-field-group">
|
||
<div class="detail-field-item">
|
||
<div class="detail-field-label">ID</div>
|
||
<div class="detail-field-value">{$row.id}</div>
|
||
</div>
|
||
<div class="detail-field-item">
|
||
<div class="detail-field-label">HTTP 状态码</div>
|
||
<div class="detail-field-value">
|
||
{notempty name="row.status"}
|
||
{$row.status}
|
||
{else/}
|
||
<span class="layui-text-em">暂无数据</span>
|
||
{/notempty}
|
||
</div>
|
||
</div>
|
||
<div class="detail-field-item">
|
||
<div class="detail-field-label">入库时间戳</div>
|
||
<div class="detail-field-value">
|
||
{notempty name="row.create_time"}
|
||
{$row.create_time|date="Y-m-d H:i:s"}
|
||
{else/}
|
||
<span class="layui-text-em">暂无数据</span>
|
||
{/notempty}
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div> |