fix(instance): add status verification after service operations
Add verification checks to ensure service is running/stopped after start/stop/restart operations Fix import order and remove unnecessary whitespace
This commit is contained in:
+42
-9
@@ -13,11 +13,11 @@ import (
|
||||
|
||||
"super-frpc/config"
|
||||
"super-frpc/database"
|
||||
"super-frpc/utils"
|
||||
"super-frpc/global"
|
||||
"super-frpc/postLog"
|
||||
"super-frpc/service"
|
||||
"super-frpc/utils"
|
||||
"super-frpc/watchdog"
|
||||
"super-frpc/global"
|
||||
)
|
||||
|
||||
func CreateInstanceHandler(w http.ResponseWriter, r *http.Request) {
|
||||
@@ -606,6 +606,12 @@ func StartInstanceHandler(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
postLog.Debug(fmt.Sprintf("[StartInstanceHandler] Windows service %s started successfully", serviceName))
|
||||
time.Sleep(time.Millisecond * 200)
|
||||
if err := service.IsInstanceRunning(instanceID); err != nil {
|
||||
postLog.Error(fmt.Sprintf("[StartInstanceHandler] Windows service %s failed to start: %v", serviceName, err))
|
||||
utils.SendErrorResponse(w, http.StatusInternalServerError, fmt.Sprintf("Failed to start Windows service: %v", err))
|
||||
return
|
||||
}
|
||||
|
||||
case "systemd":
|
||||
if err := service.StartSystemdService(serviceName); err != nil {
|
||||
@@ -614,6 +620,12 @@ func StartInstanceHandler(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
postLog.Debug(fmt.Sprintf("[StartInstanceHandler] Systemd service %s started successfully", serviceName))
|
||||
time.Sleep(time.Millisecond * 200)
|
||||
if err := service.IsInstanceRunning(instanceID); err != nil {
|
||||
postLog.Error(fmt.Sprintf("[StartInstanceHandler] Systemd service %s failed to start: %v", serviceName, err))
|
||||
utils.SendErrorResponse(w, http.StatusInternalServerError, fmt.Sprintf("Failed to start systemd service: %v", err))
|
||||
return
|
||||
}
|
||||
|
||||
case "init.d":
|
||||
if err := service.StartInitDService(serviceName); err != nil {
|
||||
@@ -622,6 +634,12 @@ func StartInstanceHandler(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
postLog.Debug(fmt.Sprintf("[StartInstanceHandler] Init.d service %s started successfully", serviceName))
|
||||
time.Sleep(time.Millisecond * 200)
|
||||
if err := service.IsInstanceRunning(instanceID); err != nil {
|
||||
postLog.Error(fmt.Sprintf("[StartInstanceHandler] Init.d service %s failed to start: %v", serviceName, err))
|
||||
utils.SendErrorResponse(w, http.StatusInternalServerError, fmt.Sprintf("Failed to start init.d service: %v", err))
|
||||
return
|
||||
}
|
||||
|
||||
default:
|
||||
utils.SendErrorResponse(w, http.StatusInternalServerError, fmt.Sprintf("Unsupported init system: %s", initType))
|
||||
@@ -644,7 +662,6 @@ func StartInstanceHandler(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
postLog.Info(fmt.Sprintf("[StartInstanceHandler] Instance %d started successfully", instanceID))
|
||||
}
|
||||
|
||||
@@ -716,6 +733,12 @@ func StopInstanceHandler(w http.ResponseWriter, r *http.Request) {
|
||||
utils.SendErrorResponse(w, http.StatusInternalServerError, fmt.Sprintf("Failed to stop Windows service: %v", err))
|
||||
return
|
||||
}
|
||||
time.Sleep(time.Millisecond * 200)
|
||||
if err := service.IsInstanceRunning(instanceID); err == nil {
|
||||
postLog.Error(fmt.Sprintf("[StopInstanceHandler] Windows service %s failed to stop: %v", serviceName, err))
|
||||
utils.SendErrorResponse(w, http.StatusInternalServerError, fmt.Sprintf("Failed to stop Windows service: %v", err))
|
||||
return
|
||||
}
|
||||
postLog.Debug(fmt.Sprintf("[StopInstanceHandler] Windows service %s stopped successfully", serviceName))
|
||||
|
||||
case "systemd":
|
||||
@@ -728,6 +751,7 @@ func StopInstanceHandler(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
case "init.d":
|
||||
if err := service.StopInitDService(serviceName); err != nil {
|
||||
time.Sleep(time.Millisecond * 200)
|
||||
postLog.Error(fmt.Sprintf("[StopInstanceHandler] Failed to stop init.d service %s: %v", serviceName, err))
|
||||
utils.SendErrorResponse(w, http.StatusInternalServerError, fmt.Sprintf("Failed to stop init.d service: %v", err))
|
||||
return
|
||||
@@ -754,7 +778,6 @@ func StopInstanceHandler(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
postLog.Info(fmt.Sprintf("[StopInstanceHandler] Instance %d stopped successfully", instanceID))
|
||||
}
|
||||
|
||||
@@ -823,26 +846,36 @@ func RestartInstanceHandler(w http.ResponseWriter, r *http.Request) {
|
||||
case "windows":
|
||||
if err := service.RestartWindowsService(serviceName); err != nil {
|
||||
postLog.Error(fmt.Sprintf("[RestartInstanceHandler] Failed to restart Windows service %s: %v", serviceName, err))
|
||||
utils.SendErrorResponse(w, http.StatusInternalServerError, fmt.Sprintf("Failed to restart Windows service: %v", err))
|
||||
time.Sleep(time.Millisecond * 200)
|
||||
if err := service.IsInstanceRunning(instanceID); err != nil {
|
||||
postLog.Error(fmt.Sprintf("[RestartInstanceHandler] Windows service %s restarted but is not running: %v", serviceName, err))
|
||||
utils.SendErrorResponse(w, http.StatusInternalServerError, fmt.Sprintf("Windows service restarted but is not running: %v", err))
|
||||
return
|
||||
}
|
||||
postLog.Debug(fmt.Sprintf("[RestartInstanceHandler] Windows service %s restarted successfully", serviceName))
|
||||
}
|
||||
|
||||
case "systemd":
|
||||
if err := service.RestartSystemdService(serviceName); err != nil {
|
||||
postLog.Error(fmt.Sprintf("[RestartInstanceHandler] Failed to restart systemd service %s: %v", serviceName, err))
|
||||
utils.SendErrorResponse(w, http.StatusInternalServerError, fmt.Sprintf("Failed to restart systemd service: %v", err))
|
||||
time.Sleep(time.Millisecond * 200)
|
||||
if err := service.IsInstanceRunning(instanceID); err != nil {
|
||||
postLog.Error(fmt.Sprintf("[RestartInstanceHandler] Failed to check if systemd service %s is running after restart: %v", serviceName, err))
|
||||
utils.SendErrorResponse(w, http.StatusInternalServerError, fmt.Sprintf("Failed to check if systemd service is running after restart: %v", err))
|
||||
return
|
||||
}
|
||||
postLog.Debug(fmt.Sprintf("[RestartInstanceHandler] Systemd service %s restarted successfully", serviceName))
|
||||
}
|
||||
|
||||
case "init.d":
|
||||
if err := service.RestartInitDService(serviceName); err != nil {
|
||||
postLog.Error(fmt.Sprintf("[RestartInstanceHandler] Failed to restart init.d service %s: %v", serviceName, err))
|
||||
utils.SendErrorResponse(w, http.StatusInternalServerError, fmt.Sprintf("Failed to restart init.d service: %v", err))
|
||||
time.Sleep(time.Millisecond * 200)
|
||||
if err := service.IsInstanceRunning(instanceID); err != nil {
|
||||
postLog.Error(fmt.Sprintf("[RestartInstanceHandler] Failed to check init.d service %s status after restart: %v", serviceName, err))
|
||||
utils.SendErrorResponse(w, http.StatusInternalServerError, fmt.Sprintf("Failed to check init.d service status after restart: %v", err))
|
||||
return
|
||||
}
|
||||
postLog.Debug(fmt.Sprintf("[RestartInstanceHandler] Init.d service %s restarted successfully", serviceName))
|
||||
}
|
||||
|
||||
default:
|
||||
utils.SendErrorResponse(w, http.StatusInternalServerError, fmt.Sprintf("Unsupported init system: %s", initType))
|
||||
|
||||
Reference in New Issue
Block a user