safesight-control/internal/web/ui/templates/device.html

122 lines
5.4 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{{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}}