datasource/etcd/path/key_convertor.go (114 lines of code) (raw):

/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package path import ( "fmt" "strings" "github.com/apache/servicecomb-service-center/pkg/util" "github.com/go-chassis/cari/discovery" "github.com/go-chassis/foundation/stringutil" ) func splitKey(key []byte) (keys []string) { return strings.Split(util.BytesToStringWithNoCopy(key), SPLIT) } func getLast2Keys(key []byte) (string, string) { keys := splitKey(key) l := len(keys) if l < 3 { return "", "" } return fmt.Sprintf("%s/%s", keys[l-3], keys[l-2]), keys[l-1] } func getLast3Keys(key []byte) (string, string, string) { keys := splitKey(key) l := len(keys) if l < 4 { return "", "", "" } return fmt.Sprintf("%s/%s", keys[l-4], keys[l-3]), keys[l-2], keys[l-1] } func GetInfoFromSvcKV(key []byte) (serviceID, domainProject string) { domainProject, serviceID = getLast2Keys(key) return } func GetInfoFromInstKV(key []byte) (serviceID, instanceID, domainProject string) { domainProject, serviceID, instanceID = getLast3Keys(key) return } func GetInfoFromDomainKV(key []byte) (domain string) { keys := splitKey(key) l := len(keys) if l < 1 { return } domain = keys[l-1] return } func GetInfoFromProjectKV(key []byte) (domain, project string) { keys := splitKey(key) l := len(keys) if l < 2 { return "", "" } return keys[l-2], keys[l-1] } func GetInfoFromTagKV(key []byte) (serviceID, domainProject string) { domainProject, serviceID = getLast2Keys(key) return } func GetInfoFromSvcIndexKV(key []byte) *discovery.MicroServiceKey { keys := splitKey(key) l := len(keys) if l < 6 { return nil } domainProject := fmt.Sprintf("%s/%s", keys[l-6], keys[l-5]) return &discovery.MicroServiceKey{ Tenant: domainProject, Environment: keys[l-4], AppId: keys[l-3], ServiceName: keys[l-2], Version: keys[l-1], } } func GetInfoFromSvcAliasKV(key []byte) *discovery.MicroServiceKey { return GetInfoFromSvcIndexKV(key) } func GetInfoFromSchemaRefKV(key []byte) (domainProject, serviceID, schemaID string) { return getLast3Keys(key) } func GetInfoFromSchemaSummaryKV(key []byte) (domainProject, serviceID, schemaID string) { return getLast3Keys(key) } func GetInfoFromSchemaKV(key []byte) (domainProject, serviceID, schemaID string) { return getLast3Keys(key) } func GetInfoFromSchemaContentKV(key []byte) (domainProject, hash string) { return getLast2Keys(key) } func GetInfoFromDependencyQueueKV(key []byte) (consumerID, domainProject, uuid string) { domainProject, consumerID, uuid = getLast3Keys(key) return } func GetInfoFromDependencyRuleKV(key []byte) (t string, _ *discovery.MicroServiceKey) { keys := splitKey(key) l := len(keys) if l < 5 { return "", nil } if keys[l-1] == "*" { return keys[l-3], &discovery.MicroServiceKey{ Tenant: fmt.Sprintf("%s/%s", keys[l-5], keys[l-4]), Environment: keys[l-2], ServiceName: keys[l-1], } } return keys[l-5], &discovery.MicroServiceKey{ Tenant: fmt.Sprintf("%s/%s", keys[l-7], keys[l-6]), Environment: keys[l-4], AppId: keys[l-3], ServiceName: keys[l-2], Version: keys[l-1], } } func SplitDomainProject(domainProject string) (string, string) { return stringutil.SplitToTwo(domainProject, SPLIT) }