Skip to content

Commit 1c6e1f1

Browse files
committed
update: 服务管理布局部分功能实现
1 parent 27671c6 commit 1c6e1f1

File tree

7 files changed

+1024
-160
lines changed

7 files changed

+1024
-160
lines changed

internal/api/services.go

Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,15 @@ func SetupServicesRoutes(rg *gin.RouterGroup, servicesService *services.ServiceI
2727
rg.GET("/services/:sid/:type", servicesHandler.GetServiceByID)
2828
rg.GET("/services/available-instances", servicesHandler.GetAvailableInstances)
2929
rg.POST("/services/assemble", servicesHandler.AssembleService)
30+
31+
// 服务操作路由
32+
rg.POST("/services/:sid/:type/start", servicesHandler.StartService)
33+
rg.POST("/services/:sid/:type/stop", servicesHandler.StopService)
34+
rg.POST("/services/:sid/:type/restart", servicesHandler.RestartService)
35+
rg.DELETE("/services/:sid/:type", servicesHandler.DeleteService)
36+
rg.PUT("/services/:sid/:type/rename", servicesHandler.RenameService)
37+
rg.POST("/services/:sid/:type/dissolve", servicesHandler.DissolveService)
38+
rg.POST("/services/:sid/:type/sync", servicesHandler.SyncService)
3039
}
3140

3241
// GetServices 获取所有服务
@@ -98,3 +107,124 @@ func (h *ServicesHandler) AssembleService(c *gin.Context) {
98107
"message": "组装服务成功",
99108
})
100109
}
110+
111+
// StartService 启动服务
112+
func (h *ServicesHandler) StartService(c *gin.Context) {
113+
sid := c.Param("sid")
114+
serviceType := c.Param("type")
115+
116+
if err := h.servicesService.StartService(sid, serviceType); err != nil {
117+
c.JSON(http.StatusInternalServerError, gin.H{"error": "启动服务失败: " + err.Error()})
118+
return
119+
}
120+
121+
c.JSON(http.StatusOK, gin.H{
122+
"success": true,
123+
"message": "启动服务成功",
124+
})
125+
}
126+
127+
// StopService 停止服务
128+
func (h *ServicesHandler) StopService(c *gin.Context) {
129+
sid := c.Param("sid")
130+
serviceType := c.Param("type")
131+
132+
if err := h.servicesService.StopService(sid, serviceType); err != nil {
133+
c.JSON(http.StatusInternalServerError, gin.H{"error": "停止服务失败: " + err.Error()})
134+
return
135+
}
136+
137+
c.JSON(http.StatusOK, gin.H{
138+
"success": true,
139+
"message": "停止服务成功",
140+
})
141+
}
142+
143+
// RestartService 重启服务
144+
func (h *ServicesHandler) RestartService(c *gin.Context) {
145+
sid := c.Param("sid")
146+
serviceType := c.Param("type")
147+
148+
if err := h.servicesService.RestartService(sid, serviceType); err != nil {
149+
c.JSON(http.StatusInternalServerError, gin.H{"error": "重启服务失败: " + err.Error()})
150+
return
151+
}
152+
153+
c.JSON(http.StatusOK, gin.H{
154+
"success": true,
155+
"message": "重启服务成功",
156+
})
157+
}
158+
159+
// DeleteService 删除服务
160+
func (h *ServicesHandler) DeleteService(c *gin.Context) {
161+
sid := c.Param("sid")
162+
serviceType := c.Param("type")
163+
164+
if err := h.servicesService.DeleteService(sid, serviceType); err != nil {
165+
c.JSON(http.StatusInternalServerError, gin.H{"error": "删除服务失败: " + err.Error()})
166+
return
167+
}
168+
169+
c.JSON(http.StatusOK, gin.H{
170+
"success": true,
171+
"message": "删除服务成功",
172+
})
173+
}
174+
175+
// RenameService 重命名服务
176+
func (h *ServicesHandler) RenameService(c *gin.Context) {
177+
sid := c.Param("sid")
178+
serviceType := c.Param("type")
179+
180+
var req struct {
181+
Name string `json:"name" binding:"required"`
182+
}
183+
184+
if err := c.ShouldBindJSON(&req); err != nil {
185+
c.JSON(http.StatusBadRequest, gin.H{"error": "请求参数错误: " + err.Error()})
186+
return
187+
}
188+
189+
if err := h.servicesService.RenameService(sid, serviceType, req.Name); err != nil {
190+
c.JSON(http.StatusInternalServerError, gin.H{"error": "重命名服务失败: " + err.Error()})
191+
return
192+
}
193+
194+
c.JSON(http.StatusOK, gin.H{
195+
"success": true,
196+
"message": "重命名服务成功",
197+
})
198+
}
199+
200+
// DissolveService 解散服务
201+
func (h *ServicesHandler) DissolveService(c *gin.Context) {
202+
sid := c.Param("sid")
203+
serviceType := c.Param("type")
204+
205+
if err := h.servicesService.DissolveService(sid, serviceType); err != nil {
206+
c.JSON(http.StatusInternalServerError, gin.H{"error": "解散服务失败: " + err.Error()})
207+
return
208+
}
209+
210+
c.JSON(http.StatusOK, gin.H{
211+
"success": true,
212+
"message": "解散服务成功",
213+
})
214+
}
215+
216+
// SyncService 同步服务
217+
func (h *ServicesHandler) SyncService(c *gin.Context) {
218+
sid := c.Param("sid")
219+
serviceType := c.Param("type")
220+
221+
if err := h.servicesService.SyncService(sid, serviceType); err != nil {
222+
c.JSON(http.StatusInternalServerError, gin.H{"error": "同步服务失败: " + err.Error()})
223+
return
224+
}
225+
226+
c.JSON(http.StatusOK, gin.H{
227+
"success": true,
228+
"message": "同步服务成功",
229+
})
230+
}

internal/models/models.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,8 @@ type Services struct {
157157
EntranceHost *string `json:"entranceHost,omitempty" gorm:"type:text;column:entrance_host"`
158158
ExitPort *string `json:"exitPort,omitempty" gorm:"type:text;column:exit_port"`
159159
ExitHost *string `json:"exitHost,omitempty" gorm:"type:text;column:exit_host"`
160+
TotalRx int64 `json:"totalRx" gorm:"default:0;column:total_rx"`
161+
TotalTx int64 `json:"totalTx" gorm:"default:0;column:total_tx"`
160162
CreatedAt time.Time `json:"createdAt" gorm:"autoCreateTime;column:created_at"`
161163
UpdatedAt time.Time `json:"updatedAt" gorm:"autoUpdateTime;column:updated_at"`
162164
}

internal/services/models.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ type Service struct {
1717
EntranceHost *string `json:"entranceHost,omitempty"`
1818
ExitPort *string `json:"exitPort,omitempty"`
1919
ExitHost *string `json:"exitHost,omitempty"`
20+
TotalRx int64 `json:"totalRx"`
21+
TotalTx int64 `json:"totalTx"`
2022
CreatedAt time.Time `json:"createdAt,omitempty"`
2123
UpdatedAt time.Time `json:"updatedAt,omitempty"`
2224
}

0 commit comments

Comments
 (0)