123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- package services
- import (
- "flag"
- "fmt"
- "io"
- "log"
- "time"
- "github.com/fgm/izidic"
- )
- const (
- // Flags
- PAddr = "addr"
- PPrefix = "prefix"
- PProfile = "profile"
- PQName = "queue-name"
- PRegion = "region"
- PCSRFSecret = "csrf-secret"
- PStoreSecret = "store-secret"
- PTTL = "ttl"
- PURL = "url"
- PVTO = "vto"
- PWait = "wait"
- // Non-flags
- PArgs = "args"
- PHandler = "handler"
- PName = "name"
- PWriter = "writer"
- // Services
- SvcClient = "sqs"
- SvcConsumer = "consume-message"
- SvcFlags = "flags"
- SvcHttp = "http"
- SvcLister = "lister"
- SvcLogger = "logger"
- SvcMessageStore = "message-store"
- SvcProducer = "producer"
- SvcReceiver = "receiver"
- SvcRedriver = "redriver"
- SvcRenderer = "renderer"
- )
- func FlagsService(dic *izidic.Container) (any, error) {
- fs := flag.NewFlagSet(dic.MustParam(PName).(string), flag.ContinueOnError)
- addr := fs.String(PAddr, ":8080", "The IP address on which to listen")
- profile := fs.String(PProfile, "test-profile", "The AWS profile")
- region := fs.String(PRegion, "eu-west-3", "The AWS region to connect to")
- qName := fs.String(PQName, "dummy-queue", "The queue name")
- csrfSecret := fs.String(PCSRFSecret, "csrfSecret", "The CSRF secret")
- prefix := fs.String(PPrefix, "", "The queue prefix to filter the main list")
- storeSecret := fs.String(PStoreSecret, "storeSecret", "The session store secret")
- sqsURL := fs.String(PURL, "http://localhost:4566", "The SQS endpoint URL")
- ttl := fs.Duration(PTTL, 10*time.Minute, "The message store TTL")
- vto := fs.Duration(PVTO, 10*time.Minute, "The redrive visibility timeout")
- wait := fs.Int(PWait, 3, "The maximum number of seconds to wait when receiving messages")
- if err := fs.Parse(dic.MustParam(PArgs).([]string)); err != nil {
- return nil, fmt.Errorf("cannot obtain CLI args")
- }
- // Durations are signed, and Duration.Round rounds down, but we want positive durations, rounded up.
- *vto = (vto.Abs() + 500*time.Millisecond).Round(time.Second)
- dic.Store(PAddr, *addr)
- dic.Store(PProfile, *profile)
- dic.Store(PQName, *qName)
- dic.Store(PRegion, *region)
- dic.Store(PCSRFSecret, []byte(*csrfSecret))
- dic.Store(PPrefix, *prefix)
- dic.Store(PStoreSecret, []byte(*storeSecret))
- dic.Store(PTTL, *ttl)
- dic.Store(PURL, *sqsURL)
- dic.Store(PVTO, *vto)
- dic.Store(PWait, *wait)
- return fs, nil
- }
- // LoggerService is an izidic.Service also containing a one-time initialization action.
- func LoggerService(dic *izidic.Container) (any, error) {
- w := dic.MustParam(PWriter).(io.Writer)
- log.SetOutput(w) // Support dependency code not taking an injected logger.
- logger := log.New(w, "", log.LstdFlags)
- return logger, nil
- }
|