diff --git a/cmd/spider/main.go b/cmd/spider/main.go index be444f3..6fc33a3 100644 --- a/cmd/spider/main.go +++ b/cmd/spider/main.go @@ -4,6 +4,7 @@ import ( "context" "git.vtb.link/eoefans/internal/app/spider" + "git.vtb.link/eoefans/internal/app/spider/health" "git.vtb.link/eoefans/internal/app/spider/video_analysis" "git.vtb.link/eoefans/internal/launcher" "git.vtb.link/eoefans/internal/pkg/bilibili" @@ -22,11 +23,12 @@ func newSpider() fx.Option { fx.Provide(spider.NewVideo), fx.Provide(spider.NewUpdate), fx.Provide(bilibili.NewSDK), + fx.Provide(health.NewCheckServer), fx.Invoke(lc), ) } -func lc(lifecycle fx.Lifecycle, spiderVideo *spider.Video, spiderUpdate *spider.Update, shutdown fx.Shutdowner) { +func lc(lifecycle fx.Lifecycle, spiderVideo *spider.Video, spiderUpdate *spider.Update, checkServer *health.CheckServer, shutdown fx.Shutdowner) { lifecycle.Append(fx.Hook{ OnStart: func(ctx context.Context) error { return spiderVideo.Run(ctx) @@ -50,4 +52,16 @@ func lc(lifecycle fx.Lifecycle, spiderVideo *spider.Video, spiderUpdate *spider. return shutdown.Shutdown() }, }) + + lifecycle.Append(fx.Hook{ + OnStart: func(ctx context.Context) error { + return checkServer.Run(ctx) + }, + OnStop: func(ctx context.Context) error { + if err := checkServer.Stop(ctx); err != nil { + return err + } + return shutdown.Shutdown() + }, + }) } diff --git a/internal/app/spider/health/httpserver.go b/internal/app/spider/health/httpserver.go new file mode 100644 index 0000000..e8a3c6b --- /dev/null +++ b/internal/app/spider/health/httpserver.go @@ -0,0 +1,34 @@ +package health + +import ( + "context" + "fmt" + "net/http" + "time" +) + +type CheckServer struct { + server *http.Server +} + +func NewCheckServer() *CheckServer { + http.HandleFunc("/check", func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusOK) + _, _ = w.Write([]byte(fmt.Sprintf(`{"code":0, "message": "ok", "data": {"now_time": %s}}`, time.Now().Format(time.RFC3339)))) + }) + + return &CheckServer{ + server: &http.Server{ + Addr: ":9266", + Handler: http.DefaultServeMux, + }, + } +} + +func (check *CheckServer) Run(ctx context.Context) error { + return check.server.ListenAndServe() +} + +func (check *CheckServer) Stop(ctx context.Context) error { + return check.server.Shutdown(ctx) +}