Advertisement
Guest User

Untitled

a guest
Oct 21st, 2019
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.14 KB | None | 0 0
  1. // poller.go
  2.  
  3. package main
  4.  
  5. import (
  6. "fmt"
  7. "os"
  8. "os/signal"
  9. "time"
  10.  
  11. "github.com/fzzy/radix/redis"
  12. )
  13.  
  14. var redisConn *redis.Client
  15.  
  16. func init() {
  17. var err error
  18. if redisConn, err = redis.Dial("tcp", "127.0.0.1:6379"); err != nil {
  19. panic(err)
  20. }
  21. }
  22.  
  23. // Poll checks Redis to determine whether scheduled tasks need to be run or not.
  24. func Poll(interval time.Duration, done <-chan os.Signal) {
  25. ticker := time.NewTicker(interval)
  26. for {
  27. select {
  28. case <-ticker.C:
  29. fmt.Print("> Checking for scheduled tasks... ")
  30. nowUnix := time.Now().Unix()
  31. response := redisConn.Cmd("ZRANGEBYSCORE", "jobs:scheduled", "-inf", float64(nowUnix))
  32. tasks, _ := response.List()
  33.  
  34. if len(tasks) == 0 {
  35. fmt.Println("No tasks found.")
  36. }
  37.  
  38. for _, task := range tasks {
  39. fmt.Printf("Queue task: %s\n", task)
  40. // do something awesome
  41.  
  42. // after delete task
  43. redisConn.Cmd("ZREM", "jobs:scheduled", task)
  44. }
  45. case <-done:
  46. fmt.Println("Shutting down poller")
  47. return
  48. }
  49. }
  50. }
  51.  
  52. func main() {
  53. c := make(chan os.Signal)
  54. signal.Notify(c, os.Interrupt)
  55. fmt.Println("Polling Redis every 15 seconds for scheduled tasks...")
  56. Poll(15 * time.Second, c)
  57. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement