1
0

analytic.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package analytic
  2. import (
  3. "errors"
  4. "net/http"
  5. "strings"
  6. "imuslab.com/zoraxy/mod/database"
  7. "imuslab.com/zoraxy/mod/statistic"
  8. "imuslab.com/zoraxy/mod/utils"
  9. )
  10. type DataLoader struct {
  11. Database *database.Database
  12. StatisticCollector *statistic.Collector
  13. }
  14. // Create a new data loader for loading statistic from database
  15. func NewDataLoader(db *database.Database, sc *statistic.Collector) *DataLoader {
  16. return &DataLoader{
  17. Database: db,
  18. StatisticCollector: sc,
  19. }
  20. }
  21. // GetAllStatisticSummaryInRange return all the statisics within the time frame. The second array is the key (dates) of the statistic
  22. func (d *DataLoader) GetAllStatisticSummaryInRange(start, end string) ([]*statistic.DailySummaryExport, []string, error) {
  23. dailySummaries := []*statistic.DailySummaryExport{}
  24. collectedDates := []string{}
  25. //Generate all the dates in between the range
  26. keys, err := generateDateRange(start, end)
  27. if err != nil {
  28. return dailySummaries, collectedDates, err
  29. }
  30. //Load all the data from database
  31. for _, key := range keys {
  32. thisStat := statistic.DailySummaryExport{}
  33. err = d.Database.Read("stats", key, &thisStat)
  34. if err == nil {
  35. dailySummaries = append(dailySummaries, &thisStat)
  36. collectedDates = append(collectedDates, key)
  37. }
  38. }
  39. return dailySummaries, collectedDates, nil
  40. }
  41. func (d *DataLoader) GetStartAndEndDatesFromRequest(r *http.Request) (string, string, error) {
  42. // Get the start date from POST para
  43. start, err := utils.GetPara(r, "start")
  44. if err != nil {
  45. return "", "", errors.New("start date cannot be empty")
  46. }
  47. if strings.Contains(start, "-") {
  48. //Must be underscore
  49. start = strings.ReplaceAll(start, "-", "_")
  50. }
  51. // Get end date from POST para
  52. end, err := utils.GetPara(r, "end")
  53. if err != nil {
  54. return "", "", errors.New("end date cannot be empty")
  55. }
  56. if strings.Contains(end, "-") {
  57. //Must be underscore
  58. end = strings.ReplaceAll(end, "-", "_")
  59. }
  60. return start, end, nil
  61. }