Skip to content

Commit a36088c

Browse files
csg-pr-botCementZhangcemeng
authored
fix: use standard httpbase error response in runner handler and propagate upstream error in remote_runner (#1238)
* fix: use standard httpbase error response in runner handler and propagate upstream error in remote_runner * fix: use standard httpbase error response in runner handler and propagate upstream error in remote_runner * fix lint failed * remove unuse files --------- Co-authored-by: cemeng <cemengzhang@gmail.com> Co-authored-by: cemeng <cemengzhang@yntengyun.com>
1 parent f8ca320 commit a36088c

2 files changed

Lines changed: 25 additions & 26 deletions

File tree

builder/deploy/imagerunner/remote_runner.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -267,8 +267,8 @@ func (h *RemoteRunner) doRequest(ctx context.Context, method, url string, data i
267267
return nil, errorx.RemoteSvcFail(err, nil)
268268
}
269269
slog.WarnContext(ctx, "remote runner response with", slog.Any("StatusCode", resp.StatusCode), slog.Any("result", result))
270-
err = fmt.Errorf("unexpected http status: %d", resp.StatusCode)
271-
return nil, err
270+
err = fmt.Errorf("unexpected http status: %d, upstream error: %s", resp.StatusCode, result.Msg)
271+
return nil, errorx.RemoteSvcFail(err, nil)
272272
}
273273

274274
return resp, nil

runner/handler/service.go

