utils.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package analytic
  2. import (
  3. "fmt"
  4. "time"
  5. "imuslab.com/zoraxy/mod/statistic"
  6. )
  7. // Generate all the record keys from a given start and end dates
  8. func generateDateRange(startDate, endDate string) ([]string, error) {
  9. layout := "2006_01_02"
  10. start, err := time.Parse(layout, startDate)
  11. if err != nil {
  12. return nil, fmt.Errorf("error parsing start date: %v", err)
  13. }
  14. end, err := time.Parse(layout, endDate)
  15. if err != nil {
  16. return nil, fmt.Errorf("error parsing end date: %v", err)
  17. }
  18. var dateRange []string
  19. for d := start; !d.After(end); d = d.AddDate(0, 0, 1) {
  20. dateRange = append(dateRange, d.Format(layout))
  21. }
  22. return dateRange, nil
  23. }
  24. func mergeDailySummaryExports(exports []*statistic.DailySummaryExport) *statistic.DailySummaryExport {
  25. mergedExport := &statistic.DailySummaryExport{
  26. ForwardTypes: make(map[string]int),
  27. RequestOrigin: make(map[string]int),
  28. RequestClientIp: make(map[string]int),
  29. Referer: make(map[string]int),
  30. UserAgent: make(map[string]int),
  31. RequestURL: make(map[string]int),
  32. }
  33. for _, export := range exports {
  34. mergedExport.TotalRequest += export.TotalRequest
  35. mergedExport.ErrorRequest += export.ErrorRequest
  36. mergedExport.ValidRequest += export.ValidRequest
  37. for key, value := range export.ForwardTypes {
  38. mergedExport.ForwardTypes[key] += value
  39. }
  40. for key, value := range export.RequestOrigin {
  41. mergedExport.RequestOrigin[key] += value
  42. }
  43. for key, value := range export.RequestClientIp {
  44. mergedExport.RequestClientIp[key] += value
  45. }
  46. for key, value := range export.Referer {
  47. mergedExport.Referer[key] += value
  48. }
  49. for key, value := range export.UserAgent {
  50. mergedExport.UserAgent[key] += value
  51. }
  52. for key, value := range export.RequestURL {
  53. mergedExport.RequestURL[key] += value
  54. }
  55. }
  56. return mergedExport
  57. }