mirror of
https://github.com/nbd-wtf/go-nostr.git
synced 2025-05-06 00:30:14 +02:00
sdk/hints: simplify memory.
This commit is contained in:
parent
2e28cc809a
commit
a88b34ed3c
@ -14,7 +14,7 @@ var _ hints.HintsDB = (*HintDB)(nil)
|
|||||||
|
|
||||||
type HintDB struct {
|
type HintDB struct {
|
||||||
RelayBySerial []string
|
RelayBySerial []string
|
||||||
OrderedRelaysByPubKey map[string]RelaysForPubKey
|
OrderedRelaysByPubKey map[string][]RelayEntry
|
||||||
|
|
||||||
sync.Mutex
|
sync.Mutex
|
||||||
}
|
}
|
||||||
@ -22,7 +22,7 @@ type HintDB struct {
|
|||||||
func NewHintDB() *HintDB {
|
func NewHintDB() *HintDB {
|
||||||
return &HintDB{
|
return &HintDB{
|
||||||
RelayBySerial: make([]string, 0, 100),
|
RelayBySerial: make([]string, 0, 100),
|
||||||
OrderedRelaysByPubKey: make(map[string]RelaysForPubKey, 100),
|
OrderedRelaysByPubKey: make(map[string][]RelayEntry, 100),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -41,9 +41,7 @@ func (db *HintDB) Save(pubkey string, relay string, key hints.HintKey, ts nostr.
|
|||||||
defer db.Unlock()
|
defer db.Unlock()
|
||||||
// fmt.Println(" ", relay, "index", relayIndex, "--", "adding", hints.HintKey(key).String(), ts)
|
// fmt.Println(" ", relay, "index", relayIndex, "--", "adding", hints.HintKey(key).String(), ts)
|
||||||
|
|
||||||
rfpk, _ := db.OrderedRelaysByPubKey[pubkey]
|
entries, _ := db.OrderedRelaysByPubKey[pubkey]
|
||||||
|
|
||||||
entries := rfpk.Entries
|
|
||||||
|
|
||||||
entryIndex := slices.IndexFunc(entries, func(re RelayEntry) bool { return re.Relay == relayIndex })
|
entryIndex := slices.IndexFunc(entries, func(re RelayEntry) bool { return re.Relay == relayIndex })
|
||||||
if entryIndex == -1 {
|
if entryIndex == -1 {
|
||||||
@ -66,9 +64,7 @@ func (db *HintDB) Save(pubkey string, relay string, key hints.HintKey, ts nostr.
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
rfpk.Entries = entries
|
db.OrderedRelaysByPubKey[pubkey] = entries
|
||||||
|
|
||||||
db.OrderedRelaysByPubKey[pubkey] = rfpk
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (db *HintDB) TopN(pubkey string, n int) []string {
|
func (db *HintDB) TopN(pubkey string, n int) []string {
|
||||||
@ -76,13 +72,13 @@ func (db *HintDB) TopN(pubkey string, n int) []string {
|
|||||||
defer db.Unlock()
|
defer db.Unlock()
|
||||||
|
|
||||||
urls := make([]string, 0, n)
|
urls := make([]string, 0, n)
|
||||||
if rfpk, ok := db.OrderedRelaysByPubKey[pubkey]; ok {
|
if entries, ok := db.OrderedRelaysByPubKey[pubkey]; ok {
|
||||||
// sort everything from scratch
|
// sort everything from scratch
|
||||||
slices.SortFunc(rfpk.Entries, func(a, b RelayEntry) int {
|
slices.SortFunc(entries, func(a, b RelayEntry) int {
|
||||||
return int(b.Sum() - a.Sum())
|
return int(b.Sum() - a.Sum())
|
||||||
})
|
})
|
||||||
|
|
||||||
for i, re := range rfpk.Entries {
|
for i, re := range entries {
|
||||||
urls = append(urls, db.RelayBySerial[re.Relay])
|
urls = append(urls, db.RelayBySerial[re.Relay])
|
||||||
if i+1 == n {
|
if i+1 == n {
|
||||||
break
|
break
|
||||||
@ -97,9 +93,9 @@ func (db *HintDB) PrintScores() {
|
|||||||
defer db.Unlock()
|
defer db.Unlock()
|
||||||
|
|
||||||
fmt.Println("= print scores")
|
fmt.Println("= print scores")
|
||||||
for pubkey, rfpk := range db.OrderedRelaysByPubKey {
|
for pubkey, entries := range db.OrderedRelaysByPubKey {
|
||||||
fmt.Println("== relay scores for", pubkey)
|
fmt.Println("== relay scores for", pubkey)
|
||||||
for i, re := range rfpk.Entries {
|
for i, re := range entries {
|
||||||
fmt.Printf(" %3d :: %30s (%3d) ::> %12d\n", i, db.RelayBySerial[re.Relay], re.Relay, re.Sum())
|
fmt.Printf(" %3d :: %30s (%3d) ::> %12d\n", i, db.RelayBySerial[re.Relay], re.Relay, re.Sum())
|
||||||
// for i, ts := range re.Timestamps {
|
// for i, ts := range re.Timestamps {
|
||||||
// fmt.Printf(" %-10d %s\n", ts, hints.HintKey(i).String())
|
// fmt.Printf(" %-10d %s\n", ts, hints.HintKey(i).String())
|
||||||
@ -113,13 +109,13 @@ func (db *HintDB) GetDetailedScores(pubkey string, n int) []hints.RelayScores {
|
|||||||
defer db.Unlock()
|
defer db.Unlock()
|
||||||
|
|
||||||
result := make([]hints.RelayScores, 0, n)
|
result := make([]hints.RelayScores, 0, n)
|
||||||
if rfpk, ok := db.OrderedRelaysByPubKey[pubkey]; ok {
|
if entries, ok := db.OrderedRelaysByPubKey[pubkey]; ok {
|
||||||
// sort everything from scratch
|
// sort everything from scratch
|
||||||
slices.SortFunc(rfpk.Entries, func(a, b RelayEntry) int {
|
slices.SortFunc(entries, func(a, b RelayEntry) int {
|
||||||
return int(b.Sum() - a.Sum())
|
return int(b.Sum() - a.Sum())
|
||||||
})
|
})
|
||||||
|
|
||||||
for i, re := range rfpk.Entries {
|
for i, re := range entries {
|
||||||
if i >= n {
|
if i >= n {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
@ -133,10 +129,6 @@ func (db *HintDB) GetDetailedScores(pubkey string, n int) []hints.RelayScores {
|
|||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
type RelaysForPubKey struct {
|
|
||||||
Entries []RelayEntry
|
|
||||||
}
|
|
||||||
|
|
||||||
type RelayEntry struct {
|
type RelayEntry struct {
|
||||||
Relay int
|
Relay int
|
||||||
Timestamps [4]nostr.Timestamp
|
Timestamps [4]nostr.Timestamp
|
||||||
|
Loading…
x
Reference in New Issue
Block a user