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  }