diff options
-rw-r--r-- | cgi/servers.go | 44 | ||||
-rwxr-xr-x | sample-cgi-handler.sh | 2 | ||||
-rw-r--r-- | sample-config.toml | 2 |
3 files changed, 39 insertions, 9 deletions
diff --git a/cgi/servers.go b/cgi/servers.go index 55bc5d2..91c98e9 100644 --- a/cgi/servers.go +++ b/cgi/servers.go @@ -2,6 +2,7 @@ package cgi import ( "context" + "encoding/json" "fmt" "io/ioutil" "net" @@ -13,6 +14,8 @@ import ( "git.capotej.com/capotej/communique/config" "github.com/dgraph-io/badger/v3" + "github.com/go-fed/activity/streams" + "github.com/go-fed/activity/streams/vocab" "go.uber.org/zap" ) @@ -68,14 +71,15 @@ func startTicker(h config.Handler, db *badger.DB, log *zap.SugaredLogger) { select { case <-done: return - case t := <-ticker.C: + case _ = <-ticker.C: output := tick(h) - keyName := fmt.Sprintf("outbox:%s:%d", h.Name, t.Unix()) - err := db.Update(func(txn *badger.Txn) error { - e := badger.NewEntry([]byte(keyName), output) - log.With("name", "ticker").Infof("writing '%s' to %s", output, keyName) - return txn.SetEntry(e) - }) + err := processTick(output, db, log) + // keyName := fmt.Sprintf("outbox:%s:%d", h.Name, t.Unix()) + // err := db.Update(func(txn *badger.Txn) error { + // e := badger.NewEntry([]byte(keyName), output) + // log.With("name", "ticker").Infof("writing '%s' to %s", output, keyName) + // return txn.SetEntry(e) + // }) if err != nil { log.Error(err) } @@ -84,6 +88,32 @@ func startTicker(h config.Handler, db *badger.DB, log *zap.SugaredLogger) { }() } +func processTick(output []byte, db *badger.DB, log *zap.SugaredLogger) error { + log.Debugf("processTick map is %+s", string(output)) + var m map[string]interface{} + err := json.Unmarshal(output, &m) + if err != nil { + return fmt.Errorf("could not unmarshal JSON: %w", err) + } + log.Debugf("processTick map is %+v", m) + var coll vocab.ActivityStreamsOrderedCollection + resolver, err := streams.NewJSONResolver(func(c context.Context, a vocab.ActivityStreamsOrderedCollection) error { + // Example: store the article in the enclosing scope, for later. + coll = a + // We could pass an error back up, if desired. + return nil + }) + ctx := context.Background() + err = resolver.Resolve(ctx, m) + if err != nil { + return fmt.Errorf("could not resolve JSON: %w", err) + } + log.Debugf("coll is %+v", coll) + // TODO TODO TODO + coll.GetActivityStreamsOrderedItems() + return nil +} + func tick(h config.Handler) []byte { sock := fmt.Sprintf("%s.sock", h.Name) httpc := http.Client{ diff --git a/sample-cgi-handler.sh b/sample-cgi-handler.sh index 7cef511..ccad5e7 100755 --- a/sample-cgi-handler.sh +++ b/sample-cgi-handler.sh @@ -9,6 +9,6 @@ echo '{ { "type": "Note", "content": "hi" - }, + } ]}' exit 0 diff --git a/sample-config.toml b/sample-config.toml index 6a8b6f9..38a71f7 100644 --- a/sample-config.toml +++ b/sample-config.toml @@ -5,7 +5,7 @@ dbPath = "bub.db" name = "sample" rpc = "cgi" exec = "sample-cgi-handler.sh" -interval = "10s" +interval = "5s" # [[handlers]] # name = "another" |