Browse Source

Simple worker, reload database file every hour

Volodymyr Tkach 2 years ago
parent
commit
d1cb35929e
5 changed files with 51 additions and 0 deletions
  1. 4 0
      cmd/ip2location/main.go
  2. 1 0
      go.mod
  3. 2 0
      go.sum
  4. 43 0
      internal/workers/worker_reloader/worker_reloader.go
  5. 1 0
      internal/workers/workers.go

+ 4 - 0
cmd/ip2location/main.go

@@ -7,6 +7,7 @@ import (
 	"github.com/vladimirok5959/golang-ip2location/internal/client"
 	"github.com/vladimirok5959/golang-ip2location/internal/consts"
 	"github.com/vladimirok5959/golang-ip2location/internal/server"
+	"github.com/vladimirok5959/golang-ip2location/internal/workers/worker_reloader"
 	"github.com/vladimirok5959/golang-utils/utils/http/logger"
 	"github.com/vladimirok5959/golang-utils/utils/penv"
 )
@@ -40,7 +41,10 @@ func main() {
 			return ctrlc.MakeError(shutdown, ctrlc.AppError(err), cl)
 		}
 
+		workerReloader := worker_reloader.New(cl)
+
 		return &[]ctrlc.Iface{
+			workerReloader,
 			sv,
 			cl,
 		}

+ 1 - 0
go.mod

@@ -8,6 +8,7 @@ require (
 	github.com/onsi/gomega v1.19.0
 	github.com/vladimirok5959/golang-ctrlc v1.0.4
 	github.com/vladimirok5959/golang-utils v1.3.6
+	github.com/vladimirok5959/golang-worker v1.0.0
 )
 
 require (

+ 2 - 0
go.sum

@@ -45,6 +45,8 @@ github.com/vladimirok5959/golang-server-sessions v1.0.9 h1:oGj3jfpIo5PtWojeGDexD
 github.com/vladimirok5959/golang-server-sessions v1.0.9/go.mod h1:w0JRthleTg5D4lY32iczfuUfKCXpbgUiLXHhIUFyY4o=
 github.com/vladimirok5959/golang-utils v1.3.6 h1:PmS//Bd1qIFHNeEhzuQBRZgeOpMMFAzmjaB8WCVXjuI=
 github.com/vladimirok5959/golang-utils v1.3.6/go.mod h1:IwOGU0ErnuHJhSOvS3MuOJfbuI2G7VZY3EXRe44fD18=
+github.com/vladimirok5959/golang-worker v1.0.0 h1:Qu29qWnpy0eXn4dKMd5mEjH+by1o7JWErvcIkMhNQ50=
+github.com/vladimirok5959/golang-worker v1.0.0/go.mod h1:WQitGjRYwCuS1/AoOQvHHbvYXCqR+FSzFW0LsunkBy4=
 github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=

+ 43 - 0
internal/workers/worker_reloader/worker_reloader.go

@@ -0,0 +1,43 @@
+package worker_reloader
+
+import (
+	"context"
+	"time"
+
+	"github.com/vladimirok5959/golang-ip2location/internal/client"
+	"github.com/vladimirok5959/golang-utils/utils/http/logger"
+	"github.com/vladimirok5959/golang-worker/worker"
+)
+
+var Delay = 60 * time.Minute
+
+func New(cl *client.Client) *worker.Worker {
+	time.Sleep(1000 * time.Millisecond)
+	return worker.New(func(ctx context.Context, w *worker.Worker, o *[]worker.Iface) {
+		if cl, ok := (*o)[0].(*client.Client); ok {
+			Run(ctx, cl)
+		}
+		select {
+		case <-ctx.Done():
+		case <-time.After(Delay):
+			return
+		}
+	}, &[]worker.Iface{
+		cl,
+	})
+}
+
+func Run(ctx context.Context, cl *client.Client) {
+	logger.LogInfo("worker reloader: trying to reload database\n")
+
+	var err error
+	if err = cl.ReloadDatabase(ctx); err != nil {
+		logger.LogInternalError(err)
+	}
+
+	if err == nil {
+		logger.LogInfo("worker reloader: done\n")
+	} else {
+		logger.LogInfo("worker reloader: done with error\n")
+	}
+}

+ 1 - 0
internal/workers/workers.go

@@ -0,0 +1 @@
+package workers