122 lines
5.4 KiB
HTML
122 lines
5.4 KiB
HTML
{{define "device"}}
|
||
{{template "device_nav" .}}
|
||
<div class="card">
|
||
<h2>视觉识别节点详情</h2>
|
||
<div class="row" style="margin-top:10px">
|
||
<div>
|
||
<div class="muted small">节点名称</div>
|
||
<div><b>{{.Device.DeviceName}}</b></div>
|
||
<div class="muted small mono" style="margin-top:6px">{{.Device.DeviceID}}</div>
|
||
</div>
|
||
<div>
|
||
<div class="muted small">状态</div>
|
||
<div>{{if .Device.Online}}<span class="pill ok">在线</span>{{else}}<span class="pill bad">离线</span>{{end}}</div>
|
||
<div class="muted small" style="margin-top:6px">最后在线:{{ago .Device.LastSeenMs}}</div>
|
||
</div>
|
||
<div>
|
||
<div class="muted small">管理地址</div>
|
||
<div class="mono">{{.Device.IP}}:{{.Device.AgentPort}}</div>
|
||
<div class="muted small mono" style="margin-top:6px">视频服务端口:{{.Device.MediaPort}}</div>
|
||
</div>
|
||
<div>
|
||
<div class="muted small">版本</div>
|
||
<div class="mono">{{.Device.Version}}</div>
|
||
{{if .Device.GitSha}}<div class="muted small mono" style="margin-top:6px">git: {{.Device.GitSha}}</div>{{end}}
|
||
{{if .Device.Hostname}}<div class="muted small" style="margin-top:6px">hostname: <span class="mono">{{.Device.Hostname}}</span></div>{{end}}
|
||
</div>
|
||
<div>
|
||
<div class="muted small">快速查看</div>
|
||
<div style="margin-top:6px">
|
||
<a href="/ui/devices/{{.Device.DeviceID}}/graphs">运行指标</a> |
|
||
<a href="/ui/devices/{{.Device.DeviceID}}/logs?limit=200">诊断日志</a> |
|
||
<a href="/ui/device-config">配置管理</a>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="card">
|
||
<div class="section-title">
|
||
<div>
|
||
<h2>当前运行配置</h2>
|
||
<div class="muted small">来自 agent 的 /v1/config/status,用于确认设备当前加载的配置版本。</div>
|
||
</div>
|
||
{{if .ConfigStatus}}
|
||
{{if .ConfigStatus.OK}}<span class="pill ok">已读取</span>{{else}}<span class="pill bad">状态异常</span>{{end}}
|
||
{{else if .ConfigStatusErr}}
|
||
<span class="pill bad">读取失败</span>
|
||
{{else}}
|
||
<span class="pill">未连接</span>
|
||
{{end}}
|
||
</div>
|
||
{{if .ConfigStatus}}
|
||
<div class="row" style="margin-top:10px">
|
||
<div>
|
||
<div class="muted small">配置 ID</div>
|
||
<div class="mono">{{if .ConfigStatus.Metadata.ConfigID}}{{.ConfigStatus.Metadata.ConfigID}}{{else}}未标记{{end}}</div>
|
||
<div class="muted small" style="margin-top:6px">版本:<span class="mono">{{if .ConfigStatus.Metadata.ConfigVersion}}{{.ConfigStatus.Metadata.ConfigVersion}}{{else}}未标记{{end}}</span></div>
|
||
</div>
|
||
<div>
|
||
<div class="muted small">模板 / Profile</div>
|
||
<div class="mono">{{if .ConfigStatus.Metadata.Template}}{{.ConfigStatus.Metadata.Template}}{{else}}-{{end}}</div>
|
||
<div class="muted small mono" style="margin-top:6px">{{if .ConfigStatus.Metadata.Profile}}{{.ConfigStatus.Metadata.Profile}}{{else}}-{{end}}</div>
|
||
</div>
|
||
<div>
|
||
<div class="muted small">Overlay</div>
|
||
<div class="mono">{{if .ConfigStatus.Metadata.Overlays}}{{range $i, $name := .ConfigStatus.Metadata.Overlays}}{{if $i}}, {{end}}{{$name}}{{end}}{{else}}-{{end}}</div>
|
||
<div class="muted small mono" style="margin-top:6px">{{.ConfigStatus.Metadata.RenderedBy}}</div>
|
||
</div>
|
||
<div>
|
||
<div class="muted small">配置路径</div>
|
||
<div class="mono">{{.ConfigStatus.ConfigPath}}</div>
|
||
<div class="muted small mono" style="margin-top:6px">{{if .ConfigStatus.Exists}}文件存在{{else}}文件不存在{{end}}</div>
|
||
</div>
|
||
<div>
|
||
<div class="muted small">视频服务</div>
|
||
<div>{{if .ConfigStatus.MediaServer.Running}}<span class="pill ok">运行中</span>{{else}}<span class="pill bad">未运行</span>{{end}}</div>
|
||
{{if .ConfigStatus.MediaServer.PID}}<div class="muted small mono" style="margin-top:6px">pid: {{.ConfigStatus.MediaServer.PID}}</div>{{end}}
|
||
</div>
|
||
</div>
|
||
<div style="margin-top:10px">
|
||
<div class="muted small">SHA256</div>
|
||
<div class="mono small">{{.ConfigStatus.Sha256}}</div>
|
||
</div>
|
||
{{if .ConfigStatus.Metadata.RenderedAt}}
|
||
<div class="muted small" style="margin-top:8px">生成时间:<span class="mono">{{.ConfigStatus.Metadata.RenderedAt}}</span></div>
|
||
{{end}}
|
||
{{else if .ConfigStatusErr}}
|
||
<div class="muted small" style="margin-top:10px">暂时无法读取设备配置状态:{{.ConfigStatusErr}}</div>
|
||
{{else}}
|
||
<div class="muted small" style="margin-top:10px">未配置 agent 客户端时不会请求设备。</div>
|
||
{{end}}
|
||
{{if .ConfigStatusText}}
|
||
<details style="margin-top:10px">
|
||
<summary class="muted small">原始响应</summary>
|
||
<pre>{{.ConfigStatusText}}</pre>
|
||
</details>
|
||
{{end}}
|
||
</div>
|
||
|
||
<div class="card">
|
||
<h2 id="overview">只读详情</h2>
|
||
<div class="muted small">此页面只用于查看设备身份、在线状态、地址、版本和诊断入口。修改配置或控制服务请进入配置管理。</div>
|
||
<div class="actions" style="margin-top:10px">
|
||
<a class="btn ghost" href="/ui/device-config">进入配置管理</a>
|
||
<a class="btn ghost" href="/ui/devices/{{.Device.DeviceID}}/logs?limit=200">查看诊断日志</a>
|
||
<a class="btn ghost" href="/ui/devices/{{.Device.DeviceID}}/graphs">查看运行指标</a>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="card" id="technical">
|
||
<h2>技术信息</h2>
|
||
<pre>{{json .Device}}</pre>
|
||
</div>
|
||
|
||
{{if .RawText}}
|
||
<div class="card">
|
||
<h2>最近响应</h2>
|
||
<pre>{{.RawText}}</pre>
|
||
</div>
|
||
{{end}}
|
||
{{end}}
|