diff --git a/example.json b/example.json index 8d7ccf38535c60585a8d8f8eca202b55cab2bcb7..9e7b846505357d4d162427f8634a4a88dce6631c 100644 --- a/example.json +++ b/example.json @@ -13,7 +13,7 @@ }, { "userid": "user2", - "url": "http://www.someamazingwebsite.com/3", + "url": "http://www.someamazingwebsite.com/1", "type": "GET", "timestamp": 1360662163000 }, @@ -25,7 +25,7 @@ }, { "userid": "user2", - "url": "http://www.someamazingwebsite.com/2", + "url": "http://www.someamazingwebsite.com/3", "type": "GET", "timestamp": 1360462163000 } diff --git a/main.go b/main.go index eba4f1321bb5e3908de9fa594f08477869ba4cff..358d9d806d0a7ff3f124f8f941bc33936a6cd77f 100644 --- a/main.go +++ b/main.go @@ -23,14 +23,14 @@ type Load struct { Timestamp int64 `json:"timestamp"` } -type Dates struct { - Exists map[string]*URLs -} type URLs struct { - Exists map[string]*URL + URL map[string]*Dates +} +type Dates struct { + Exists map[string]*Visits } -type URL struct { +type Visits struct { Counter int UserIds map[string]bool } @@ -47,7 +47,7 @@ func Index(w http.ResponseWriter, r *http.Request) { decoder := json.NewDecoder(r.Body) var loads []Load - dates := Dates{Exists: make(map[string]*URLs)} + visited := URLs{URL: make(map[string]*Dates)} err := decoder.Decode(&loads) if err != nil { @@ -68,49 +68,52 @@ func Index(w http.ResponseWriter, r *http.Request) { t = time.Unix(load.Timestamp/1000, 0).Format("2006-01-02") } log.Println(t) - if site, ok := dates.Exists[t]; ok { - log.Println("Date exists.") - if url, ok := site.Exists[load.Url]; ok { - log.Println("URL exists.") - if url.UserIds[load.Userid] { + if date, ok := visited.URL[load.Url]; ok { + log.Println("URL exists.") + + if visit, ok := date.Exists[t]; ok { + log.Println("Date exists.") + if visit.UserIds[load.Userid] { continue //Continue as the user has already visited that website for this day once. } else { - - url.Counter += 1 - url.UserIds[load.Userid] = true - log.Println(url.Counter) + visit.Counter += 1 + visit.UserIds[load.Userid] = true + log.Println(visit.Counter) } } else { - //Add the URL and a visit. - entry := URL{Counter: 0, UserIds: make(map[string]bool)} - + //Add the Date and a Visit. + entry := Visits{Counter: 0, UserIds: make(map[string]bool)} entry.Counter += 1 entry.UserIds[load.Userid] = true - dates.Exists[t].Exists[load.Url] = &entry - log.Println("URL is added.") + visited.URL[load.Url].Exists[t] = &entry + log.Println("Date and Visit is added.") } } else { - log.Println("Date doesnt yet exist.") - //Initialising Date and Urls for that date. - entry := URL{Counter: 0, UserIds: make(map[string]bool)} - urls := URLs{Exists: make(map[string]*URL)} + log.Println("URL doesn't exist.") + //Initialising URL, date and visits for that date. + entry := Visits{Counter: 0, UserIds: make(map[string]bool)} + dates := Dates{Exists: make(map[string]*Visits)} entry.Counter += 1 entry.UserIds[load.Userid] = true - urls.Exists[load.Url] = &entry - dates.Exists[t] = &urls + dates.Exists[t] = &entry + visited.URL[load.Url] = &dates log.Println("We added it though") } - log.Println(dates) + log.Println(visited) //fmt.Fprintf(w, "%q", json.NewEncoder(w).Encode(load)) } // loop over elements of slice - for k, v := range dates.Exists { + for k, v := range visited.URL { // m is a map[string]interface. // loop over keys and values in the map. - log.Println(k, "value is", v) + + log.Println(k, " has these records:") + for m, x := range v.Exists { + log.Print(" For date: ", m, " there are: ", x.Counter, " unique visits.") + } } }