diff options
| author | Felix Hanley <felix@userspace.com.au> | 2020-02-20 05:37:36 +0000 |
|---|---|---|
| committer | Felix Hanley <felix@userspace.com.au> | 2020-02-20 05:37:36 +0000 |
| commit | 8e53f314cab7e96fb11e4a8d1dfe537e58bcc9ed (patch) | |
| tree | e481cec1d836d560c2f52e02f348d90e87753fd2 /user_agent.go | |
| parent | 7d18480b3e1df4233e0b540909931a99d4fe3b71 (diff) | |
| download | sws-8e53f314cab7e96fb11e4a8d1dfe537e58bcc9ed.tar.gz sws-8e53f314cab7e96fb11e4a8d1dfe537e58bcc9ed.tar.bz2 | |
WIP generic charting
Diffstat (limited to 'user_agent.go')
| -rw-r--r-- | user_agent.go | 58 |
1 files changed, 44 insertions, 14 deletions
diff --git a/user_agent.go b/user_agent.go index a259538..dbfd1bf 100644 --- a/user_agent.go +++ b/user_agent.go @@ -54,28 +54,58 @@ func UserAgentFromRequest(r *http.Request) (*UserAgent, error) { } // UserAgentsFromHits collects the browsers from provided hits. -func UserAgentsFromHits(hits []*Hit) map[string]*UserAgent { +func UserAgentsFromHits(hits []*Hit) UserAgentSummary { out := make(map[string]*UserAgent) for _, h := range hits { - if h.UserAgentHash != nil { - b, ok := out[*h.UserAgentHash] - if !ok { - b = &UserAgent{ - Name: h.UserAgent.Name, - LastSeenAt: h.CreatedAt, - ua: detector.New(h.UserAgent.Name), - } - } - if b.LastSeenAt.Before(h.CreatedAt) { - b.LastSeenAt = h.CreatedAt + if h.UserAgentHash == nil { + continue + } + b, ok := out[*h.UserAgentHash] + if !ok { + b = &UserAgent{ + Name: h.UserAgent.Name, + LastSeenAt: h.CreatedAt, + ua: detector.New(h.UserAgent.Name), } - b.Count++ - out[*h.UserAgentHash] = b } + if b.LastSeenAt.Before(h.CreatedAt) { + b.LastSeenAt = h.CreatedAt + } + b.Count++ + out[*h.UserAgentHash] = b + } + return UserAgentSummary(out) +} + +type UserAgentSummary map[string]*UserAgent + +func (s UserAgentSummary) YMax() int { + max := 0 + for _, v := range s { + if v.Count > max { + max = v.Count + } + } + return max +} +func (s UserAgentSummary) XSeries() []*UserAgent { + out := make([]*UserAgent, len(s)) + i := 0 + for _, v := range s { + out[i] = v + i++ } return out } +func (ua UserAgent) Label() string { + return ua.Browser() +} + +func (ua UserAgent) YValue() int { + return ua.Count +} + func (ua UserAgent) IsBot() bool { return ua.ua.Bot() } |
