handler.go 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package statistic
  2. import (
  3. "encoding/json"
  4. "net/http"
  5. "imuslab.com/Zoraxy/mod/utils"
  6. )
  7. /*
  8. Handler.go
  9. This script handles incoming request for loading the statistic of the day
  10. */
  11. func (c *Collector) HandleTodayStatLoad(w http.ResponseWriter, r *http.Request) {
  12. type DailySummaryExport struct {
  13. TotalRequest int64 //Total request of the day
  14. ErrorRequest int64 //Invalid request of the day, including error or not found
  15. ValidRequest int64 //Valid request of the day
  16. ForwardTypes map[string]int
  17. RequestOrigin map[string]int
  18. RequestClientIp map[string]int
  19. }
  20. fast, err := utils.GetPara(r, "fast")
  21. if err != nil {
  22. fast = "false"
  23. }
  24. d := c.DailySummary
  25. if fast == "true" {
  26. //Only return the counter
  27. exported := DailySummaryExport{
  28. TotalRequest: d.TotalRequest,
  29. ErrorRequest: d.ErrorRequest,
  30. ValidRequest: d.ValidRequest,
  31. }
  32. js, _ := json.Marshal(exported)
  33. utils.SendJSONResponse(w, string(js))
  34. } else {
  35. //Return everything
  36. exported := DailySummaryExport{
  37. TotalRequest: d.TotalRequest,
  38. ErrorRequest: d.ErrorRequest,
  39. ValidRequest: d.ValidRequest,
  40. ForwardTypes: make(map[string]int),
  41. RequestOrigin: make(map[string]int),
  42. RequestClientIp: make(map[string]int),
  43. }
  44. // Export ForwardTypes sync.Map
  45. d.ForwardTypes.Range(func(key, value interface{}) bool {
  46. exported.ForwardTypes[key.(string)] = value.(int)
  47. return true
  48. })
  49. // Export RequestOrigin sync.Map
  50. d.RequestOrigin.Range(func(key, value interface{}) bool {
  51. exported.RequestOrigin[key.(string)] = value.(int)
  52. return true
  53. })
  54. // Export RequestClientIp sync.Map
  55. d.RequestClientIp.Range(func(key, value interface{}) bool {
  56. exported.RequestClientIp[key.(string)] = value.(int)
  57. return true
  58. })
  59. js, _ := json.Marshal(exported)
  60. utils.SendJSONResponse(w, string(js))
  61. }
  62. }