Expose agent build metadata

This commit is contained in:
tian 2026-04-18 12:16:10 +08:00
parent 2bdde181c5
commit cfe42bdad3
10 changed files with 48 additions and 10 deletions

View File

@ -20,6 +20,12 @@ set "CGO_ENABLED=0"
set "VERSION=%~1"
if "%VERSION%"=="" set "VERSION=0.0.0-dev"
set "BUILDTYPE=%~3"
if "%BUILDTYPE%"=="" set "BUILDTYPE=release"
for /f %%i in ('powershell -NoProfile -Command "Get-Date -Format yyyyMMdd.HHmmss"') do set "BUILDID=%%i"
if "%BUILDID%"=="" set "BUILDID=unknown"
set "GITSHA=unknown"
for /f %%i in ('git rev-parse --short HEAD 2^>nul') do set "GITSHA=%%i"
@ -29,11 +35,11 @@ if not exist "%OUTDIR%" mkdir "%OUTDIR%" >nul
set "OUT=%OUTDIR%\rk3588-agent_linux_arm64"
if not "%~2"=="" set "OUT=%OUTDIR%\%~2"
set "LDFLAGS=-s -w -X main.Version=%VERSION% -X main.GitSHA=%GITSHA%"
set "LDFLAGS=-s -w -X main.Version=%VERSION% -X main.BuildID=%BUILDID% -X main.BuildType=%BUILDTYPE% -X main.GitSHA=%GITSHA%"
echo Building: %OUT%
echo GOOS=%GOOS% GOARCH=%GOARCH% CGO_ENABLED=%CGO_ENABLED%
echo Version=%VERSION% GitSHA=%GITSHA%
echo Version=%VERSION% BuildID=%BUILDID% BuildType=%BUILDTYPE% GitSHA=%GITSHA%
go mod download
if errorlevel 1 (

View File

@ -26,6 +26,8 @@ import (
)
var Version = "0.0.0-dev"
var BuildID = "dev"
var BuildType = "dev"
var GitSHA = ""
func main() {
@ -71,7 +73,8 @@ func main() {
baseDir = filepath.Dir(abs)
}
h := httpapi.New(cfg.Agent, baseDir, ms, store, deviceID, agentPort, mediaPort, Version, GitSHA)
h := httpapi.New(cfg.Agent, baseDir, ms, store, deviceID, agentPort, mediaPort, Version, BuildID, BuildType, GitSHA)
log.Info("rk3588-agent version=" + Version + " build_id=" + BuildID + " build_type=" + BuildType + " git_sha=" + GitSHA)
httpSrv := &http.Server{
Addr: cfg.Agent.Listen,
@ -117,6 +120,8 @@ func main() {
AgentPort: agentPort,
MediaPort: mediaPort,
Version: Version,
BuildID: BuildID,
BuildType: BuildType,
GitSHA: GitSHA,
}
log.Info("udp discovery listening on :" + strconv.Itoa(cfg.Agent.DiscoveryPort))

View File

@ -22,6 +22,8 @@ type Responder struct {
AgentPort int
MediaPort int
Version string
BuildID string
BuildType string
GitSHA string
}
@ -41,6 +43,8 @@ type discoverReply struct {
AgentPort int `json:"agent_port"`
MediaPort int `json:"media_port"`
Version string `json:"version"`
BuildID string `json:"build_id"`
BuildType string `json:"build_type"`
GitSHA string `json:"git_sha"`
UptimeSec int64 `json:"uptime_sec"`
}
@ -101,6 +105,8 @@ func (r *Responder) Run(ctx context.Context) error {
AgentPort: r.AgentPort,
MediaPort: r.MediaPort,
Version: r.Version,
BuildID: r.BuildID,
BuildType: r.BuildType,
GitSHA: r.GitSHA,
UptimeSec: sysinfo.UptimeSec(),
}

View File

@ -128,7 +128,12 @@ func (s *Server) handleVersions(w http.ResponseWriter, r *http.Request) {
resp := map[string]any{}
agentInfo := map[string]any{"version": s.version, "git_sha": s.gitSHA}
agentInfo := map[string]any{
"version": s.version,
"build_id": s.buildID,
"build_type": s.buildType,
"git_sha": s.gitSHA,
}
if bin, err := assets.ExecutableInfo(); err == nil {
agentInfo["binary"] = bin
} else {

View File

@ -42,6 +42,8 @@ type Server struct {
agentPort int
mediaPort int
version string
buildID string
buildType string
gitSHA string
cpuMu sync.Mutex
lastCPU metrics.CPUStat
@ -62,13 +64,15 @@ type InfoResponse struct {
AgentPort int `json:"agent_port"`
MediaPort int `json:"media_port"`
Version string `json:"version"`
BuildID string `json:"build_id"`
BuildType string `json:"build_type"`
GitSHA string `json:"git_sha"`
ConfigPath string `json:"config_path"`
LastGoodPath string `json:"last_good_path"`
UptimeSec int64 `json:"uptime_sec"`
}
func New(agentCfg config.AgentConfig, baseDir string, ms *mediaserver.Client, store *modelstore.Store, deviceID string, agentPort int, mediaPort int, version, gitSHA string) *Server {
func New(agentCfg config.AgentConfig, baseDir string, ms *mediaserver.Client, store *modelstore.Store, deviceID string, agentPort int, mediaPort int, version, buildID, buildType, gitSHA string) *Server {
var pc procctl.ProcessController
if agentCfg.MediaServerProcess.Enable {
// 使用传统的 fork/exec 模式
@ -97,6 +101,8 @@ func New(agentCfg config.AgentConfig, baseDir string, ms *mediaserver.Client, st
agentPort: agentPort,
mediaPort: mediaPort,
version: version,
buildID: buildID,
buildType: buildType,
gitSHA: gitSHA,
}
@ -152,6 +158,8 @@ func (s *Server) handleInfo(w http.ResponseWriter, r *http.Request) {
AgentPort: s.agentPort,
MediaPort: s.mediaPort,
Version: s.version,
BuildID: s.buildID,
BuildType: s.buildType,
GitSHA: s.gitSHA,
ConfigPath: s.agentCfg.ConfigPath,
LastGoodPath: s.agentCfg.ConfigPath + ".last_good.json",

View File

@ -87,6 +87,8 @@ Line2JSON
"agent_port":9100,
"media_port":9000,
"version":"0.0.0-dev",
"build_id":"20260418.141245",
"build_type":"release",
"git_sha":"e5894c2",
"uptime_sec":12345
}
@ -117,6 +119,8 @@ Response 200
"agent_port":9100,
"media_port":9000,
"version":"0.0.0-dev",
"build_id":"20260418.141245",
"build_type":"release",
"git_sha":"e5894c2",
"config_path":"/etc/rk3588sys/config.json",
"last_good_path":"/etc/rk3588sys/config.json.last_good.json",

View File

@ -34,6 +34,8 @@
{
"agent": {
"version": "0.0.0-dev",
"build_id": "20260418.141245",
"build_type": "release",
"git_sha": "...",
"binary": {"path": "...", "sha256": "...", "size": 123, "mtime_ms": 1710000000000}
},

View File

@ -234,7 +234,7 @@ agent 只调用 media-server 的既有接口(对内 base URL = `media_server_b
## 8. 验收标准Acceptance Criteria
1. 同网段 10 台设备,管理端 SearchUDP broadcast在 1 秒内都能发现;列表包含 `device_id/ip/agent_port/media_port/version/git_sha`。
1. 同网段 10 台设备,管理端 SearchUDP broadcast在 1 秒内都能发现;列表包含 `device_id/ip/agent_port/media_port/version/build_id/build_type/git_sha`。
2. agent `PUT /v1/config`
- 发送合法 config设备写盘并触发 `media-server` reload 成功graphs 状态正常。
- 发送非法 configagent 返回 400或 reload 失败则 agent 自动 rollback 并返回 500错误信息可定位

View File

@ -26,7 +26,7 @@
### 3.2 Device Registry
- 内存缓存:
- `device_id -> {ip, agent_port, media_port, device_name, version, git_sha, last_seen_ms, online}`
- `device_id -> {ip, agent_port, media_port, device_name, version, build_id, build_type, git_sha, last_seen_ms, online}`
- 定时刷新(可配置间隔):对 online 设备拉取 `GET /v1/graphs`agent 代理),更新摘要。
- Offline 规则:超过 `offline_after_ms`(如 10000ms未见到则标记离线。
@ -71,7 +71,7 @@ Request:
Response:
```json
{ "items": [ {"device_id":"...","ip":"...","agent_port":9100,"media_port":9000,"device_name":"...","version":"...","git_sha":"..."} ] }
{ "items": [ {"device_id":"...","ip":"...","agent_port":9100,"media_port":9000,"device_name":"...","version":"...","build_id":"...","build_type":"release","git_sha":"..."} ] }
```
### 4.2 Devices
@ -81,7 +81,7 @@ Response:
Response:
```json
{ "items": [ {"device_id":"...","online":true,"last_seen_ms":0,"ip":"...","agent_port":9100,"media_port":9000,"device_name":"...","version":"...","git_sha":"...","graphs":[...]} ] }
{ "items": [ {"device_id":"...","online":true,"last_seen_ms":0,"ip":"...","agent_port":9100,"media_port":9000,"device_name":"...","version":"...","build_id":"...","build_type":"release","git_sha":"...","graphs":[...]} ] }
```
#### `GET /api/devices/:id`

View File

@ -46,8 +46,10 @@ cd /d D:\App\C++\Rk3588Sys\agent
$env:GOARCH="arm64"
$env:CGO_ENABLED="0"
$VERSION="0.0.0-dev"
$BUILDID=Get-Date -Format "yyyyMMdd.HHmmss"
$BUILDTYPE="release"
$GITSHA="dev"
go build -trimpath -buildvcs=false -ldflags "-s -w -X main.Version=$VERSION -X main.GitSHA=$GITSHA" -o ".\rk3588-agent" ".\cmd\rk3588-agent"
go build -trimpath -buildvcs=false -ldflags "-s -w -X main.Version=$VERSION -X main.BuildID=$BUILDID -X main.BuildType=$BUILDTYPE -X main.GitSHA=$GITSHA" -o ".\rk3588-agent" ".\cmd\rk3588-agent"
go version -m .\rk3588-agent
ls -l ./rk3588-agent_linux_arm64