datamonitor.go 870 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  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["starttime"] = is.Starttime
  36. save["endtime"] = is.Endtime
  37. save["flag"] = "indexser"
  38. is.Val = map[string]int{}
  39. go extractMgo.Save("datamonitor", save)
  40. }
  41. is.Starttime = is.Endtime
  42. is.Lock.Unlock()
  43. time.AfterFunc(15*time.Minute, is.Save)
  44. }