- 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
71 lines
1.6 KiB
Go
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")
|
|
} |