From 04c2f05037df3786962ae74cc3f60f92fa4ea9f3 Mon Sep 17 00:00:00 2001 From: Janne Koschinski <janne@kuschku.de> Date: Thu, 24 May 2018 18:15:00 +0200 Subject: [PATCH] More statistics --- main.go | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/main.go b/main.go index e28d42e..32cad87 100644 --- a/main.go +++ b/main.go @@ -188,6 +188,12 @@ func main() { return } + channelData.AverageWords, err = retrieveAverageWords(db, channelData.Id) + if err != nil { + handleError(err) + return + } + err = formatTemplate(w, "statistics", channelData) if err != nil { handleError(err) @@ -277,6 +283,23 @@ func retrieveTotalWords(db *sql.DB, channel int) ([]TotalEntry, error) { return data, nil } +func retrieveAverageWords(db *sql.DB, channel int) ([]FloatEntry, error) { + result, err := db.Query("SELECT coalesce(users.nick, '[Unknown]'), t.words FROM (SELECT coalesce(groups.\"group\", messages.sender) AS hash, AVG(messages.words) as words FROM messages LEFT JOIN groups ON messages.sender = groups.nick AND groups.channel = $1 WHERE messages.channel = $1 GROUP BY hash ORDER BY words DESC) t LEFT JOIN users ON t.hash = users.hash LIMIT $2", channel, 2) + if err != nil { + return nil, err + } + var data []FloatEntry + for result.Next() { + var info FloatEntry + err := result.Scan(&info.Name, &info.Value) + if err != nil { + panic(err) + } + data = append(data, info) + } + return data, nil +} + func retrieveUsers(db *sql.DB, channel int) ([]UserData, error) { result, err := db.Query("SELECT coalesce(users.nick, '[Unknown]'), t.lines, t.words, t.wordsPerLine, t.lastSeen FROM (SELECT coalesce(groups.\"group\", messages.sender) AS hash, COUNT(*) as lines, SUM(messages.words) as words, AVG(messages.words) as wordsPerLine, MAX(messages.time) AS lastSeen FROM messages LEFT JOIN groups ON messages.sender = groups.nick AND groups.channel = $1 WHERE messages.channel = $1 GROUP BY hash ORDER BY lines DESC) t LEFT JOIN users ON t.hash = users.hash LIMIT $2", channel, 20) if err != nil { -- GitLab