datamonitor.go 887 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package main
  2. import (
  3. "sync"
  4. "time"
  5. )
  6. /**
  7. 增加数据监控服务,每15分钟保存一次抽取情况
  8. **/
  9. var IS = &InfoStatus{
  10. time.Now().Unix(), 0, map[string]int{}, &sync.Mutex{}}
  11. func init() {
  12. go IS.Save()
  13. }
  14. type InfoStatus struct {
  15. Starttime int64
  16. Endtime int64
  17. Val map[string]int
  18. Lock *sync.Mutex
  19. }
  20. func (is *InfoStatus) Add(t string) {
  21. is.Lock.Lock()
  22. is.Val[t]++
  23. is.Lock.Unlock()
  24. }
  25. func (is *InfoStatus) Save() {
  26. is.Lock.Lock()
  27. is.Endtime = time.Now().Unix()
  28. save := map[string]interface{}{}
  29. all := 0
  30. for k, v := range is.Val {
  31. all += v
  32. save[k] = v
  33. }
  34. if all > 0 {
  35. save["receive"] = all
  36. save["starttime"] = is.Starttime
  37. save["endtime"] = is.Endtime
  38. save["flag"] = "buyerser"
  39. is.Val = map[string]int{}
  40. go mgo.Save("datamonitor", save)
  41. }
  42. is.Starttime = is.Endtime
  43. is.Lock.Unlock()
  44. time.AfterFunc(15*time.Minute, is.Save)
  45. }