utils.go 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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. }
  58. func mapToStringSlice(m map[string]int) []string {
  59. slice := make([]string, 0, len(m))
  60. for k := range m {
  61. slice = append(slice, k)
  62. }
  63. return slice
  64. }
  65. func isTodayDate(dateStr string) bool {
  66. today := time.Now().Local().Format("2006-01-02")
  67. inputDate, err := time.Parse("2006-01-02", dateStr)
  68. if err != nil {
  69. inputDate, err = time.Parse("2006_01_02", dateStr)
  70. if err != nil {
  71. fmt.Println("Invalid date format")
  72. return false
  73. }
  74. }
  75. return inputDate.Format("2006-01-02") == today
  76. }