From 82dc98e5d1c9933bfd964d64b2ec8b551c035013 Mon Sep 17 00:00:00 2001 From: runstp Date: Sun, 1 Jan 2023 09:02:58 +0800 Subject: [PATCH] =?UTF-8?q?[feature]=20=E6=96=B0=E5=A2=9Espider=E5=81=A5?= =?UTF-8?q?=E5=BA=B7=E6=A3=80=E6=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmd/spider/main.go | 16 ++++++++++- internal/app/spider/health/httpserver.go | 34 ++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 internal/app/spider/health/httpserver.go 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) +}