gddo-server: simplify background tasks with time.Tick
These tasks operate concurrently with the request flow anyway, so each
task should be on its own tick loop.
Change-Id: I129212b297db15395f7852e5b73e66081c63fbd0
Reviewed-on: https://go-review.googlesource.com/66652
Reviewed-by: Tuo Shan <shantuo@google.com>
diff --git a/gddo-server/background.go b/gddo-server/background.go
index 2a42276..025e6e1 100644
--- a/gddo-server/background.go
+++ b/gddo-server/background.go
@@ -15,50 +15,6 @@
"github.com/golang/gddo/gosrc"
)
-type BackgroundTask struct {
- name string
- fn func() error
- interval time.Duration
- next time.Time
-}
-
-func runBackgroundTasks() {
- defer log.Println("ERROR: Background exiting!")
-
- var backgroundTasks = []BackgroundTask{
- {
- name: "GitHub updates",
- fn: readGitHubUpdates,
- interval: viper.GetDuration(ConfigGithubInterval),
- },
- {
- name: "Crawl",
- fn: doCrawl,
- interval: viper.GetDuration(ConfigCrawlInterval),
- },
- }
-
- sleep := time.Minute
- for _, task := range backgroundTasks {
- if task.interval > 0 && sleep > task.interval {
- sleep = task.interval
- }
- }
-
- for {
- for _, task := range backgroundTasks {
- start := time.Now()
- if task.interval > 0 && start.After(task.next) {
- if err := task.fn(); err != nil {
- log.Printf("Task %s: %v", task.name, err)
- }
- task.next = time.Now().Add(task.interval)
- }
- }
- time.Sleep(sleep)
- }
-}
-
func doCrawl() error {
// Look for new package to crawl.
importPath, hasSubdirs, err := db.PopNewCrawl()
diff --git a/gddo-server/main.go b/gddo-server/main.go
index 018fa21..da97770 100644
--- a/gddo-server/main.go
+++ b/gddo-server/main.go
@@ -920,7 +920,20 @@
log.Fatalf("Error opening database: %v", err)
}
- go runBackgroundTasks()
+ go func() {
+ for range time.Tick(viper.GetDuration(ConfigCrawlInterval)) {
+ if err := doCrawl(); err != nil {
+ log.Printf("Task Crawl: %v", err)
+ }
+ }
+ }()
+ go func() {
+ for range time.Tick(viper.GetDuration(ConfigGithubInterval)) {
+ if err := readGitHubUpdates(); err != nil {
+ log.Printf("Task GitHub updates: %v", err)
+ }
+ }
+ }()
staticServer := httputil.StaticServer{
Dir: viper.GetString(ConfigAssetsDir),