components-contrib/bindings/kubemq/options.go

163 lines
3.8 KiB
Go

package kubemq
import (
"fmt"
"strconv"
"strings"
"github.com/dapr/components-contrib/bindings"
)
type options struct {
host string
port int
channel string
authToken string
autoAcknowledged bool
pollMaxItems int
pollTimeoutSeconds int
}
func parseAddress(address string) (string, int, error) {
var host string
var port int
var err error
hostPort := strings.Split(address, ":")
if len(hostPort) != 2 {
return "", 0, fmt.Errorf("invalid kubemq address, address format is invalid")
}
host = hostPort[0]
if len(host) == 0 {
return "", 0, fmt.Errorf("invalid kubemq address, host is empty")
}
port, err = strconv.Atoi(hostPort[1])
if err != nil {
return "", 0, fmt.Errorf("invalid kubemq address, port is invalid")
}
return host, port, nil
}
// createOptions creates a new instance from the kubemq options
func createOptions(md bindings.Metadata) (*options, error) {
result := &options{
host: "",
port: 0,
channel: "",
authToken: "",
autoAcknowledged: false,
pollMaxItems: 1,
pollTimeoutSeconds: 3600,
}
if val, found := md.Properties["address"]; found && val != "" {
var err error
result.host, result.port, err = parseAddress(val)
if err != nil {
return nil, err
}
} else {
return nil, fmt.Errorf("invalid kubemq address, address is empty")
}
if val, ok := md.Properties["channel"]; ok && val != "" {
result.channel = val
} else {
return nil, fmt.Errorf("invalid kubemq channel, channel is empty")
}
if val, found := md.Properties["authToken"]; found && val != "" {
if found && val != "" {
result.authToken = val
}
}
if val, found := md.Properties["autoAcknowledged"]; found && val != "" {
autoAcknowledged, err := strconv.ParseBool(val)
if err != nil {
return nil, fmt.Errorf("invalid kubemq autoAcknowledged value, %s", err.Error())
}
result.autoAcknowledged = autoAcknowledged
}
if val, found := md.Properties["pollMaxItems"]; found && val != "" {
pollMaxItems, err := strconv.Atoi(val)
if err != nil {
return nil, fmt.Errorf("invalid kubemq pollMaxItems value, %s", err.Error())
}
if pollMaxItems < 1 {
return nil, fmt.Errorf("invalid kubemq pollMaxItems value, value must be greater than 0")
}
result.pollMaxItems = pollMaxItems
}
if val, found := md.Properties["pollTimeoutSeconds"]; found && val != "" {
timeoutSecond, err := strconv.Atoi(val)
if err != nil {
return nil, fmt.Errorf("invalid kubemq pollTimeoutSeconds value, %s", err.Error())
} else {
if timeoutSecond < 1 {
return nil, fmt.Errorf("invalid kubemq pollTimeoutSeconds value, value must be greater than 0")
}
result.pollTimeoutSeconds = timeoutSecond
}
}
return result, nil
}
func parsePolicyDelaySeconds(md map[string]string) int {
if md == nil {
return 0
}
if val, found := md["delaySeconds"]; found && val != "" {
delaySeconds, err := strconv.Atoi(val)
if err != nil {
return 0
}
if delaySeconds < 0 {
return 0
}
return delaySeconds
}
return 0
}
func parsePolicyExpirationSeconds(md map[string]string) int {
if md == nil {
return 0
}
if val, found := md["expirationSeconds"]; found && val != "" {
expirationSeconds, err := strconv.Atoi(val)
if err != nil {
return 0
}
if expirationSeconds < 0 {
return 0
}
return expirationSeconds
}
return 0
}
func parseSetPolicyMaxReceiveCount(md map[string]string) int {
if md == nil {
return 0
}
if val, found := md["maxReceiveCount"]; found && val != "" {
maxReceiveCount, err := strconv.Atoi(val)
if err != nil {
return 0
}
if maxReceiveCount < 0 {
return 0
}
return maxReceiveCount
}
return 0
}
func parsePolicyMaxReceiveQueue(md map[string]string) string {
if md == nil {
return ""
}
if val, found := md["maxReceiveQueue"]; found && val != "" {
return val
}
return ""
}