discovery service
This commit is contained in:
99
api/pkg/discovery/keys.go
Normal file
99
api/pkg/discovery/keys.go
Normal file
@@ -0,0 +1,99 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user