github.com/jingruilea/kubeedge@v1.2.0-beta.0.0.20200410162146-4bb8902b3879/edge/pkg/metamanager/client/listener.go (about) 1 package client 2 3 import ( 4 "fmt" 5 6 "github.com/kubeedge/beehive/pkg/core/model" 7 8 "github.com/kubeedge/kubeedge/common/constants" 9 "github.com/kubeedge/kubeedge/edge/pkg/common/message" 10 "github.com/kubeedge/kubeedge/edge/pkg/common/modules" 11 "github.com/kubeedge/kubeedge/edgemesh/pkg/constant" 12 ) 13 14 // Listener is only used by EdgeMesh. It stores 15 // the fakeIP of EdgeMesh into edge db. One fakeIP for 16 // one service. 17 const ( 18 DefaultNamespace = "default" 19 ) 20 21 // ListenerGetter interface 22 type ListenerGetter interface { 23 Listener() ListenInterface 24 } 25 26 // ListenInterface is an interface 27 type ListenInterface interface { 28 Add(key interface{}, value interface{}) error 29 Del(key interface{}) error 30 Get(key interface{}) (interface{}, error) 31 } 32 33 type listener struct { 34 send SendInterface 35 } 36 37 func newListener(s SendInterface) *listener { 38 return &listener{ 39 send: s, 40 } 41 } 42 43 func (ln *listener) Add(key interface{}, value interface{}) error { 44 svcName, ok := key.(string) 45 if !ok { 46 return fmt.Errorf("the key type is invalid") 47 } 48 resource := fmt.Sprintf("%s/%s/%s", DefaultNamespace, constants.ResourceTypeListener, svcName) 49 msg := message.BuildMsg(modules.MetaGroup, "", constant.ModuleNameEdgeMesh, resource, model.InsertOperation, value) 50 _, err := ln.send.SendSync(msg) 51 return err 52 } 53 54 func (ln *listener) Del(key interface{}) error { 55 svcName, ok := key.(string) 56 if !ok { 57 return fmt.Errorf("the key type is invalid") 58 } 59 resource := fmt.Sprintf("%s/%s/%s", DefaultNamespace, constants.ResourceTypeListener, svcName) 60 msg := message.BuildMsg(modules.MetaGroup, "", constant.ModuleNameEdgeMesh, resource, model.DeleteOperation, nil) 61 _, err := ln.send.SendSync(msg) 62 return err 63 } 64 65 func (ln *listener) Get(key interface{}) (interface{}, error) { 66 svcName, ok := key.(string) 67 if !ok { 68 return nil, fmt.Errorf("the key type is invalid") 69 } 70 resource := fmt.Sprintf("%s/%s/%s", DefaultNamespace, constants.ResourceTypeListener, svcName) 71 msg := message.BuildMsg(modules.MetaGroup, "", constant.ModuleNameEdgeMesh, resource, model.QueryOperation, nil) 72 respMsg, err := ln.send.SendSync(msg) 73 if err != nil { 74 return nil, err 75 } 76 77 return respMsg.Content, nil 78 }