structconv.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. package statistic
  2. import "sync"
  3. type DailySummaryExport struct {
  4. TotalRequest int64 //Total request of the day
  5. ErrorRequest int64 //Invalid request of the day, including error or not found
  6. ValidRequest int64 //Valid request of the day
  7. ForwardTypes map[string]int
  8. RequestOrigin map[string]int
  9. RequestClientIp map[string]int
  10. Referer map[string]int
  11. UserAgent map[string]int
  12. RequestURL map[string]int
  13. }
  14. func DailySummaryToExport(summary DailySummary) DailySummaryExport {
  15. export := DailySummaryExport{
  16. TotalRequest: summary.TotalRequest,
  17. ErrorRequest: summary.ErrorRequest,
  18. ValidRequest: summary.ValidRequest,
  19. ForwardTypes: make(map[string]int),
  20. RequestOrigin: make(map[string]int),
  21. RequestClientIp: make(map[string]int),
  22. Referer: make(map[string]int),
  23. UserAgent: make(map[string]int),
  24. RequestURL: make(map[string]int),
  25. }
  26. summary.ForwardTypes.Range(func(key, value interface{}) bool {
  27. export.ForwardTypes[key.(string)] = value.(int)
  28. return true
  29. })
  30. summary.RequestOrigin.Range(func(key, value interface{}) bool {
  31. export.RequestOrigin[key.(string)] = value.(int)
  32. return true
  33. })
  34. summary.RequestClientIp.Range(func(key, value interface{}) bool {
  35. export.RequestClientIp[key.(string)] = value.(int)
  36. return true
  37. })
  38. summary.Referer.Range(func(key, value interface{}) bool {
  39. export.Referer[key.(string)] = value.(int)
  40. return true
  41. })
  42. summary.UserAgent.Range(func(key, value interface{}) bool {
  43. export.UserAgent[key.(string)] = value.(int)
  44. return true
  45. })
  46. summary.RequestURL.Range(func(key, value interface{}) bool {
  47. export.RequestURL[key.(string)] = value.(int)
  48. return true
  49. })
  50. return export
  51. }
  52. func DailySummaryExportToSummary(export DailySummaryExport) DailySummary {
  53. summary := DailySummary{
  54. TotalRequest: export.TotalRequest,
  55. ErrorRequest: export.ErrorRequest,
  56. ValidRequest: export.ValidRequest,
  57. ForwardTypes: &sync.Map{},
  58. RequestOrigin: &sync.Map{},
  59. RequestClientIp: &sync.Map{},
  60. Referer: &sync.Map{},
  61. UserAgent: &sync.Map{},
  62. RequestURL: &sync.Map{},
  63. }
  64. for k, v := range export.ForwardTypes {
  65. summary.ForwardTypes.Store(k, v)
  66. }
  67. for k, v := range export.RequestOrigin {
  68. summary.RequestOrigin.Store(k, v)
  69. }
  70. for k, v := range export.RequestClientIp {
  71. summary.RequestClientIp.Store(k, v)
  72. }
  73. for k, v := range export.Referer {
  74. summary.Referer.Store(k, v)
  75. }
  76. for k, v := range export.UserAgent {
  77. summary.UserAgent.Store(k, v)
  78. }
  79. for k, v := range export.RequestURL {
  80. summary.RequestURL.Store(k, v)
  81. }
  82. return summary
  83. }
  84. // External object function call
  85. func (c *Collector) GetExportSummary() *DailySummaryExport {
  86. exportFormatDailySummary := DailySummaryToExport(*c.DailySummary)
  87. return &exportFormatDailySummary
  88. }