aboutsummaryrefslogtreecommitdiff
path: root/user_agent.go
diff options
context:
space:
mode:
authorFelix Hanley <felix@userspace.com.au>2020-02-20 05:37:36 +0000
committerFelix Hanley <felix@userspace.com.au>2020-02-20 05:37:36 +0000
commit8e53f314cab7e96fb11e4a8d1dfe537e58bcc9ed (patch)
treee481cec1d836d560c2f52e02f348d90e87753fd2 /user_agent.go
parent7d18480b3e1df4233e0b540909931a99d4fe3b71 (diff)
downloadsws-8e53f314cab7e96fb11e4a8d1dfe537e58bcc9ed.tar.gz
sws-8e53f314cab7e96fb11e4a8d1dfe537e58bcc9ed.tar.bz2
WIP generic charting
Diffstat (limited to 'user_agent.go')
-rw-r--r--user_agent.go58
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()
}