frostfs-s3-gw/api/notifications/controller.go

57 lines
1 KiB
Go
Raw Normal View History

package notifications
import (
"time"
"github.com/nats-io/nats.go"
)
const (
DefaultTimeout = 30 * time.Second
)
type Options struct {
URL string
TLSCertFilepath string
TLSAuthPrivateKeyFilePath string
Timeout time.Duration
RootCAFiles []string
}
type Controller struct {
taskQueueConnection *nats.Conn
jsClient nats.JetStream
}
func NewController(p *Options) (*Controller, error) {
if p == nil {
return nil, nil
}
ncopts := []nats.Option{
nats.Timeout(p.Timeout),
}
if len(p.TLSCertFilepath) != 0 && len(p.TLSAuthPrivateKeyFilePath) != 0 {
ncopts = append(ncopts, nats.ClientCert(p.TLSCertFilepath, p.TLSAuthPrivateKeyFilePath))
}
if len(p.RootCAFiles) != 0 {
ncopts = append(ncopts, nats.RootCAs(p.RootCAFiles...))
}
nc, err := nats.Connect(p.URL, ncopts...)
if err != nil {
return nil, err
}
js, err := nc.JetStream()
if err != nil {
return nil, err
}
return &Controller{
taskQueueConnection: nc,
jsClient: js,
}, nil
}