For stats don't pass around the request
This commit is contained in:
parent
b2e3a93e7d
commit
665ca3aa94
1 changed files with 26 additions and 21 deletions
47
lib/stats.go
47
lib/stats.go
|
@ -121,12 +121,27 @@ func (sg StatsGatherer) Gather(function func(handler)) func(http.ResponseWriter,
|
||||||
if h.t1.IsZero() {
|
if h.t1.IsZero() {
|
||||||
h.t1 = time.Now()
|
h.t1 = time.Now()
|
||||||
}
|
}
|
||||||
sg.channel <- statsRequest{r, h.t1.Sub(t0)}
|
|
||||||
|
pattern := strings.Split(r.URL.Path, "/")
|
||||||
|
section := "/"
|
||||||
|
if len(pattern) > 1 && pattern[1] != "" {
|
||||||
|
section = pattern[1]
|
||||||
|
}
|
||||||
|
sg.channel <- statsRequest{
|
||||||
|
id: mux.Vars(r)["id"],
|
||||||
|
search: strings.Join(r.Form["q"], " "),
|
||||||
|
fmt: r.FormValue("fmt"),
|
||||||
|
section: section,
|
||||||
|
duration: h.t1.Sub(t0),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type statsRequest struct {
|
type statsRequest struct {
|
||||||
r *http.Request
|
id string
|
||||||
|
search string
|
||||||
|
fmt string
|
||||||
|
section string
|
||||||
duration time.Duration
|
duration time.Duration
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -137,35 +152,25 @@ func (sg StatsGatherer) worker() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (sg StatsGatherer) save(req statsRequest) {
|
func (sg StatsGatherer) save(req statsRequest) {
|
||||||
id := mux.Vars(req.r)["id"]
|
|
||||||
search := strings.Join(req.r.Form["q"], " ")
|
|
||||||
fmt := req.r.FormValue("fmt")
|
|
||||||
pattern := strings.Split(req.r.URL.Path, "/")
|
|
||||||
|
|
||||||
section := "/"
|
|
||||||
if len(pattern) > 1 && pattern[1] != "" {
|
|
||||||
section = pattern[1]
|
|
||||||
}
|
|
||||||
|
|
||||||
sg.instrument.Request(instrument.RequestData{
|
sg.instrument.Request(instrument.RequestData{
|
||||||
Section: section,
|
Section: req.section,
|
||||||
ID: id,
|
ID: req.id,
|
||||||
Search: search,
|
Search: req.search,
|
||||||
Fmt: fmt,
|
Fmt: req.fmt,
|
||||||
Duration: req.duration,
|
Duration: req.duration,
|
||||||
})
|
})
|
||||||
|
|
||||||
_, err := sg.db.GetBookID(id)
|
_, err := sg.db.GetBookID(req.id)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
switch section {
|
switch req.section {
|
||||||
case "download":
|
case "download":
|
||||||
err = sg.db.IncDownloads(id)
|
err = sg.db.IncDownloads(req.id)
|
||||||
case "book":
|
case "book":
|
||||||
err = sg.db.IncViews(id)
|
err = sg.db.IncViews(req.id)
|
||||||
case "read":
|
case "read":
|
||||||
err = sg.db.IncViews(id)
|
err = sg.db.IncViews(req.id)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
Reference in a new issue