rename: /v1/media-server/* -> /v1/edge-server/*

This commit is contained in:
tian 2026-07-21 10:06:48 +08:00
parent b3e816e028
commit fe7ff6719d
10 changed files with 41 additions and 41 deletions

View File

@ -140,10 +140,10 @@ func main() {
r.Get("/devices/{id}/logs", h.ProxyAgent)
r.Post("/devices/{id}/config/apply", h.ProxyAgent)
r.Get("/devices/{id}/models", h.ProxyAgent)
r.Post("/devices/{id}/media-server/start", h.ProxyAgent)
r.Post("/devices/{id}/media-server/restart", h.ProxyAgent)
r.Post("/devices/{id}/media-server/stop", h.ProxyAgent)
r.Get("/devices/{id}/media-server/status", h.ProxyAgent)
r.Post("/devices/{id}/edge-server/start", h.ProxyAgent)
r.Post("/devices/{id}/edge-server/restart", h.ProxyAgent)
r.Post("/devices/{id}/edge-server/stop", h.ProxyAgent)
r.Get("/devices/{id}/edge-server/status", h.ProxyAgent)
// Generic passthrough for device agent /v1/* (covers config/ui/*, face-gallery, etc.)
r.Handle("/devices/{id}/v1/*", http.HandlerFunc(h.ProxyAgentV1))

View File

@ -170,22 +170,22 @@ func (h *Handler) ProxyAgent(w http.ResponseWriter, r *http.Request) {
agentPath = "/v1/config/candidate/apply"
method = "POST"
case r.URL.Path == fmt.Sprintf("/api/devices/%s/reload", id):
agentPath = "/v1/media-server/reload"
agentPath = "/v1/edge-server/reload"
method = "POST"
case r.URL.Path == fmt.Sprintf("/api/devices/%s/rollback", id):
agentPath = "/v1/media-server/rollback"
agentPath = "/v1/edge-server/rollback"
method = "POST"
case r.URL.Path == fmt.Sprintf("/api/devices/%s/media-server/start", id):
agentPath = "/v1/media-server/start"
case r.URL.Path == fmt.Sprintf("/api/devices/%s/edge-server/start", id):
agentPath = "/v1/edge-server/start"
method = "POST"
case r.URL.Path == fmt.Sprintf("/api/devices/%s/media-server/restart", id):
agentPath = "/v1/media-server/restart"
case r.URL.Path == fmt.Sprintf("/api/devices/%s/edge-server/restart", id):
agentPath = "/v1/edge-server/restart"
method = "POST"
case r.URL.Path == fmt.Sprintf("/api/devices/%s/media-server/stop", id):
agentPath = "/v1/media-server/stop"
case r.URL.Path == fmt.Sprintf("/api/devices/%s/edge-server/stop", id):
agentPath = "/v1/edge-server/stop"
method = "POST"
case r.URL.Path == fmt.Sprintf("/api/devices/%s/media-server/status", id):
agentPath = "/v1/media-server/status"
case r.URL.Path == fmt.Sprintf("/api/devices/%s/edge-server/status", id):
agentPath = "/v1/edge-server/status"
case r.URL.Path == fmt.Sprintf("/api/devices/%s/graphs", id):
agentPath = "/v1/graphs"
case name != "" && r.URL.Path == fmt.Sprintf("/api/devices/%s/graphs/%s", id, name):

View File

@ -274,8 +274,8 @@ func TestHandler_ProxyAgentMapsLongRunningRollback(t *testing.T) {
if r.Method != http.MethodPost {
t.Fatalf("expected POST, got %s", r.Method)
}
if r.URL.Path != "/v1/media-server/rollback" {
t.Fatalf("expected /v1/media-server/rollback, got %s", r.URL.Path)
if r.URL.Path != "/v1/edge-server/rollback" {
t.Fatalf("expected /v1/edge-server/rollback, got %s", r.URL.Path)
}
time.Sleep(3500 * time.Millisecond)
w.Header().Set("Content-Type", "application/json")

View File

@ -99,25 +99,25 @@ func OpenAPI(w http.ResponseWriter, r *http.Request) {
"responses": map[string]any{"200": map[string]any{"description": "ok"}},
},
},
"/api/devices/{id}/media-server/start": map[string]any{
"/api/devices/{id}/edge-server/start": map[string]any{
"post": map[string]any{
"parameters": []any{map[string]any{"name": "id", "in": "path", "required": true, "schema": map[string]any{"type": "string"}}},
"responses": map[string]any{"200": map[string]any{"description": "ok"}},
},
},
"/api/devices/{id}/media-server/restart": map[string]any{
"/api/devices/{id}/edge-server/restart": map[string]any{
"post": map[string]any{
"parameters": []any{map[string]any{"name": "id", "in": "path", "required": true, "schema": map[string]any{"type": "string"}}},
"responses": map[string]any{"200": map[string]any{"description": "ok"}},
},
},
"/api/devices/{id}/media-server/stop": map[string]any{
"/api/devices/{id}/edge-server/stop": map[string]any{
"post": map[string]any{
"parameters": []any{map[string]any{"name": "id", "in": "path", "required": true, "schema": map[string]any{"type": "string"}}},
"responses": map[string]any{"200": map[string]any{"description": "ok"}},
},
},
"/api/devices/{id}/media-server/status": map[string]any{
"/api/devices/{id}/edge-server/status": map[string]any{
"get": map[string]any{
"parameters": []any{map[string]any{"name": "id", "in": "path", "required": true, "schema": map[string]any{"type": "string"}}},
"responses": map[string]any{"200": map[string]any{"description": "status", "content": map[string]any{"application/json": map[string]any{"schema": map[string]any{"type": "object"}}}}},

View File

@ -106,7 +106,7 @@ func isLongOp(method, path string) bool {
if method == http.MethodPost && path == "/v1/config/candidate/apply" {
return true
}
if method == http.MethodPost && path == "/v1/media-server/rollback" {
if method == http.MethodPost && path == "/v1/edge-server/rollback" {
return true
}
if strings.HasPrefix(path, "/v1/config/ui/") {

View File

@ -323,7 +323,7 @@ func (s *TaskService) executeOnDevice(task *models.Task, did string) {
s.appendAuditLog(task, did, models.TaskSuccess, "")
case "reload":
_, code, err := s.agent.DoStream("POST", dev.IP, dev.AgentPort, "/v1/media-server/reload", nil, "", 0)
_, code, err := s.agent.DoStream("POST", dev.IP, dev.AgentPort, "/v1/edge-server/reload", nil, "", 0)
if err != nil {
s.updateDeviceStatus(task.ID, did, models.TaskFailed, 0, err.Error())
return
@ -336,7 +336,7 @@ func (s *TaskService) executeOnDevice(task *models.Task, did string) {
s.appendAuditLog(task, did, models.TaskSuccess, "")
case "rollback":
_, code, err := s.agent.DoStream("POST", dev.IP, dev.AgentPort, "/v1/media-server/rollback", nil, "", 0)
_, code, err := s.agent.DoStream("POST", dev.IP, dev.AgentPort, "/v1/edge-server/rollback", nil, "", 0)
if err != nil {
s.updateDeviceStatus(task.ID, did, models.TaskFailed, 0, err.Error())
return
@ -354,7 +354,7 @@ func (s *TaskService) executeOnDevice(task *models.Task, did string) {
s.updateDeviceStatus(task.ID, did, models.TaskFailed, 0, err.Error())
return
}
_, code, err := s.agent.DoStream("POST", dev.IP, dev.AgentPort, "/v1/media-server/start", bodyR, "", bodyLen)
_, code, err := s.agent.DoStream("POST", dev.IP, dev.AgentPort, "/v1/edge-server/start", bodyR, "", bodyLen)
if err != nil {
s.updateDeviceStatus(task.ID, did, models.TaskFailed, 0, err.Error())
return
@ -372,7 +372,7 @@ func (s *TaskService) executeOnDevice(task *models.Task, did string) {
s.updateDeviceStatus(task.ID, did, models.TaskFailed, 0, err.Error())
return
}
_, code, err := s.agent.DoStream("POST", dev.IP, dev.AgentPort, "/v1/media-server/restart", bodyR, "", bodyLen)
_, code, err := s.agent.DoStream("POST", dev.IP, dev.AgentPort, "/v1/edge-server/restart", bodyR, "", bodyLen)
if err != nil {
s.updateDeviceStatus(task.ID, did, models.TaskFailed, 0, err.Error())
return
@ -385,7 +385,7 @@ func (s *TaskService) executeOnDevice(task *models.Task, did string) {
s.appendAuditLog(task, did, models.TaskSuccess, "")
case "media_stop":
_, code, err := s.agent.DoStream("POST", dev.IP, dev.AgentPort, "/v1/media-server/stop", nil, "", 0)
_, code, err := s.agent.DoStream("POST", dev.IP, dev.AgentPort, "/v1/edge-server/stop", nil, "", 0)
if err != nil {
s.updateDeviceStatus(task.ID, did, models.TaskFailed, 0, err.Error())
return

View File

@ -147,8 +147,8 @@ func TestTaskService_MediaStart_IgnoresInvalidConfigShape(t *testing.T) {
if r.Method != http.MethodPost {
t.Fatalf("expected POST, got %s", r.Method)
}
if r.URL.Path != "/v1/media-server/start" {
t.Fatalf("expected path /v1/media-server/start, got %s", r.URL.Path)
if r.URL.Path != "/v1/edge-server/start" {
t.Fatalf("expected path /v1/edge-server/start, got %s", r.URL.Path)
}
bodyBytes, _ = io.ReadAll(r.Body)
w.WriteHeader(http.StatusOK)

View File

@ -819,8 +819,8 @@ func (u *UI) Routes() (chi.Router, error) {
r.Post("/devices/{id}/face-gallery/upload", u.actionDeviceFaceGalleryUpload)
r.Post("/devices/{id}/face-gallery/reload", u.actionDeviceFaceGalleryReload)
r.Post("/devices/{id}/models/upload", u.actionDeviceModelUpload)
r.Post("/devices/{id}/media-server/configs/upload", u.actionDeviceMediaServerConfigUpload)
r.Post("/devices/{id}/media-server/configs/upload-batch", u.actionDeviceMediaServerConfigUploadBatch)
r.Post("/devices/{id}/edge-server/configs/upload", u.actionDeviceMediaServerConfigUpload)
r.Post("/devices/{id}/edge-server/configs/upload-batch", u.actionDeviceMediaServerConfigUploadBatch)
r.Get("/tasks", u.pageTasks)
r.Post("/tasks", u.actionCreateTask)
@ -1773,18 +1773,18 @@ func (u *UI) actionDeviceAction(w http.ResponseWriter, r *http.Request) {
path := ""
switch action {
case "reload":
path = "/v1/media-server/reload"
path = "/v1/edge-server/reload"
case "rollback":
path = "/v1/media-server/rollback"
path = "/v1/edge-server/rollback"
case "media_start":
path = "/v1/media-server/start"
path = "/v1/edge-server/start"
case "media_restart":
path = "/v1/media-server/restart"
path = "/v1/edge-server/restart"
case "media_stop":
path = "/v1/media-server/stop"
path = "/v1/edge-server/stop"
case "media_status":
method = "GET"
path = "/v1/media-server/status"
path = "/v1/edge-server/status"
case "info":
method = "GET"
path = "/v1/info"
@ -1980,7 +1980,7 @@ func (u *UI) actionDeviceMediaServerConfigUpload(w http.ResponseWriter, r *http.
}
defer file.Close()
path := "/v1/media-server/configs/" + url.PathEscape(name)
path := "/v1/edge-server/configs/" + url.PathEscape(name)
resp, code, derr := u.agent.DoStream("PUT", dev.IP, dev.AgentPort, path, file, "application/json", hdr.Size)
data := PageData{Title: "设备详情", Device: dev, Message: fmt.Sprintf("PUT %s -> %d", path, code), RawText: string(resp)}
if derr != nil {
@ -2026,7 +2026,7 @@ func (u *UI) actionDeviceMediaServerConfigUploadBatch(w http.ResponseWriter, r *
sb.WriteString(fmt.Sprintf("%s -> open failed: %v\n", name, err))
continue
}
path := "/v1/media-server/configs/" + url.PathEscape(name)
path := "/v1/edge-server/configs/" + url.PathEscape(name)
resp, code, derr := u.agent.DoStream("PUT", dev.IP, dev.AgentPort, path, file, "application/json", hdr.Size)
_ = file.Close()
if derr != nil {

View File

@ -365,7 +365,7 @@
overlay.style.cssText = 'position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0.5);z-index:9999;display:flex;align-items:center;justify-content:center';
overlay.innerHTML = '<div style="background:var(--surface);border-radius:8px;padding:24px;min-width:360px;max-width:500px" onclick="event.stopPropagation()">' +
'<div style="font-size:16px;font-weight:600;margin-bottom:4px">确认下发配置</div>' +
'<div style="font-size:12px;color:var(--muted);margin-bottom:16px">以下配置将被渲染并下发到设备,media-server 将热更新。</div>' +
'<div style="font-size:12px;color:var(--muted);margin-bottom:16px">以下配置将被渲染并下发到设备,edge-server 将热更新。</div>' +
summary +
'<div style="margin-top:16px;display:flex;gap:8px;justify-content:flex-end">' +
'<button class="btn secondary" style="font-size:12px" onclick="this.closest(\'.confirm-overlay\').remove()">取消</button>' +

View File

@ -2162,7 +2162,7 @@ func TestUI_DeviceControlPageShowsLiveActions(t *testing.T) {
func TestUI_ActionDeviceActionCanRenderControlPage(t *testing.T) {
agentServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
switch {
case r.Method == http.MethodPost && r.URL.Path == "/v1/media-server/reload":
case r.Method == http.MethodPost && r.URL.Path == "/v1/edge-server/reload":
w.Header().Set("Content-Type", "application/json")
_, _ = w.Write([]byte(`{"ok":true}`))
case r.Method == http.MethodGet && r.URL.Path == "/v1/config/status":
@ -2211,7 +2211,7 @@ func TestUI_ActionDeviceActionCanRenderControlPage(t *testing.T) {
ui.actionDeviceAction(rr, req)
body := rr.Body.String()
for _, want := range []string{"设备工作台", "运行与服务", "POST /v1/media-server/reload", "执行结果摘要"} {
for _, want := range []string{"设备工作台", "运行与服务", "POST /v1/edge-server/reload", "执行结果摘要"} {
if !strings.Contains(body, want) {
t.Fatalf("expected control page result HTML to contain %q, got:\n%s", want, body)
}