From c9b2e0938da4949e43328e5e98a5103da7d00669 Mon Sep 17 00:00:00 2001 From: YouROK <8yourok8@mail.ru> Date: Thu, 19 Nov 2020 10:26:29 +0300 Subject: [PATCH] add shutdown --- src/main/main.go | 12 +++--- src/main/preconfig_pos.go | 70 ++++++++++++++++----------------- src/server/settings/settings.go | 7 ++++ src/server/torr/apihelper.go | 7 ++++ src/server/web/api/route.go | 18 +++++++++ 5 files changed, 73 insertions(+), 41 deletions(-) diff --git a/src/main/main.go b/src/main/main.go index 341670d..a5c26b7 100644 --- a/src/main/main.go +++ b/src/main/main.go @@ -14,11 +14,11 @@ import ( ) type args struct { - Port string `arg:"-p" help:"web server port"` - Path string `arg:"-d" help:"database path"` - Add string `arg:"-a" help:"add torrent link and exit"` - RDB bool `arg:"-r" help:"start in read-only DB mode"` - Kill bool `arg:"-k" help:"dont kill program on signal"` + Port string `arg:"-p" help:"web server port"` + Path string `arg:"-d" help:"database path"` + Add string `arg:"-a" help:"add torrent link and exit"` + RDB bool `arg:"-r" help:"start in read-only DB mode"` + DontKill bool `arg:"-k" help:"dont kill program on signal"` } func (args) Version() string { @@ -42,7 +42,7 @@ func main() { add() } - Preconfig(params.Kill) + Preconfig(params.DontKill) server.Start(params.Path, params.Port, params.RDB) fmt.Println(server.WaitServer()) diff --git a/src/main/preconfig_pos.go b/src/main/preconfig_pos.go index 827121d..c91d23b 100644 --- a/src/main/preconfig_pos.go +++ b/src/main/preconfig_pos.go @@ -3,47 +3,47 @@ package main import ( - "context" "fmt" - "net" "os" "os/signal" "syscall" ) -func Preconfig(kill bool) { - sigc := make(chan os.Signal, 1) - signal.Notify(sigc, - syscall.SIGHUP, - syscall.SIGINT, - syscall.SIGSTOP, - syscall.SIGPIPE, - syscall.SIGTERM, - syscall.SIGQUIT) - go func() { - for s := range sigc { - if kill { - fmt.Println("Signal catched:", s) - fmt.Println("For stop server, close in web") +func Preconfig(dkill bool) { + if dkill { + sigc := make(chan os.Signal, 1) + signal.Notify(sigc, + syscall.SIGHUP, + syscall.SIGINT, + syscall.SIGSTOP, + syscall.SIGPIPE, + syscall.SIGTERM, + syscall.SIGQUIT) + go func() { + for s := range sigc { + if dkill { + fmt.Println("Signal catched:", s) + fmt.Println("For stop server, close in api") + } } - } - }() - - //dns resover - addrs, err := net.LookupHost("www.themoviedb.org") - if len(addrs) == 0 { - fmt.Println("Check dns", addrs, err) - - fn := func(ctx context.Context, network, address string) (net.Conn, error) { - d := net.Dialer{} - return d.DialContext(ctx, "udp", "1.1.1.1:53") - } - - net.DefaultResolver = &net.Resolver{ - Dial: fn, - } - - addrs, err = net.LookupHost("www.themoviedb.org") - fmt.Println("Check new dns", addrs, err) + }() } + // + // //dns resover + // addrs, err := net.LookupHost("www.themoviedb.org") + // if len(addrs) == 0 { + // fmt.Println("Check dns", addrs, err) + // + // fn := func(ctx context.Context, network, address string) (net.Conn, error) { + // d := net.Dialer{} + // return d.DialContext(ctx, "udp", "1.1.1.1:53") + // } + // + // net.DefaultResolver = &net.Resolver{ + // Dial: fn, + // } + // + // addrs, err = net.LookupHost("www.themoviedb.org") + // fmt.Println("Check new dns", addrs, err) + // } } diff --git a/src/server/settings/settings.go b/src/server/settings/settings.go index 25ba802..950eaf9 100644 --- a/src/server/settings/settings.go +++ b/src/server/settings/settings.go @@ -14,3 +14,10 @@ func InitSets(path string, readOnly bool) { func CloseDB() { tdb.CloseDB() } + +func IsReadOnly() bool { + if tdb == nil || tdb.ReadOnly { + return true + } + return false +} diff --git a/src/server/torr/apihelper.go b/src/server/torr/apihelper.go index 4d6d52d..bc04af2 100644 --- a/src/server/torr/apihelper.go +++ b/src/server/torr/apihelper.go @@ -1,6 +1,7 @@ package torr import ( + "os" "sort" "server/log" @@ -104,3 +105,9 @@ func SetSettings(set *sets.BTSets) { sets.SetBTSets(set) bts.Connect() } + +func Shutdown() { + bts.Disconnect() + sets.CloseDB() + os.Exit(0) +} diff --git a/src/server/web/api/route.go b/src/server/web/api/route.go index 21034b5..f6a544d 100644 --- a/src/server/web/api/route.go +++ b/src/server/web/api/route.go @@ -1,7 +1,12 @@ package api import ( + "net/http" + "time" + "github.com/gin-gonic/gin" + sets "server/settings" + "server/torr" "server/version" ) @@ -11,6 +16,7 @@ type requestI struct { func SetupRoute(route *gin.Engine) { route.GET("/echo", echo) + route.GET("/shutdown", shutdown) route.POST("/settings", settings) @@ -29,3 +35,15 @@ func SetupRoute(route *gin.Engine) { func echo(c *gin.Context) { c.String(200, "%v", version.Version) } + +func shutdown(c *gin.Context) { + if sets.IsReadOnly() { + c.Status(http.StatusForbidden) + return + } + c.Status(200) + go func() { + time.Sleep(1000) + torr.Shutdown() + }() +}