Skip to content
Snippets Groups Projects
Verified Commit 04c2f050 authored by Janne Mareike Koschinski's avatar Janne Mareike Koschinski
Browse files

More statistics

parent 6bc77b8d
No related branches found
No related tags found
No related merge requests found
...@@ -188,6 +188,12 @@ func main() { ...@@ -188,6 +188,12 @@ func main() {
return return
} }
channelData.AverageWords, err = retrieveAverageWords(db, channelData.Id)
if err != nil {
handleError(err)
return
}
err = formatTemplate(w, "statistics", channelData) err = formatTemplate(w, "statistics", channelData)
if err != nil { if err != nil {
handleError(err) handleError(err)
...@@ -277,6 +283,23 @@ func retrieveTotalWords(db *sql.DB, channel int) ([]TotalEntry, error) { ...@@ -277,6 +283,23 @@ func retrieveTotalWords(db *sql.DB, channel int) ([]TotalEntry, error) {
return data, nil 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) { 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) 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 { if err != nil {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment