100 lines
2.0 KiB
Go
100 lines
2.0 KiB
Go
package discovery
|
|
|
|
import "strings"
|
|
|
|
const kvEntryPrefix = "entry."
|
|
|
|
func registryEntryKey(entry RegistryEntry) string {
|
|
return registryKey(entry.Service, entry.Rail, entry.Network, entry.Operations, entry.Version, entry.InstanceID)
|
|
}
|
|
|
|
func registryKey(service, rail, network string, operations []string, version, instanceID string) string {
|
|
service = normalizeKeyPart(service)
|
|
rail = normalizeKeyPart(rail)
|
|
op := normalizeKeyPart(firstOperation(operations))
|
|
version = normalizeKeyPart(version)
|
|
instanceID = normalizeKeyPart(instanceID)
|
|
if instanceID == "" {
|
|
return ""
|
|
}
|
|
if service == "" {
|
|
service = "service"
|
|
}
|
|
if rail == "" {
|
|
rail = "none"
|
|
}
|
|
if op == "" {
|
|
op = "none"
|
|
}
|
|
if version == "" {
|
|
version = "unknown"
|
|
}
|
|
parts := []string{service, rail, op, version, instanceID}
|
|
if network != "" {
|
|
netPart := normalizeKeyPart(network)
|
|
if netPart != "" {
|
|
parts = append(parts, netPart)
|
|
}
|
|
}
|
|
return strings.Join(parts, ".")
|
|
}
|
|
|
|
func kvKeyFromRegistryKey(key string) string {
|
|
key = strings.TrimSpace(key)
|
|
if key == "" {
|
|
return ""
|
|
}
|
|
if strings.HasPrefix(key, kvEntryPrefix) {
|
|
return key
|
|
}
|
|
return kvEntryPrefix + key
|
|
}
|
|
|
|
func registryKeyFromKVKey(key string) string {
|
|
key = strings.TrimSpace(key)
|
|
if strings.HasPrefix(key, kvEntryPrefix) {
|
|
return strings.TrimPrefix(key, kvEntryPrefix)
|
|
}
|
|
return key
|
|
}
|
|
|
|
func firstOperation(ops []string) string {
|
|
for _, op := range ops {
|
|
op = strings.TrimSpace(op)
|
|
if op != "" {
|
|
return op
|
|
}
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func normalizeKeyPart(value string) string {
|
|
value = strings.ToLower(strings.TrimSpace(value))
|
|
if value == "" {
|
|
return ""
|
|
}
|
|
var b strings.Builder
|
|
b.Grow(len(value))
|
|
lastDash := false
|
|
for _, r := range value {
|
|
if (r >= 'a' && r <= 'z') || (r >= '0' && r <= '9') {
|
|
b.WriteRune(r)
|
|
lastDash = false
|
|
continue
|
|
}
|
|
if r == '-' || r == '_' {
|
|
if !lastDash {
|
|
b.WriteByte('-')
|
|
lastDash = true
|
|
}
|
|
continue
|
|
}
|
|
if !lastDash {
|
|
b.WriteByte('-')
|
|
lastDash = true
|
|
}
|
|
}
|
|
out := strings.Trim(b.String(), "-")
|
|
return out
|
|
}
|