github.com/codingeasygo/util@v0.0.0-20231206062002-1ce2f004b7d9/runner/runner.go (about)

     1  package runner
     2  
     3  import (
     4  	"fmt"
     5  	"log"
     6  	"time"
     7  )
     8  
     9  //ErrNotTask is error for not task
    10  var ErrNotTask = fmt.Errorf("not task")
    11  
    12  //NamedRunner will run call by delay
    13  func NamedRunner(name string, delay time.Duration, running *bool, call func() error) {
    14  	log.Printf("%v is starting", name)
    15  	var finishCount = 0
    16  	for *running {
    17  		err := call()
    18  		if err == nil {
    19  			finishCount++
    20  			continue
    21  		}
    22  		if err != ErrNotTask {
    23  			log.Printf("%v is fail with %v", name, err)
    24  		} else if finishCount > 0 {
    25  			log.Printf("%v is having %v finished", name, finishCount)
    26  		}
    27  		finishCount = 0
    28  		time.Sleep(delay)
    29  	}
    30  	log.Printf("%v is stopped", name)
    31  }