aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulio Capote <jcapote@gmail.com>2023-01-06 19:31:20 +0000
committerJulio Capote <jcapote@gmail.com>2023-01-06 19:31:20 +0000
commitea69d02af6e691a1b32e5198a1143aa142ba82ac (patch)
treee3f78254c84e02cda30402fa6a179547f5d38f97
parentfa52883f424c95dcde16e9056631041af4c479c7 (diff)
downloadcommunique-ea69d02af6e691a1b32e5198a1143aa142ba82ac.tar.gz
subscription lookup on outbox item create
Diffstat (limited to '')
-rw-r--r--cgi/servers.go13
-rw-r--r--models/persister.go17
2 files changed, 29 insertions, 1 deletions
diff --git a/cgi/servers.go b/cgi/servers.go
index 9d08b6c..a419417 100644
--- a/cgi/servers.go
+++ b/cgi/servers.go
@@ -116,7 +116,18 @@ func processTick(h config.Handler, output []byte, persister *models.Persister, l
log.Debugf("extracted content '%s'", extractedContent)
outboxItem := models.CreateOutboxItem(h, []byte(extractedContent))
err = persister.StoreWithCallback(outboxItem, func() {
- log.With("handler", h.Name).Debug("callback for save")
+ logger := log.With("handler", h.Name).With("type", "subscription")
+ // go through handler subscriptions and deliver signed outbox items
+ logger.Debug("callback for save")
+ sub := models.NewSubscription(h)
+ keys, err := persister.CollectKeys(sub)
+ if err != nil {
+ logger.Error(err)
+ return
+ }
+ for _, v := range keys {
+ logger.Debugf("found subscription %s", string(v))
+ }
})
if err != nil {
return err
diff --git a/models/persister.go b/models/persister.go
index f877488..b4b9c49 100644
--- a/models/persister.go
+++ b/models/persister.go
@@ -98,6 +98,23 @@ func (p *Persister) Collect(model model) ([][]byte, error) {
return result, err
}
+// Much faster, "keys only" version of Collect()
+func (p *Persister) CollectKeys(model model) ([][]byte, error) {
+ var keys [][]byte
+ err := p.db.View(func(txn *badger.Txn) error {
+ opts := badger.DefaultIteratorOptions
+ opts.PrefetchValues = false
+ it := txn.NewIterator(opts)
+ defer it.Close()
+ prefix := []byte(model.Keybase())
+ for it.Seek(prefix); it.ValidForPrefix(prefix); it.Next() {
+ keys = append(keys, it.Item().Key())
+ }
+ return nil
+ })
+ return keys, err
+}
+
func (p *Persister) Find(model model) ([]byte, error) {
var result []byte
var item *badger.Item