pkg/dump/dump.go (156 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 dump import ( "github.com/apache/servicecomb-service-center/version" "github.com/go-chassis/cari/discovery" ) type Getter interface { ForEach(i func(i int, v *KV) bool) } type Setter interface { SetValue(v *KV) } type MicroserviceSlice []*Microservice type MicroserviceIndexSlice []*MicroserviceIndex type MicroserviceAliasSlice []*MicroserviceAlias type TagSlice []*Tag type MicroServiceDependencyRuleSlice []*MicroServiceDependencyRule type SummarySlice []*Summary type InstanceSlice []*Instance func (s *MicroserviceSlice) ForEach(f func(i int, v *KV) bool) { for i, v := range *s { v.KV.Value = v.Value if !f(i, v.KV) { break } } } func (s *MicroserviceIndexSlice) ForEach(f func(i int, v *KV) bool) { for i, v := range *s { v.KV.Value = v.Value if !f(i, v.KV) { break } } } func (s *MicroserviceAliasSlice) ForEach(f func(i int, v *KV) bool) { for i, v := range *s { v.KV.Value = v.Value if !f(i, v.KV) { break } } } func (s *TagSlice) ForEach(f func(i int, v *KV) bool) { for i, v := range *s { v.KV.Value = v.Value if !f(i, v.KV) { break } } } func (s *MicroServiceDependencyRuleSlice) ForEach(f func(i int, v *KV) bool) { for i, v := range *s { v.KV.Value = v.Value if !f(i, v.KV) { break } } } func (s *SummarySlice) ForEach(f func(i int, v *KV) bool) { for i, v := range *s { v.KV.Value = v.Value if !f(i, v.KV) { break } } } func (s *InstanceSlice) ForEach(f func(i int, v *KV) bool) { for i, v := range *s { v.KV.Value = v.Value if !f(i, v.KV) { break } } } func (s *MicroserviceSlice) SetValue(v *KV) { *s = append(*s, NewMicroservice(v)) } func (s *MicroserviceIndexSlice) SetValue(v *KV) { *s = append(*s, NewMicroserviceIndex(v)) } func (s *MicroserviceAliasSlice) SetValue(v *KV) { *s = append(*s, NewMicroserviceAlias(v)) } func (s *TagSlice) SetValue(v *KV) { *s = append(*s, NewTag(v)) } func (s *MicroServiceDependencyRuleSlice) SetValue(v *KV) { *s = append(*s, NewMicroServiceDependencyRule(v)) } func (s *SummarySlice) SetValue(v *KV) { *s = append(*s, NewSummary(v)) } func (s *InstanceSlice) SetValue(v *KV) { *s = append(*s, NewInstance(v)) } func NewMicroservice(kv *KV) *Microservice { return &Microservice{kv, kv.Value.(*discovery.MicroService)} } func NewMicroserviceIndex(kv *KV) *MicroserviceIndex { return &MicroserviceIndex{kv, kv.Value.(string)} } func NewMicroserviceAlias(kv *KV) *MicroserviceAlias { return &MicroserviceAlias{kv, kv.Value.(string)} } func NewTag(kv *KV) *Tag { return &Tag{kv, kv.Value.(map[string]string)} } func NewMicroServiceDependencyRule(kv *KV) *MicroServiceDependencyRule { return &MicroServiceDependencyRule{kv, kv.Value.(*discovery.MicroServiceDependency)} } func NewSummary(kv *KV) *Summary { return &Summary{kv, kv.Value.(string)} } func NewInstance(kv *KV) *Instance { return &Instance{kv, kv.Value.(*discovery.MicroServiceInstance)} } type Cache struct { Microservices MicroserviceSlice `json:"services,omitempty"` Indexes MicroserviceIndexSlice `json:"serviceIndexes,omitempty"` Aliases MicroserviceAliasSlice `json:"serviceAliases,omitempty"` Tags TagSlice `json:"serviceTags,omitempty"` DependencyRules MicroServiceDependencyRuleSlice `json:"dependencyRules,omitempty"` Summaries SummarySlice `json:"summaries,omitempty"` Instances InstanceSlice `json:"instances,omitempty"` } type KV struct { Key string `json:"key"` Rev int64 `json:"rev"` Value interface{} `json:"-"` ClusterName string `json:"cluster"` } type Microservice struct { *KV Value *discovery.MicroService `json:"value,omitempty"` } type MicroserviceIndex struct { *KV Value string `json:"value,omitempty"` } type MicroserviceAlias struct { *KV Value string `json:"value,omitempty"` } type MicroServiceDependencyRule struct { *KV Value *discovery.MicroServiceDependency `json:"value,omitempty"` } type Summary struct { *KV Value string `json:"value,omitempty"` } type Tag struct { *KV Value map[string]string `json:"value,omitempty"` } type Instance struct { *KV Value *discovery.MicroServiceInstance `json:"value,omitempty"` } type Request struct { Options []string } type Response struct { Response *discovery.Response `json:"-"` Info *version.Set `json:"info,omitempty"` Cache *Cache `json:"cache,omitempty"` } type WatchInstanceChangedEvent struct { Action string `protobuf:"bytes,1,opt,name=action" json:"action,omitempty"` Service *Microservice `protobuf:"bytes,2,opt,name=service" json:"service,omitempty"` Instance *Instance `protobuf:"bytes,3,opt,name=instance" json:"instance,omitempty"` }