cache jonks for AP fetches
This commit is contained in:
parent
b1e42fdae9
commit
2fc3103ad4
27
activity.go
27
activity.go
|
@ -1101,6 +1101,33 @@ func jonkjonk(user *WhatAbout, h *Honk) (junk.Junk, junk.Junk) {
|
||||||
return j, jo
|
return j, jo
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var oldjonks = cacheNew(cacheOptions{Filler: func(xid string) ([]byte, bool) {
|
||||||
|
row := stmtAnyXonk.QueryRow(xid)
|
||||||
|
honk := scanhonk(row)
|
||||||
|
if honk == nil || !honk.Public {
|
||||||
|
return nil, true
|
||||||
|
}
|
||||||
|
user, _ := butwhatabout(honk.Username)
|
||||||
|
rawhonks := gethonksbyconvoy(honk.UserID, honk.Convoy)
|
||||||
|
for _, h := range rawhonks {
|
||||||
|
if h.RID == honk.XID && h.Public && (h.Whofore == 2 || h.IsAcked()) {
|
||||||
|
honk.Replies = append(honk.Replies, h)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
donksforhonks([]*Honk{honk})
|
||||||
|
_, j := jonkjonk(user, honk)
|
||||||
|
j["@context"] = itiswhatitis
|
||||||
|
var buf bytes.Buffer
|
||||||
|
j.Write(&buf)
|
||||||
|
return buf.Bytes(), true
|
||||||
|
}})
|
||||||
|
|
||||||
|
func gimmejonk(xid string) ([]byte, bool) {
|
||||||
|
var j []byte
|
||||||
|
ok := oldjonks.Get(xid, &j)
|
||||||
|
return j, ok
|
||||||
|
}
|
||||||
|
|
||||||
func honkworldwide(user *WhatAbout, honk *Honk) {
|
func honkworldwide(user *WhatAbout, honk *Honk) {
|
||||||
jonk, _ := jonkjonk(user, honk)
|
jonk, _ := jonkjonk(user, honk)
|
||||||
jonk["@context"] = itiswhatitis
|
jonk["@context"] = itiswhatitis
|
||||||
|
|
|
@ -509,7 +509,7 @@ func cleanupdb(arg string) {
|
||||||
}
|
}
|
||||||
|
|
||||||
var stmtHonkers, stmtDubbers, stmtSaveHonker, stmtUpdateFlavor, stmtUpdateHonker *sql.Stmt
|
var stmtHonkers, stmtDubbers, stmtSaveHonker, stmtUpdateFlavor, stmtUpdateHonker *sql.Stmt
|
||||||
var stmtOneXonk, stmtPublicHonks, stmtUserHonks, stmtHonksByCombo, stmtHonksByConvoy *sql.Stmt
|
var stmtAnyXonk, stmtOneXonk, stmtPublicHonks, stmtUserHonks, stmtHonksByCombo, stmtHonksByConvoy *sql.Stmt
|
||||||
var stmtHonksByOntology, stmtHonksForUser, stmtHonksForMe, stmtSaveDub, stmtHonksByXonker *sql.Stmt
|
var stmtHonksByOntology, stmtHonksForUser, stmtHonksForMe, stmtSaveDub, stmtHonksByXonker *sql.Stmt
|
||||||
var stmtHonksBySearch, stmtHonksByHonker, stmtSaveHonk, stmtWhatAbout *sql.Stmt
|
var stmtHonksBySearch, stmtHonksByHonker, stmtSaveHonk, stmtWhatAbout *sql.Stmt
|
||||||
var stmtOneBonk, stmtFindZonk, stmtFindXonk, stmtSaveDonk *sql.Stmt
|
var stmtOneBonk, stmtFindZonk, stmtFindXonk, stmtSaveDonk *sql.Stmt
|
||||||
|
@ -541,6 +541,7 @@ func prepareStatements(db *sql.DB) {
|
||||||
limit := " order by honks.honkid desc limit 250"
|
limit := " order by honks.honkid desc limit 250"
|
||||||
butnotthose := " and convoy not in (select name from zonkers where userid = ? and wherefore = 'zonvoy' order by zonkerid desc limit 100)"
|
butnotthose := " and convoy not in (select name from zonkers where userid = ? and wherefore = 'zonvoy' order by zonkerid desc limit 100)"
|
||||||
stmtOneXonk = preparetodie(db, selecthonks+"where honks.userid = ? and xid = ?")
|
stmtOneXonk = preparetodie(db, selecthonks+"where honks.userid = ? and xid = ?")
|
||||||
|
stmtAnyXonk = preparetodie(db, selecthonks+"where xid = ? order by honks.honkid asc")
|
||||||
stmtOneBonk = preparetodie(db, selecthonks+"where honks.userid = ? and xid = ? and what = 'bonk' and whofore = 2")
|
stmtOneBonk = preparetodie(db, selecthonks+"where honks.userid = ? and xid = ? and what = 'bonk' and whofore = 2")
|
||||||
stmtPublicHonks = preparetodie(db, selecthonks+"where whofore = 2 and dt > ?"+limit)
|
stmtPublicHonks = preparetodie(db, selecthonks+"where whofore = 2 and dt > ?"+limit)
|
||||||
stmtUserHonks = preparetodie(db, selecthonks+"where (whofore = 2 or whofore = ?) and username = ? and dt > ?"+limit)
|
stmtUserHonks = preparetodie(db, selecthonks+"where (whofore = 2 or whofore = ?) and username = ? and dt > ?"+limit)
|
||||||
|
|
29
web.go
29
web.go
|
@ -659,8 +659,18 @@ func showhonk(w http.ResponseWriter, r *http.Request) {
|
||||||
http.NotFound(w, r)
|
http.NotFound(w, r)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
xid := fmt.Sprintf("https://%s%s", serverName, r.URL.Path)
|
xid := fmt.Sprintf("https://%s%s", serverName, r.URL.Path)
|
||||||
|
|
||||||
|
if friendorfoe(r.Header.Get("Accept")) {
|
||||||
|
j, ok := gimmejonk(xid)
|
||||||
|
if ok {
|
||||||
|
w.Header().Set("Content-Type", theonetruename)
|
||||||
|
w.Write(j)
|
||||||
|
} else {
|
||||||
|
http.NotFound(w, r)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
honk := getxonk(user.ID, xid)
|
honk := getxonk(user.ID, xid)
|
||||||
if honk == nil {
|
if honk == nil {
|
||||||
http.NotFound(w, r)
|
http.NotFound(w, r)
|
||||||
|
@ -683,19 +693,6 @@ func showhonk(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
rawhonks := gethonksbyconvoy(honk.UserID, honk.Convoy)
|
rawhonks := gethonksbyconvoy(honk.UserID, honk.Convoy)
|
||||||
if friendorfoe(r.Header.Get("Accept")) {
|
|
||||||
for _, h := range rawhonks {
|
|
||||||
if h.RID == honk.XID && h.Public && (h.Whofore == 2 || h.IsAcked()) {
|
|
||||||
honk.Replies = append(honk.Replies, h)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
donksforhonks([]*Honk{honk})
|
|
||||||
_, j := jonkjonk(user, honk)
|
|
||||||
j["@context"] = itiswhatitis
|
|
||||||
w.Header().Set("Content-Type", theonetruename)
|
|
||||||
j.Write(w)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
var honks []*Honk
|
var honks []*Honk
|
||||||
for _, h := range rawhonks {
|
for _, h := range rawhonks {
|
||||||
if h.Public && (h.Whofore == 2 || h.IsAcked()) {
|
if h.Public && (h.Whofore == 2 || h.IsAcked()) {
|
||||||
|
@ -816,6 +813,9 @@ func zonkit(w http.ResponseWriter, r *http.Request) {
|
||||||
userinfo := login.GetUserInfo(r)
|
userinfo := login.GetUserInfo(r)
|
||||||
user, _ := butwhatabout(userinfo.Username)
|
user, _ := butwhatabout(userinfo.Username)
|
||||||
|
|
||||||
|
// my hammer is too big, oh well
|
||||||
|
defer oldjonks.Flush()
|
||||||
|
|
||||||
if wherefore == "ack" {
|
if wherefore == "ack" {
|
||||||
xonk := getxonk(userinfo.UserID, what)
|
xonk := getxonk(userinfo.UserID, what)
|
||||||
if xonk != nil {
|
if xonk != nil {
|
||||||
|
@ -1127,6 +1127,7 @@ func submithonk(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
if updatexid != "" {
|
if updatexid != "" {
|
||||||
updatehonk(honk)
|
updatehonk(honk)
|
||||||
|
oldjonks.Clear(honk.XID)
|
||||||
} else {
|
} else {
|
||||||
err := savehonk(honk)
|
err := savehonk(honk)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
Loading…
Reference in New Issue