agent/src/main.go
2025-03-30 09:13:46 +08:00

85 lines
1.7 KiB
Go

package main
import (
"agent/src/agent"
"agent/src/utils/log"
"context"
"fmt"
"os"
"os/signal"
"syscall"
"time"
"github.com/spf13/cobra"
)
var (
main_data = struct {
port uint64
crtDir string
docs string
saveRequestTo string
}{}
)
func init() {
f := cmd_run.Flags()
f.Uint64Var(&main_data.port, "port", 8080, "http port")
f.StringVar(&main_data.crtDir, "crt", "", "where is server.crt, server.key (default no https)")
f.StringVar(&main_data.docs, "docs", "./docs", "where is the document directory")
// TODO
// f.StringVar(&main_data.saveRequestTo, "save_request_to", "", "save request to dir (default not save)")
}
var cmd_root = &cobra.Command{
Use: "agent",
}
var cmd_run = &cobra.Command{
Use: "run",
Short: "run agent service",
Example: "agent run",
RunE: func(cmd *cobra.Command, args []string) error {
var saveRequestTo, crtDir *string
if len(main_data.saveRequestTo) > 0 {
saveRequestTo = &main_data.saveRequestTo
}
if len(main_data.crtDir) > 0 {
crtDir = &main_data.crtDir
}
fmt.Println(main_data.saveRequestTo)
a := agent.NewAgent(cmd.Context(), main_data.docs)
a.Start(main_data.port, crtDir)
_ = saveRequestTo
return nil
},
}
func main() {
ctx := context.Background()
ctx, fnCancel := context.WithCancel(ctx)
cmd_root.AddCommand(cmd_run)
cmd_root.ExecuteContext(ctx)
handleTerminationSignals(fnCancel)
}
func handleTerminationSignals(stopFunc func()) {
signalCh := make(chan os.Signal, 1)
signal.Notify(signalCh, syscall.SIGTERM, syscall.SIGINT)
switch s := <-signalCh; s {
case syscall.SIGTERM, syscall.SIGINT:
log.Info("Stopping agent")
// stop nicely
stopFunc()
time.Sleep(2*time.Second)
// os.Exit(-int(syscall.SIGINT))
}
}