Archived
1
0

better query

This commit is contained in:
Jeff 2018-11-25 08:47:40 -05:00
parent fbc53d1e81
commit 6694c23859
4 changed files with 46 additions and 29 deletions

View File

@ -47,13 +47,12 @@ func (self PostEntry) Count() int64 {
return self[1]
}
type PostEntryList []PostEntry
// stats about newsgroup postings
type NewsgroupStats struct {
Posted []PostEntry
Delted []PostEntry
Hits []PostEntry
Start time.Time
End time.Time
PPD int64
Name string
}
@ -70,6 +69,8 @@ type NewsgroupListEntry [3]string
type NewsgroupList []NewsgroupListEntry
type Database interface {
Close()
CreateTables()
@ -124,6 +125,9 @@ type Database interface {
// if N <= 0 then count all we have now
CountPostsInGroup(group string, time_frame int64) int64
// get the stats for the overview page
GetNewsgroupStats() ([]NewsgroupStats, error)
// get all replies to a thread
// if last > 0 then get that many of the last replies
// start at reply number start

View File

@ -224,6 +224,8 @@ type boardPageRow struct {
Hour int64
Day int64
All int64
Hi int64
Lo int64
}
type boardPageRows []boardPageRow
@ -242,6 +244,7 @@ func (self boardPageRows) Swap(i, j int) {
self[i], self[j] = self[j], self[i]
}
type postsGraphRow struct {
day time.Time
Num int64

View File

@ -151,9 +151,11 @@ const GetCitesByPostHashLike = "GetCitesByPostHashLike"
const GetYearlyPostHistory = "GetYearlyPostHistory"
const GetNewsgroupList = "GetNewsgroupList"
const CountUkko = "CountUkko"
const GetNewsgroupStats = "GetNewsgroupStats"
func (self *PostgresDatabase) prepareStatements() {
self.stmt = map[string]string{
GetNewsgroupStats: "SELECT COUNT(message_id), newsgroup FROM articleposts WHERE time_posted > (EXTRACT(epoch FROM NOW()) - (24*3600)) GROUP BY newsgroup",
NewsgroupBanned: "SELECT 1 FROM BannedGroups WHERE newsgroup = $1",
ArticleBanned: "SELECT 1 FROM BannedArticles WHERE message_id = $1",
GetAllNewsgroups: "SELECT name FROM Newsgroups WHERE name NOT IN ( SELECT newsgroup FROM BannedGroups )",
@ -2039,6 +2041,21 @@ func (self *PostgresDatabase) GetUkkoPageCount(perpage int) (count int64, err er
return
}
func (self *PostgresDatabase) GetNewsgroupStats() (stats []NewsgroupStats, err error) {
var rows *sql.Rows
rows, err = self.conn.Query(self.stmt[GetNewsgroupStats])
if err == nil {
for rows.Next() {
var s NewsgroupStats
rows.Scan(&s.PPD, &s.Name)
stats = append(stats, s)
}
rows.Close()
}
return
}
func (self *PostgresDatabase) FindHeaders(group, headername string, lo, hi int64) (hdr ArticleHeaders, err error) {
hdr = make(ArticleHeaders)
q := "SELECT header_value FROM nntpheaders WHERE header_name = $1 AND header_article_message_id IN ( SELECT message_id FROM articleposts WHERE newsgroup = $2 )"

View File

@ -475,36 +475,29 @@ func (self *templateEngine) genGraphs(prefix string, wr io.Writer, db Database,
func (self *templateEngine) genBoardList(prefix, name string, wr io.Writer, db Database, i18n *I18N) {
// the graph for the front page
var frontpage_graph boardPageRows
var graph boardPageRows
// for each group
groups := db.GetAllNewsgroups()
for _, group := range groups {
// exclude banned
banned, _ := db.NewsgroupBanned(group)
if banned {
continue
}
// posts this hour
hour := db.CountPostsInGroup(group, 3600)
// posts today
day := db.CountPostsInGroup(group, 86400)
// posts total
all := db.CountPostsInGroup(group, 0)
frontpage_graph = append(frontpage_graph, boardPageRow{
All: all,
Day: day,
Hour: hour,
Board: group,
stats, err := db.GetNewsgroupStats()
if err != nil {
log.Println("error getting board list", err)
io.WriteString(wr, err.Error())
return
}
for idx := range stats {
graph = append(graph, boardPageRow{
Board: stats[idx].Name,
Day: stats[idx].PPD,
})
}
param := map[string]interface{}{
"prefix": prefix,
"frontend": name,
}
sort.Sort(frontpage_graph)
param["graph"] = frontpage_graph
_, err := io.WriteString(wr, self.renderTemplate("boardlist", param, i18n))
sort.Sort(graph)
param["graph"] = graph
_, err = io.WriteString(wr, self.renderTemplate("boardlist", param, i18n))
if err != nil {
log.Println("error writing board list page", err)
}