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

More statistics

parent 2b6772a2
No related branches found
No related tags found
No related merge requests found
......@@ -50,24 +50,23 @@ type ChannelData struct {
TotalWords int
TotalCharacters int
Users []UserData
Questions []PercentageEntry
Exclamations []PercentageEntry
Caps []PercentageEntry
EmojiHappy []PercentageEntry
EmojiSad []PercentageEntry
LongestLines []TotalEntry
ShortestLines []TotalEntry
Total []TotalEntry
Average TotalEntry
ChannelAverage TotalEntry
}
type PercentageEntry struct {
Questions []FloatEntry
Exclamations []FloatEntry
Caps []FloatEntry
EmojiHappy []FloatEntry
EmojiSad []FloatEntry
LongestLines []FloatEntry
ShortestLines []FloatEntry
Total []IntEntry
Average float64
}
type FloatEntry struct {
Name string
Value float64
}
type TotalEntry struct {
type IntEntry struct {
Name string
Value int
}
......@@ -134,6 +133,30 @@ func main() {
return
}
channelData.EmojiHappy, err = retrievePercentageStats(db, "emoji_happy")
if err != nil {
println(err.Error())
return
}
channelData.EmojiSad, err = retrievePercentageStats(db, "emoji_sad")
if err != nil {
println(err.Error())
return
}
channelData.LongestLines, err = retrieveLongestLines(db)
if err != nil {
println(err.Error())
return
}
channelData.ShortestLines, err = retrieveShortestLines(db)
if err != nil {
println(err.Error())
return
}
err = formatTemplate(w, "statistics", channelData)
if err != nil {
println(err.Error())
......@@ -156,14 +179,48 @@ func main() {
}
}
func retrievePercentageStats(db *sql.DB, stats string) ([]PercentageEntry, error) {
var data []PercentageEntry
func retrievePercentageStats(db *sql.DB, stats string) ([]FloatEntry, error) {
var data []FloatEntry
result, err := db.Query("SELECT coalesce(users.nick, '[Unknown]'), t." + stats + " FROM (SELECT coalesce(groups.\"group\", messages.sender) AS hash, round((count(nullif(messages." + stats + ", false)) * 100) :: numeric / count(*)) as " + stats + " FROM messages LEFT JOIN groups ON messages.sender = groups.nick AND groups.channel = 1 WHERE messages.channel = 1 GROUP BY hash ORDER BY " + stats + " DESC) t LEFT JOIN users ON t.hash = users.hash LIMIT 2;")
if err != nil {
return nil, err
}
for result.Next() {
var info PercentageEntry
var info FloatEntry
err := result.Scan(&info.Name, &info.Value)
if err != nil {
panic(err)
}
data = append(data, info)
}
return data, nil
}
func retrieveLongestLines(db *sql.DB) ([]FloatEntry, error) {
var data []FloatEntry
result, err := db.Query("SELECT coalesce(users.nick, '[Unknown]'), t.average FROM (SELECT coalesce(groups.\"group\", messages.sender) AS hash, avg(messages.characters) as average FROM messages LEFT JOIN groups ON messages.sender = groups.nick AND groups.channel = 1 WHERE messages.channel = 1 GROUP BY hash ORDER BY average DESC) t LEFT JOIN users ON t.hash = users.hash LIMIT 2;")
if err != nil {
return nil, err
}
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 retrieveShortestLines(db *sql.DB) ([]FloatEntry, error) {
var data []FloatEntry
result, err := db.Query("SELECT coalesce(users.nick, '[Unknown]'), t.average FROM (SELECT coalesce(groups.\"group\", messages.sender) AS hash, avg(messages.characters) as average FROM messages LEFT JOIN groups ON messages.sender = groups.nick AND groups.channel = 1 WHERE messages.channel = 1 GROUP BY hash ORDER BY average DESC) t LEFT JOIN users ON t.hash = users.hash LIMIT 2;")
if err != nil {
return nil, err
}
for result.Next() {
var info FloatEntry
err := result.Scan(&info.Name, &info.Value)
if err != nil {
panic(err)
......
......@@ -90,4 +90,47 @@
</tr>
{{end}}
</tbody>
<tbody>
{{with index .EmojiHappy 0}}
<tr>
<td><b>{{.Name}}</b> brings happiness to the world. {{.Value}}% lines contained smiling faces. :)</td>
</tr>
{{end}}
{{with index .EmojiHappy 1}}
<tr>
<td><b>{{.Name}}</b> isn't a sad person either, smiling {{.Value}}% of the time.</td>
</tr>
{{end}}
</tbody>
<tbody>
{{with index .EmojiSad 0}}
<tr>
<td><b>{{.Name}}</b> seems to be sad at the moment: {{.Value}}% lines contained sad faces. :(</td>
</tr>
{{end}}
{{with index .EmojiSad 1}}
<tr>
<td><b>{{.Name}}</b> is also a sad person, crying {{.Value}}% of the time.</td>
</tr>
{{end}}
</tbody>
<tbody>
{{with index .LongestLines 0}}
<tr>
<td><b>{{.Name}}</b> wrote the longest lines, averaging {{printf "%.1f" .Value}} letters per line.</td>
</tr>
{{end}}
</tbody>
<tbody>
{{with index .ShortestLines 0}}
<tr>
<td><b>{{.Name}}</b> wrote the shortest lines, averaging {{printf "%.1f" .Value}} characters per line.</td>
</tr>
{{end}}
{{with index .ShortestLines 1}}
<tr>
<td><b>{{.Name}}</b> was tight-lipped, too, averaging {{printf "%.1f" .Value}} characters.</td>
</tr>
{{end}}
</tbody>
</table>
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment