39 lines
1.6 KiB
Go
39 lines
1.6 KiB
Go
package bus
|
|
|
|
import (
|
|
merrors "git.sendico.io/tech/sxchnge/shared/errors"
|
|
"git.sendico.io/tech/sxchnge/shared/messaging/reliable"
|
|
)
|
|
|
|
// Config composes canonical shared messaging settings for this service's queue.
|
|
type Config struct {
|
|
Stream reliable.DurableStreamSettings `yaml:"stream"`
|
|
Provisioning reliable.DurableProvisioningSettings `yaml:"provisioning"`
|
|
}
|
|
|
|
func DefaultConfig() Config {
|
|
return Config{
|
|
Stream: reliable.DurableStreamSettings{Name: "SXCHNGE_NOTIFICATIONS", Subjects: []string{subject}, Storage: "file", MaxAgeHours: 48, Replicas: 1},
|
|
Provisioning: reliable.DurableProvisioningSettings{Mode: reliable.DurableProvisioningApp, Environment: reliable.DurableEnvironmentNonProduction},
|
|
}
|
|
}
|
|
func (c Config) Validate() error {
|
|
if c.Stream.Name != "SXCHNGE_NOTIFICATIONS" || len(c.Stream.Subjects) != 1 || c.Stream.Subjects[0] != subject || c.Stream.Storage != "file" || c.Stream.MaxAgeHours < 48 || c.Stream.MaxAgeHours > 24*30 {
|
|
return merrors.InvalidArgument("invalid notifications stream configuration")
|
|
}
|
|
if c.Stream.Replicas != 1 && c.Stream.Replicas != 3 && c.Stream.Replicas != 5 {
|
|
return merrors.InvalidArgument("stream replicas must be 1, 3 or 5")
|
|
}
|
|
switch c.Provisioning.Mode {
|
|
case reliable.DurableProvisioningApp, reliable.DurableProvisioningOps, reliable.DurableProvisioningHybrid:
|
|
default:
|
|
return merrors.InvalidArgument("invalid stream provisioning mode")
|
|
}
|
|
switch c.Provisioning.Environment {
|
|
case reliable.DurableEnvironmentProduction, reliable.DurableEnvironmentNonProduction:
|
|
default:
|
|
return merrors.InvalidArgument("invalid stream provisioning environment")
|
|
}
|
|
return nil
|
|
}
|