Lines changed: 23 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package handler
33
import (
44
"database/sql"
55
"errors"
6+
"fmt"
67
"io"
78
"log/slog"
89
"net/http"
@@ -46,15 +47,15 @@ func (s *K8sHandler) RunService(c *gin.Context) {
4647
err := c.BindJSON(&request)
4748
if err != nil {
4849
slog.ErrorContext(c.Request.Context(), "runService get bad request", slog.Any("error", err), slog.Any("req", request))
49-
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
50+
httpbase.BadRequest(c, err.Error())
5051
return
5152
}
5253
svcName := s.getServiceNameFromRequest(c)
5354
request.SvcName = svcName
5455
err = s.serviceComponent.RunService(c.Request.Context(), *request)
5556
if err != nil {
56-
slog.Error("fail to run service", slog.Any("error", err), slog.Any("req", request))
57-
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
57+
slog.ErrorContext(c.Request.Context(), "fail to run service", slog.Any("error", err), slog.Any("req", request))
58+
httpbase.ServerError(c, err)
5859
return
5960
}
6061
slog.Info("service created successfully", slog.String("svc_name", svcName), slog.Int64("deploy_id", request.DeployID))
@@ -67,15 +68,15 @@ func (s *K8sHandler) StopService(c *gin.Context) {
6768

6869
if err != nil {
6970
slog.ErrorContext(c.Request.Context(), "stop service get bad request", slog.Any("error", err), slog.Any("req", request))
70-
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
71+
httpbase.BadRequest(c, err.Error())
7172
return
7273
}
7374
svcName := s.getServiceNameFromRequest(c)
7475
request.SvcName = svcName
7576
resp, err := s.serviceComponent.StopService(c.Request.Context(), *request)
7677
if err != nil {
7778
slog.ErrorContext(c.Request.Context(), "failed to stop service", slog.Any("error", err), slog.Any("req", request))
78-
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
79+
httpbase.ServerError(c, err)
7980
return
8081
}
8182

@@ -92,15 +93,15 @@ func (s *K8sHandler) UpdateService(c *gin.Context) {
9293

9394
if err != nil {
9495
slog.ErrorContext(c.Request.Context(), "updateService get bad request", slog.Any("error", err), slog.Any("req", request))
95-
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
96+
httpbase.BadRequest(c, err.Error())
9697
return
9798
}
9899
svcName := s.getServiceNameFromRequest(c)
99100
request.SvcName = svcName
100101
resp, err := s.serviceComponent.UpdateService(c.Request.Context(), *request)
101102
if err != nil {
102103
slog.ErrorContext(c.Request.Context(), "failed to update service", slog.Any("error", err), slog.Any("req", request))
103-
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
104+
httpbase.ServerError(c, err)
104105
return
105106
}
106107
slog.Info("service updated", slog.String("svc_name", svcName))
@@ -114,7 +115,7 @@ func (s *K8sHandler) ServiceStatus(c *gin.Context) {
114115
err := c.BindJSON(request)
115116
if err != nil {
116117
slog.ErrorContext(c.Request.Context(), "serviceStatus get bad request", slog.Any("error", err), slog.Any("req", request))
117-
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
118+
httpbase.BadRequest(c, err.Error())
118119
return
119120
}
120121
svcName := s.getServiceNameFromRequest(c)
@@ -128,7 +129,7 @@ func (s *K8sHandler) ServiceStatus(c *gin.Context) {
128129
return
129130
}
130131
slog.ErrorContext(c.Request.Context(), "failed to get service", slog.Any("error", err), slog.String("svc_name", svcName))
131-
c.JSON(http.StatusInternalServerError, gin.H{"error": "failed to get service"})
132+
httpbase.ServerError(c, fmt.Errorf("failed to get service"))
132133
return
133134
}
134135
c.JSON(http.StatusOK, resp)
@@ -140,20 +141,20 @@ func (s *K8sHandler) ServiceLogs(c *gin.Context) {
140141

141142
if err != nil {
142143
slog.ErrorContext(c.Request.Context(), "get bad request", slog.Any("error", err), slog.Any("req", request))
143-
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
144+
httpbase.BadRequest(c, err.Error())
144145
return
145146
}
146147
cluster, err := s.clusterPool.GetClusterByID(c, request.ClusterID)
147148
if err != nil {
148149
slog.ErrorContext(c.Request.Context(), "fail to get cluster ", slog.Any("error", err))
149-
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
150+
httpbase.BadRequest(c, err.Error())
150151
return
151152
}
152153
svcName := s.getServiceNameFromRequest(c)
153154
podNames, err := s.serviceComponent.GetServicePods(c.Request.Context(), cluster, svcName, s.k8sNameSpace, 1)
154155
if err != nil {
155156
slog.ErrorContext(c.Request.Context(), "failed to read image logs, cannot get pods info", slog.Any("error", err), slog.String("svc_name", svcName))
156-
c.JSON(http.StatusInternalServerError, gin.H{"error": "failed to get pods info"})
157+
httpbase.ServerError(c, fmt.Errorf("failed to get pods info"))
157158
return
158159
}
159160
podName := ""
@@ -169,13 +170,13 @@ func (s *K8sHandler) ServiceLogsByPod(c *gin.Context) {
169170

170171
if err != nil {
171172
slog.ErrorContext(c.Request.Context(), "serviceLogs get bad request", slog.Any("error", err), slog.Any("req", request))
172-
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
173+
httpbase.BadRequest(c, err.Error())
173174
return
174175
}
175176
cluster, err := s.clusterPool.GetClusterByID(c, request.ClusterID)
176177
if err != nil {
177178
slog.ErrorContext(c.Request.Context(), "fail to get cluster ", slog.Any("error", err))
178-
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
179+
httpbase.BadRequest(c, err.Error())
179180
return
180181
}
181182
svcName := s.getServiceNameFromRequest(c)
@@ -193,7 +194,7 @@ func (s *K8sHandler) getLogsByPod(c *gin.Context, cluster *cluster.Cluster, podN
193194
if err != nil {
194195
slog.ErrorContext(c.Request.Context(), "check pod existence", slog.Any("namespace", s.k8sNameSpace), slog.Any("pod-name", podName),
195196
slog.Any("clusterID", cluster.ID), slog.Any("error", err))
196-
c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to check pod existence"})
197+
httpbase.ServerError(c, fmt.Errorf("failed to check pod existence"))
197198
return
198199
}
199200
}
@@ -234,7 +235,7 @@ func (s *K8sHandler) readPodLogsFromCluster(c *gin.Context, cluster *cluster.Clu
234235
stream, message, err := rcommon.GetPodLogStream(c.Request.Context(), cluster.Client, podName, s.k8sNameSpace, rTypes.UserContainerName)
235236
if err != nil {
236237
slog.ErrorContext(c.Request.Context(), "Failed to open stream", slog.Any("error", err))
237-
c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to open stream"})
238+
httpbase.ServerError(c, fmt.Errorf("failed to open stream"))
238239
return
239240
}
240241
defer func() {
@@ -244,12 +245,10 @@ func (s *K8sHandler) readPodLogsFromCluster(c *gin.Context, cluster *cluster.Clu
244245
}()
245246

246247
if message != "" {
247-
c.JSON(http.StatusBadRequest, gin.H{"error": message})
248+
httpbase.BadRequest(c, message)
248249
return
249250
}
250251

251-
// TODO miss web socket
252-
253252
setResponseHeaderForLogs(c)
254253

255254
// Flush the header by calling http.Flusher if supported.
@@ -320,20 +319,20 @@ func (s *K8sHandler) GetReplica(c *gin.Context) {
320319
err := c.BindJSON(request)
321320
if err != nil {
322321
slog.ErrorContext(c.Request.Context(), "fail to parse input parameters", slog.Any("error", err))
323-
c.JSON(http.StatusInternalServerError, gin.H{"error": "fail to parse input parameters"})
322+
httpbase.ServerError(c, fmt.Errorf("fail to parse input parameters"))
324323
return
325324
}
326325
svcName := s.getServiceNameFromRequest(c)
327326
svc, err := s.serviceComponent.GetServiceByName(c.Request.Context(), svcName, request.ClusterID)
328327
if err != nil && !errors.Is(err, sql.ErrNoRows) {
329328
slog.ErrorContext(c.Request.Context(), "fail to get service", slog.Any("error", err))
330-
c.JSON(http.StatusInternalServerError, gin.H{"error": "fail to get service"})
329+
httpbase.ServerError(c, fmt.Errorf("fail to get service"))
331330
return
332331
}
333332
if svc == nil {
334333
// service not exist
335334
slog.ErrorContext(c.Request.Context(), "service not exist")
336-
c.JSON(http.StatusNotFound, gin.H{"error": "service not exist"})
335+
httpbase.NotFoundError(c, fmt.Errorf("service not exist"))
337336
return
338337
}
339338

@@ -400,7 +399,7 @@ func (s *K8sHandler) GetServiceInfo(c *gin.Context) {
400399
err := c.BindJSON(request)
401400
if err != nil {
402401
slog.ErrorContext(c.Request.Context(), "fail to parse input parameters", slog.Any("error", err))
403-
c.JSON(http.StatusInternalServerError, gin.H{"error": "fail to parse input parameters"})
402+
httpbase.ServerError(c, fmt.Errorf("fail to parse input parameters"))
404403
return
405404
}
406405

@@ -409,7 +408,7 @@ func (s *K8sHandler) GetServiceInfo(c *gin.Context) {
409408
resp, err := s.serviceComponent.GetServiceInfo(c.Request.Context(), *request)
410409
if err != nil {
411410
slog.ErrorContext(c.Request.Context(), "fail to get service info", slog.Any("error", err))
412-
c.JSON(http.StatusInternalServerError, gin.H{"error": "fail to get service info"})
411+
httpbase.ServerError(c, fmt.Errorf("fail to get service info"))
413412
return
414413
}
415414
c.JSON(http.StatusOK, resp)

0 commit comments

Comments
 (0)