sqs-browse: new tool

Started working on a new tool to poll and browse an SQS queue.  This is built using a TUI framework
This commit is contained in:
Leon Mika 2022-03-23 08:58:42 +11:00
parent e070505490
commit 5d1f4c78f4
11 changed files with 413 additions and 0 deletions

View file

@ -0,0 +1,14 @@
package pollmessage
import (
"context"
"github.com/lmika/awstools/internal/sqs-browse/models"
)
type MessageStore interface {
Save(ctx context.Context, msg *models.Message) error
}
type MessagePoller interface {
PollForNewMessages(ctx context.Context, queue string) ([]*models.Message, error)
}

View file

@ -0,0 +1,45 @@
package pollmessage
import (
"context"
"github.com/lmika/events"
"github.com/pkg/errors"
"log"
)
type Service struct {
store MessageStore
poller MessagePoller
queue string
bus *events.Bus
}
func NewService(store MessageStore, poller MessagePoller, queue string, bus *events.Bus) *Service {
return &Service{
store: store,
poller: poller,
queue: queue,
bus: bus,
}
}
// Poll starts polling for new messages and adding them to the message store
func (s *Service) Poll(ctx context.Context) error {
for ctx.Err() == nil {
log.Printf("polling for new messages: %v", s.queue)
newMsgs, err := s.poller.PollForNewMessages(ctx, s.queue)
if err != nil {
return errors.Wrap(err, "unable to poll for messages")
}
for _, msg := range newMsgs {
if err := s.store.Save(ctx, msg); err != nil {
log.Println("warn: unable to save new message %v", err)
continue
}
}
s.bus.Fire("new-messages", newMsgs)
}
return nil
}