Browse Source

Basket cleaner by worker

Vova Tkach 5 years ago
parent
commit
b2b6acab21
2 changed files with 27 additions and 37 deletions
  1. 13 32
      basket.go
  2. 14 5
      main.go

+ 13 - 32
basket.go

@@ -1,45 +1,26 @@
 package main
 
 import (
-	"fmt"
+	"context"
 	"time"
 
 	"golang-fave/engine/basket"
-)
-
-func basket_clean_do(sb *basket.Basket, stop chan bool) {
-	sb.Cleanup()
-}
 
-func basket_clean_start(sb *basket.Basket) (chan bool, chan bool) {
-	ch := make(chan bool)
-	stop := make(chan bool)
-
-	go func() {
-		for {
-			select {
-			case <-time.After(30 * time.Minute):
-				// Cleanup every 30 minutes
-				basket_clean_do(sb, stop)
-			case <-ch:
-				ch <- true
-				return
-			}
-		}
-	}()
-	return ch, stop
-}
+	"github.com/vladimirok5959/golang-worker/worker"
+)
 
-func basket_clean_stop(ch, stop chan bool) {
-	for {
+func basket_cleaner(sb *basket.Basket) *worker.Worker {
+	return worker.New(func(ctx context.Context, w *worker.Worker, o *[]worker.Iface) {
 		select {
-		case stop <- true:
-		case ch <- true:
-			<-ch
+		case <-ctx.Done():
 			return
-		case <-time.After(3 * time.Second):
-			fmt.Println("Basket error: force exit by timeout after 3 seconds")
+		case <-time.After(1 * time.Second):
+			if sb, ok := (*o)[0].(*basket.Basket); ok {
+				sb.Cleanup()
+			}
 			return
 		}
-	}
+	}, &[]worker.Iface{
+		sb,
+	})
 }

+ 14 - 5
main.go

@@ -90,8 +90,7 @@ func main() {
 
 	// Shop basket
 	sb := basket.New()
-	sb_cl_ch, sb_cl_stop := basket_clean_start(sb)
-	defer basket_clean_stop(sb_cl_ch, sb_cl_stop)
+	wBasketCl := basket_cleaner(sb)
 
 	// Init cache blocks
 	cbs := cblocks.New()
@@ -149,7 +148,11 @@ func main() {
 		if v, ok := (*o)[8].(*modules.Modules); ok {
 			mods = v
 		}
-		// ---
+
+		var sb *basket.Basket
+		if v, ok := (*o)[9].(*basket.Basket); ok {
+			sb = v
+		}
 
 		// Mounted assets
 		if res.Response(
@@ -282,7 +285,12 @@ func main() {
 	) error {
 		var errs []string
 
-		// ---
+		if wBasketCl, ok := (*o)[10].(*worker.Worker); ok {
+			if err := wBasketCl.Shutdown(ctx); err != nil {
+				errs = append(errs, fmt.Sprintf("(%T): %s", wBasketCl, err.Error()))
+			}
+		}
+
 		if wSmtpSnd, ok := (*o)[5].(*worker.Worker); ok {
 			if err := wSmtpSnd.Shutdown(ctx); err != nil {
 				errs = append(errs, fmt.Sprintf("(%T): %s", wSmtpSnd, err.Error()))
@@ -316,7 +324,6 @@ func main() {
 		if lg, ok := (*o)[0].(*logger.Logger); ok {
 			lg.Close()
 		}
-		// ---
 
 		if len(errs) > 0 {
 			return errors.New("Shutdown callback: " + strings.Join(errs, ", "))
@@ -346,6 +353,8 @@ func main() {
 				res,
 				stat,
 				mods,
+				sb,
+				wBasketCl,
 			},
 		},
 	)