now passes linting
This commit is contained in:
@@ -5,30 +5,52 @@ import "github.com/rs/zerolog/log"
|
||||
import "github.com/sneak/feta/toot"
|
||||
import "github.com/sneak/feta/storage"
|
||||
|
||||
// TootIngester is the data structure for the ingester process that is
|
||||
// responsible for storing the discovered toots
|
||||
type TootIngester struct {
|
||||
inbound chan *toot.Toot
|
||||
recentlySeen []*seenTootMemo
|
||||
storageBackend *storage.TootStorageBackend
|
||||
storageBackend storage.TootStorageBackend
|
||||
}
|
||||
|
||||
type seenTootMemo struct {
|
||||
lastSeen time.Time
|
||||
tootHash toot.TootHash
|
||||
tootHash toot.Hash
|
||||
}
|
||||
|
||||
// NewTootIngester returns a fresh TootIngester for your use
|
||||
func NewTootIngester() *TootIngester {
|
||||
ti := new(TootIngester)
|
||||
ti.inbound = make(chan *toot.Toot, 1)
|
||||
ti.inbound = make(chan *toot.Toot, 10000)
|
||||
return ti
|
||||
}
|
||||
|
||||
// SetStorageBackend takes a type conforming to TootStorageBackend for
|
||||
// persisting toots somewhere/somehow
|
||||
func (ti *TootIngester) SetStorageBackend(be storage.TootStorageBackend) {
|
||||
ti.storageBackend = be
|
||||
}
|
||||
|
||||
// GetDeliveryChannel returns a channel that receives pointers to toots
|
||||
// which the ingester will dedupe and store
|
||||
func (ti *TootIngester) GetDeliveryChannel() chan *toot.Toot {
|
||||
return ti.inbound
|
||||
}
|
||||
|
||||
// Ingest is the main entrypoint for the TootIngester goroutine
|
||||
func (ti *TootIngester) Ingest() {
|
||||
log.Info().Msg("TootIngester starting")
|
||||
go ti.readFromInboundChannel()
|
||||
}
|
||||
|
||||
func (ti *TootIngester) readFromInboundChannel() {
|
||||
for {
|
||||
time.Sleep(1 * time.Second) // FIXME do something
|
||||
nt := <-ti.inbound
|
||||
go ti.storeToot(nt)
|
||||
}
|
||||
}
|
||||
|
||||
func (ti *TootIngester) storeToot(t *toot.Toot) {
|
||||
// FIXME first check for dupes in recentlySeen
|
||||
ti.storageBackend.StoreToot(*t)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user