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

View File

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

View File

@ -151,9 +151,11 @@ const GetCitesByPostHashLike = "GetCitesByPostHashLike"
const GetYearlyPostHistory = "GetYearlyPostHistory" const GetYearlyPostHistory = "GetYearlyPostHistory"
const GetNewsgroupList = "GetNewsgroupList" const GetNewsgroupList = "GetNewsgroupList"
const CountUkko = "CountUkko" const CountUkko = "CountUkko"
const GetNewsgroupStats = "GetNewsgroupStats"
func (self *PostgresDatabase) prepareStatements() { func (self *PostgresDatabase) prepareStatements() {
self.stmt = map[string]string{ 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", NewsgroupBanned: "SELECT 1 FROM BannedGroups WHERE newsgroup = $1",
ArticleBanned: "SELECT 1 FROM BannedArticles WHERE message_id = $1", ArticleBanned: "SELECT 1 FROM BannedArticles WHERE message_id = $1",
GetAllNewsgroups: "SELECT name FROM Newsgroups WHERE name NOT IN ( SELECT newsgroup FROM BannedGroups )", 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 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) { func (self *PostgresDatabase) FindHeaders(group, headername string, lo, hi int64) (hdr ArticleHeaders, err error) {
hdr = make(ArticleHeaders) 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 )" 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) { func (self *templateEngine) genBoardList(prefix, name string, wr io.Writer, db Database, i18n *I18N) {
// the graph for the front page // the graph for the front page
var frontpage_graph boardPageRows var graph boardPageRows
// for each group stats, err := db.GetNewsgroupStats()
groups := db.GetAllNewsgroups() if err != nil {
for _, group := range groups { log.Println("error getting board list", err)
// exclude banned io.WriteString(wr, err.Error())
banned, _ := db.NewsgroupBanned(group) return
if banned {
continue
} }
// posts this hour
hour := db.CountPostsInGroup(group, 3600) for idx := range stats {
// posts today graph = append(graph, boardPageRow{
day := db.CountPostsInGroup(group, 86400) Board: stats[idx].Name,
// posts total Day: stats[idx].PPD,
all := db.CountPostsInGroup(group, 0)
frontpage_graph = append(frontpage_graph, boardPageRow{
All: all,
Day: day,
Hour: hour,
Board: group,
}) })
} }
param := map[string]interface{}{ param := map[string]interface{}{
"prefix": prefix, "prefix": prefix,
"frontend": name, "frontend": name,
} }
sort.Sort(frontpage_graph) sort.Sort(graph)
param["graph"] = frontpage_graph param["graph"] = graph
_, err := io.WriteString(wr, self.renderTemplate("boardlist", param, i18n)) _, err = io.WriteString(wr, self.renderTemplate("boardlist", param, i18n))
if err != nil { if err != nil {
log.Println("error writing board list page", err) log.Println("error writing board list page", err)
} }