Files
WatchDog_Linux-systemd/command/commandParse.go
NanamiAdmin 58a8efc17a refactor(socket): decouple command handling and add message sending
- Move command handler to variable for better flexibility
- Add SendMsg function for sending messages through socket
- Fix missing return statements in command execution
- Improve error handling in monitor exception reporting
2026-04-28 19:55:45 +08:00

71 lines
1.6 KiB
Go

package command
import (
"Watchdog_Linux-systemd/monitor"
"Watchdog_Linux-systemd/postLog"
"fmt"
"strings"
"os"
)
func getTextMiddle(text, left, right string) string {
start := 0
if left != "" {
idx := strings.Index(text, left)
if idx == -1 {
return ""
}
start = idx + len(left)
}
if right == "" {
if start > len(text) {
return ""
}
return text[start:]
}
endIdx := strings.Index(text[start:], right)
if endIdx == -1 {
return ""
}
return text[start : start+endIdx]
}
func getCommand(content string) string {
return getTextMiddle(content, "[", "]")
}
func getContent(content, cmdType string) string {
return getTextMiddle(content, "<" + cmdType + ">", "</" + cmdType + ">")
}
func ExecuteCommand(input string) error {
cmdType := getCommand(input)
switch cmdType {
case "monitor.add":
serviceName := getContent(input, "serviceName")
postLog.Info(fmt.Sprintf("Add service monitor: %s", serviceName))
if len(serviceName) != 0 {
err := monitor.AddServiceMonitor(serviceName)
if err != nil {
return fmt.Errorf("failed to add service monitor: %v", err)
}
return nil
}
case "monitor.remove":
serviceName := getContent(input, "serviceName")
postLog.Info(fmt.Sprintf("Remove service monitor: %s", serviceName))
if len(serviceName) != 0 {
err := monitor.RemoveServiceMonitor(serviceName)
if err != nil {
return fmt.Errorf("failed to remove service monitor: %v", err)
}
return nil
}
case "watchdog.shutdown":
os.Exit(0)
return nil
}
return fmt.Errorf("unknown command")
}