From 071ab7aededeeb13db5066d19cc4888ae65d30fd Mon Sep 17 00:00:00 2001 From: shu xian Date: Fri, 17 Jan 2020 00:10:15 +0800 Subject: [PATCH] add mucp for config/source --- config/source/mucp/mucp.go | 72 +++ config/source/mucp/options.go | 18 + config/source/mucp/proto/mucp.pb.go | 649 ++++++++++++++++++++++ config/source/mucp/proto/mucp.pb.micro.go | 241 ++++++++ config/source/mucp/proto/mucp.proto | 76 +++ config/source/mucp/util.go | 18 + config/source/mucp/watcher.go | 27 + 7 files changed, 1101 insertions(+) create mode 100644 config/source/mucp/mucp.go create mode 100644 config/source/mucp/options.go create mode 100644 config/source/mucp/proto/mucp.pb.go create mode 100644 config/source/mucp/proto/mucp.pb.micro.go create mode 100644 config/source/mucp/proto/mucp.proto create mode 100644 config/source/mucp/util.go create mode 100644 config/source/mucp/watcher.go diff --git a/config/source/mucp/mucp.go b/config/source/mucp/mucp.go new file mode 100644 index 00000000..eeb4bb84 --- /dev/null +++ b/config/source/mucp/mucp.go @@ -0,0 +1,72 @@ +package mucp + +import ( + "context" + + "github.com/micro/go-micro/config/cmd" + "github.com/micro/go-micro/config/source" + proto "github.com/micro/go-micro/config/source/mucp/proto" + "github.com/micro/go-micro/util/log" +) + +var ( + DefaultServiceName = "go.micro.config" +) + +type mucpSource struct { + serviceName string + key string + opts source.Options + client proto.SourceService +} + +func (m *mucpSource) Read() (set *source.ChangeSet, err error) { + req, err := m.client.Read(context.Background(), &proto.ReadRequest{Path: m.key}) + if err != nil { + return nil, err + } + + return toChangeSet(req.Change.ChangeSet), nil +} + +func (m *mucpSource) Watch() (w source.Watcher, err error) { + stream, err := m.client.Watch(context.Background(), &proto.WatchRequest{Key: m.key}) + if err != nil { + log.Error("watch err: ", err) + return + } + return newWatcher(stream) +} + +// Write is unsupported +func (m *mucpSource) Write(cs *source.ChangeSet) error { + return nil +} + +func (m *mucpSource) String() string { + return "mucp" +} + +func NewSource(opts ...source.Option) source.Source { + var options source.Options + for _, o := range opts { + o(&options) + } + + addr := DefaultServiceName + + if options.Context != nil { + a, ok := options.Context.Value(serviceNameKey{}).(string) + if ok { + addr = a + } + } + + s := &mucpSource{ + serviceName: addr, + opts: options, + client: proto.NewSourceService(addr, *cmd.DefaultOptions().Client), + } + + return s +} diff --git a/config/source/mucp/options.go b/config/source/mucp/options.go new file mode 100644 index 00000000..c8717cbd --- /dev/null +++ b/config/source/mucp/options.go @@ -0,0 +1,18 @@ +package mucp + +import ( + "context" + + "github.com/micro/go-micro/config/source" +) + +type serviceNameKey struct{} + +func ServiceName(a string) source.Option { + return func(o *source.Options) { + if o.Context == nil { + o.Context = context.Background() + } + o.Context = context.WithValue(o.Context, serviceNameKey{}, a) + } +} diff --git a/config/source/mucp/proto/mucp.pb.go b/config/source/mucp/proto/mucp.pb.go new file mode 100644 index 00000000..b72b9070 --- /dev/null +++ b/config/source/mucp/proto/mucp.pb.go @@ -0,0 +1,649 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: proto/mucp.proto + +package mucp + +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package + +type ChangeSet struct { + Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` + Checksum string `protobuf:"bytes,2,opt,name=checksum,proto3" json:"checksum,omitempty"` + Format string `protobuf:"bytes,3,opt,name=format,proto3" json:"format,omitempty"` + Source string `protobuf:"bytes,4,opt,name=source,proto3" json:"source,omitempty"` + Timestamp int64 `protobuf:"varint,5,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ChangeSet) Reset() { *m = ChangeSet{} } +func (m *ChangeSet) String() string { return proto.CompactTextString(m) } +func (*ChangeSet) ProtoMessage() {} +func (*ChangeSet) Descriptor() ([]byte, []int) { + return fileDescriptor_942f149553cfb65d, []int{0} +} + +func (m *ChangeSet) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ChangeSet.Unmarshal(m, b) +} +func (m *ChangeSet) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ChangeSet.Marshal(b, m, deterministic) +} +func (m *ChangeSet) XXX_Merge(src proto.Message) { + xxx_messageInfo_ChangeSet.Merge(m, src) +} +func (m *ChangeSet) XXX_Size() int { + return xxx_messageInfo_ChangeSet.Size(m) +} +func (m *ChangeSet) XXX_DiscardUnknown() { + xxx_messageInfo_ChangeSet.DiscardUnknown(m) +} + +var xxx_messageInfo_ChangeSet proto.InternalMessageInfo + +func (m *ChangeSet) GetData() []byte { + if m != nil { + return m.Data + } + return nil +} + +func (m *ChangeSet) GetChecksum() string { + if m != nil { + return m.Checksum + } + return "" +} + +func (m *ChangeSet) GetFormat() string { + if m != nil { + return m.Format + } + return "" +} + +func (m *ChangeSet) GetSource() string { + if m != nil { + return m.Source + } + return "" +} + +func (m *ChangeSet) GetTimestamp() int64 { + if m != nil { + return m.Timestamp + } + return 0 +} + +type Change struct { + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + Path string `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` + ChangeSet *ChangeSet `protobuf:"bytes,3,opt,name=changeSet,proto3" json:"changeSet,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Change) Reset() { *m = Change{} } +func (m *Change) String() string { return proto.CompactTextString(m) } +func (*Change) ProtoMessage() {} +func (*Change) Descriptor() ([]byte, []int) { + return fileDescriptor_942f149553cfb65d, []int{1} +} + +func (m *Change) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Change.Unmarshal(m, b) +} +func (m *Change) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Change.Marshal(b, m, deterministic) +} +func (m *Change) XXX_Merge(src proto.Message) { + xxx_messageInfo_Change.Merge(m, src) +} +func (m *Change) XXX_Size() int { + return xxx_messageInfo_Change.Size(m) +} +func (m *Change) XXX_DiscardUnknown() { + xxx_messageInfo_Change.DiscardUnknown(m) +} + +var xxx_messageInfo_Change proto.InternalMessageInfo + +func (m *Change) GetKey() string { + if m != nil { + return m.Key + } + return "" +} + +func (m *Change) GetPath() string { + if m != nil { + return m.Path + } + return "" +} + +func (m *Change) GetChangeSet() *ChangeSet { + if m != nil { + return m.ChangeSet + } + return nil +} + +type CreateRequest struct { + Change *Change `protobuf:"bytes,1,opt,name=change,proto3" json:"change,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *CreateRequest) Reset() { *m = CreateRequest{} } +func (m *CreateRequest) String() string { return proto.CompactTextString(m) } +func (*CreateRequest) ProtoMessage() {} +func (*CreateRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_942f149553cfb65d, []int{2} +} + +func (m *CreateRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_CreateRequest.Unmarshal(m, b) +} +func (m *CreateRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_CreateRequest.Marshal(b, m, deterministic) +} +func (m *CreateRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_CreateRequest.Merge(m, src) +} +func (m *CreateRequest) XXX_Size() int { + return xxx_messageInfo_CreateRequest.Size(m) +} +func (m *CreateRequest) XXX_DiscardUnknown() { + xxx_messageInfo_CreateRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_CreateRequest proto.InternalMessageInfo + +func (m *CreateRequest) GetChange() *Change { + if m != nil { + return m.Change + } + return nil +} + +type CreateResponse struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *CreateResponse) Reset() { *m = CreateResponse{} } +func (m *CreateResponse) String() string { return proto.CompactTextString(m) } +func (*CreateResponse) ProtoMessage() {} +func (*CreateResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_942f149553cfb65d, []int{3} +} + +func (m *CreateResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_CreateResponse.Unmarshal(m, b) +} +func (m *CreateResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_CreateResponse.Marshal(b, m, deterministic) +} +func (m *CreateResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_CreateResponse.Merge(m, src) +} +func (m *CreateResponse) XXX_Size() int { + return xxx_messageInfo_CreateResponse.Size(m) +} +func (m *CreateResponse) XXX_DiscardUnknown() { + xxx_messageInfo_CreateResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_CreateResponse proto.InternalMessageInfo + +type UpdateRequest struct { + Change *Change `protobuf:"bytes,1,opt,name=change,proto3" json:"change,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *UpdateRequest) Reset() { *m = UpdateRequest{} } +func (m *UpdateRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateRequest) ProtoMessage() {} +func (*UpdateRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_942f149553cfb65d, []int{4} +} + +func (m *UpdateRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_UpdateRequest.Unmarshal(m, b) +} +func (m *UpdateRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_UpdateRequest.Marshal(b, m, deterministic) +} +func (m *UpdateRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_UpdateRequest.Merge(m, src) +} +func (m *UpdateRequest) XXX_Size() int { + return xxx_messageInfo_UpdateRequest.Size(m) +} +func (m *UpdateRequest) XXX_DiscardUnknown() { + xxx_messageInfo_UpdateRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_UpdateRequest proto.InternalMessageInfo + +func (m *UpdateRequest) GetChange() *Change { + if m != nil { + return m.Change + } + return nil +} + +type UpdateResponse struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *UpdateResponse) Reset() { *m = UpdateResponse{} } +func (m *UpdateResponse) String() string { return proto.CompactTextString(m) } +func (*UpdateResponse) ProtoMessage() {} +func (*UpdateResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_942f149553cfb65d, []int{5} +} + +func (m *UpdateResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_UpdateResponse.Unmarshal(m, b) +} +func (m *UpdateResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_UpdateResponse.Marshal(b, m, deterministic) +} +func (m *UpdateResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_UpdateResponse.Merge(m, src) +} +func (m *UpdateResponse) XXX_Size() int { + return xxx_messageInfo_UpdateResponse.Size(m) +} +func (m *UpdateResponse) XXX_DiscardUnknown() { + xxx_messageInfo_UpdateResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_UpdateResponse proto.InternalMessageInfo + +type DeleteRequest struct { + Change *Change `protobuf:"bytes,1,opt,name=change,proto3" json:"change,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *DeleteRequest) Reset() { *m = DeleteRequest{} } +func (m *DeleteRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteRequest) ProtoMessage() {} +func (*DeleteRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_942f149553cfb65d, []int{6} +} + +func (m *DeleteRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_DeleteRequest.Unmarshal(m, b) +} +func (m *DeleteRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_DeleteRequest.Marshal(b, m, deterministic) +} +func (m *DeleteRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeleteRequest.Merge(m, src) +} +func (m *DeleteRequest) XXX_Size() int { + return xxx_messageInfo_DeleteRequest.Size(m) +} +func (m *DeleteRequest) XXX_DiscardUnknown() { + xxx_messageInfo_DeleteRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_DeleteRequest proto.InternalMessageInfo + +func (m *DeleteRequest) GetChange() *Change { + if m != nil { + return m.Change + } + return nil +} + +type DeleteResponse struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *DeleteResponse) Reset() { *m = DeleteResponse{} } +func (m *DeleteResponse) String() string { return proto.CompactTextString(m) } +func (*DeleteResponse) ProtoMessage() {} +func (*DeleteResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_942f149553cfb65d, []int{7} +} + +func (m *DeleteResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_DeleteResponse.Unmarshal(m, b) +} +func (m *DeleteResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_DeleteResponse.Marshal(b, m, deterministic) +} +func (m *DeleteResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeleteResponse.Merge(m, src) +} +func (m *DeleteResponse) XXX_Size() int { + return xxx_messageInfo_DeleteResponse.Size(m) +} +func (m *DeleteResponse) XXX_DiscardUnknown() { + xxx_messageInfo_DeleteResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_DeleteResponse proto.InternalMessageInfo + +type ListRequest struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ListRequest) Reset() { *m = ListRequest{} } +func (m *ListRequest) String() string { return proto.CompactTextString(m) } +func (*ListRequest) ProtoMessage() {} +func (*ListRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_942f149553cfb65d, []int{8} +} + +func (m *ListRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ListRequest.Unmarshal(m, b) +} +func (m *ListRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ListRequest.Marshal(b, m, deterministic) +} +func (m *ListRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_ListRequest.Merge(m, src) +} +func (m *ListRequest) XXX_Size() int { + return xxx_messageInfo_ListRequest.Size(m) +} +func (m *ListRequest) XXX_DiscardUnknown() { + xxx_messageInfo_ListRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_ListRequest proto.InternalMessageInfo + +type ListResponse struct { + Configs []*Change `protobuf:"bytes,1,rep,name=configs,proto3" json:"configs,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ListResponse) Reset() { *m = ListResponse{} } +func (m *ListResponse) String() string { return proto.CompactTextString(m) } +func (*ListResponse) ProtoMessage() {} +func (*ListResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_942f149553cfb65d, []int{9} +} + +func (m *ListResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ListResponse.Unmarshal(m, b) +} +func (m *ListResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ListResponse.Marshal(b, m, deterministic) +} +func (m *ListResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_ListResponse.Merge(m, src) +} +func (m *ListResponse) XXX_Size() int { + return xxx_messageInfo_ListResponse.Size(m) +} +func (m *ListResponse) XXX_DiscardUnknown() { + xxx_messageInfo_ListResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_ListResponse proto.InternalMessageInfo + +func (m *ListResponse) GetConfigs() []*Change { + if m != nil { + return m.Configs + } + return nil +} + +type ReadRequest struct { + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + Path string `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ReadRequest) Reset() { *m = ReadRequest{} } +func (m *ReadRequest) String() string { return proto.CompactTextString(m) } +func (*ReadRequest) ProtoMessage() {} +func (*ReadRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_942f149553cfb65d, []int{10} +} + +func (m *ReadRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ReadRequest.Unmarshal(m, b) +} +func (m *ReadRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ReadRequest.Marshal(b, m, deterministic) +} +func (m *ReadRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_ReadRequest.Merge(m, src) +} +func (m *ReadRequest) XXX_Size() int { + return xxx_messageInfo_ReadRequest.Size(m) +} +func (m *ReadRequest) XXX_DiscardUnknown() { + xxx_messageInfo_ReadRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_ReadRequest proto.InternalMessageInfo + +func (m *ReadRequest) GetKey() string { + if m != nil { + return m.Key + } + return "" +} + +func (m *ReadRequest) GetPath() string { + if m != nil { + return m.Path + } + return "" +} + +type ReadResponse struct { + Change *Change `protobuf:"bytes,1,opt,name=change,proto3" json:"change,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ReadResponse) Reset() { *m = ReadResponse{} } +func (m *ReadResponse) String() string { return proto.CompactTextString(m) } +func (*ReadResponse) ProtoMessage() {} +func (*ReadResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_942f149553cfb65d, []int{11} +} + +func (m *ReadResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ReadResponse.Unmarshal(m, b) +} +func (m *ReadResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ReadResponse.Marshal(b, m, deterministic) +} +func (m *ReadResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_ReadResponse.Merge(m, src) +} +func (m *ReadResponse) XXX_Size() int { + return xxx_messageInfo_ReadResponse.Size(m) +} +func (m *ReadResponse) XXX_DiscardUnknown() { + xxx_messageInfo_ReadResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_ReadResponse proto.InternalMessageInfo + +func (m *ReadResponse) GetChange() *Change { + if m != nil { + return m.Change + } + return nil +} + +type WatchRequest struct { + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *WatchRequest) Reset() { *m = WatchRequest{} } +func (m *WatchRequest) String() string { return proto.CompactTextString(m) } +func (*WatchRequest) ProtoMessage() {} +func (*WatchRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_942f149553cfb65d, []int{12} +} + +func (m *WatchRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_WatchRequest.Unmarshal(m, b) +} +func (m *WatchRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_WatchRequest.Marshal(b, m, deterministic) +} +func (m *WatchRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_WatchRequest.Merge(m, src) +} +func (m *WatchRequest) XXX_Size() int { + return xxx_messageInfo_WatchRequest.Size(m) +} +func (m *WatchRequest) XXX_DiscardUnknown() { + xxx_messageInfo_WatchRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_WatchRequest proto.InternalMessageInfo + +func (m *WatchRequest) GetKey() string { + if m != nil { + return m.Key + } + return "" +} + +type WatchResponse struct { + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + ChangeSet *ChangeSet `protobuf:"bytes,2,opt,name=changeSet,proto3" json:"changeSet,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *WatchResponse) Reset() { *m = WatchResponse{} } +func (m *WatchResponse) String() string { return proto.CompactTextString(m) } +func (*WatchResponse) ProtoMessage() {} +func (*WatchResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_942f149553cfb65d, []int{13} +} + +func (m *WatchResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_WatchResponse.Unmarshal(m, b) +} +func (m *WatchResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_WatchResponse.Marshal(b, m, deterministic) +} +func (m *WatchResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_WatchResponse.Merge(m, src) +} +func (m *WatchResponse) XXX_Size() int { + return xxx_messageInfo_WatchResponse.Size(m) +} +func (m *WatchResponse) XXX_DiscardUnknown() { + xxx_messageInfo_WatchResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_WatchResponse proto.InternalMessageInfo + +func (m *WatchResponse) GetKey() string { + if m != nil { + return m.Key + } + return "" +} + +func (m *WatchResponse) GetChangeSet() *ChangeSet { + if m != nil { + return m.ChangeSet + } + return nil +} + +func init() { + proto.RegisterType((*ChangeSet)(nil), "ChangeSet") + proto.RegisterType((*Change)(nil), "Change") + proto.RegisterType((*CreateRequest)(nil), "CreateRequest") + proto.RegisterType((*CreateResponse)(nil), "CreateResponse") + proto.RegisterType((*UpdateRequest)(nil), "UpdateRequest") + proto.RegisterType((*UpdateResponse)(nil), "UpdateResponse") + proto.RegisterType((*DeleteRequest)(nil), "DeleteRequest") + proto.RegisterType((*DeleteResponse)(nil), "DeleteResponse") + proto.RegisterType((*ListRequest)(nil), "ListRequest") + proto.RegisterType((*ListResponse)(nil), "ListResponse") + proto.RegisterType((*ReadRequest)(nil), "ReadRequest") + proto.RegisterType((*ReadResponse)(nil), "ReadResponse") + proto.RegisterType((*WatchRequest)(nil), "WatchRequest") + proto.RegisterType((*WatchResponse)(nil), "WatchResponse") +} + +func init() { proto.RegisterFile("proto/mucp.proto", fileDescriptor_942f149553cfb65d) } + +var fileDescriptor_942f149553cfb65d = []byte{ + // 425 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x93, 0xdd, 0x6e, 0xd3, 0x30, + 0x14, 0xc7, 0x93, 0xa6, 0xcb, 0xc8, 0xc9, 0x47, 0xab, 0x73, 0x81, 0xa2, 0x08, 0x89, 0x60, 0x09, + 0x29, 0x02, 0xc9, 0x1b, 0xdd, 0x23, 0x8c, 0x3b, 0xb8, 0xf2, 0x84, 0xe0, 0xd6, 0xa4, 0xde, 0x52, + 0x8d, 0x34, 0x21, 0x76, 0x2e, 0x78, 0x84, 0xbd, 0x35, 0x8a, 0xed, 0xb4, 0x49, 0x11, 0xb0, 0xde, + 0x9d, 0xcf, 0xbf, 0xff, 0x3d, 0xbf, 0x06, 0xd6, 0x6d, 0xd7, 0xa8, 0xe6, 0xaa, 0xee, 0xcb, 0x96, + 0xea, 0x90, 0x3c, 0xb9, 0x10, 0xdc, 0x56, 0x7c, 0xff, 0x20, 0xee, 0x84, 0x42, 0x84, 0xe5, 0x96, + 0x2b, 0x9e, 0xba, 0xb9, 0x5b, 0x44, 0x4c, 0xc7, 0x98, 0xc1, 0x8b, 0xb2, 0x12, 0xe5, 0xa3, 0xec, + 0xeb, 0x74, 0x91, 0xbb, 0x45, 0xc0, 0x0e, 0x39, 0xbe, 0x04, 0xff, 0xbe, 0xe9, 0x6a, 0xae, 0x52, + 0x4f, 0x77, 0x6c, 0x36, 0xd4, 0x65, 0xd3, 0x77, 0xa5, 0x48, 0x97, 0xa6, 0x6e, 0x32, 0x7c, 0x05, + 0x81, 0xda, 0xd5, 0x42, 0x2a, 0x5e, 0xb7, 0xe9, 0x45, 0xee, 0x16, 0x1e, 0x3b, 0x16, 0xc8, 0x37, + 0xf0, 0x8d, 0x15, 0x5c, 0x83, 0xf7, 0x28, 0x7e, 0x69, 0x1b, 0x01, 0x1b, 0xc2, 0xc1, 0x59, 0xcb, + 0x55, 0x65, 0x1d, 0xe8, 0x18, 0x0b, 0x08, 0xca, 0xd1, 0xba, 0x36, 0x10, 0x6e, 0x80, 0x1e, 0x7e, + 0x0c, 0x3b, 0x36, 0xc9, 0x35, 0xc4, 0xb7, 0x9d, 0xe0, 0x4a, 0x30, 0xf1, 0xb3, 0x17, 0x52, 0xe1, + 0x6b, 0xf0, 0x4d, 0x57, 0xbf, 0x11, 0x6e, 0x2e, 0xed, 0x1e, 0xb3, 0x65, 0xb2, 0x86, 0x64, 0xdc, + 0x90, 0x6d, 0xb3, 0x97, 0x62, 0xd0, 0xf8, 0xd2, 0x6e, 0xcf, 0xd4, 0x18, 0x37, 0x8e, 0x1a, 0x1f, + 0xc5, 0x0f, 0x71, 0x9e, 0xc6, 0xb8, 0x61, 0x35, 0x62, 0x08, 0x3f, 0xef, 0xa4, 0xb2, 0x0a, 0xe4, + 0x03, 0x44, 0x26, 0x35, 0x6d, 0x7c, 0x03, 0x97, 0x65, 0xb3, 0xbf, 0xdf, 0x3d, 0xc8, 0xd4, 0xcd, + 0xbd, 0xa9, 0xe4, 0x58, 0x27, 0x37, 0x10, 0x32, 0xc1, 0xb7, 0xa3, 0x87, 0x67, 0x1d, 0x9b, 0x5c, + 0x41, 0x64, 0x96, 0xec, 0x3b, 0xff, 0x75, 0x9e, 0x43, 0xf4, 0x95, 0xab, 0xb2, 0xfa, 0xeb, 0x33, + 0xe4, 0x13, 0xc4, 0x76, 0xc2, 0x6a, 0xfe, 0xe9, 0x64, 0x86, 0x78, 0xf1, 0x0f, 0xc4, 0x9b, 0xa7, + 0x05, 0xf8, 0x77, 0xe6, 0x5f, 0xf6, 0x1e, 0x7c, 0xc3, 0x0e, 0x13, 0x3a, 0xc3, 0x9e, 0xad, 0xe8, + 0x09, 0x54, 0x67, 0x18, 0x36, 0x90, 0x30, 0xa1, 0x33, 0xbe, 0xd9, 0x8a, 0x9e, 0xd0, 0xd3, 0xc3, + 0x86, 0x06, 0x26, 0x74, 0x06, 0x32, 0x5b, 0xd1, 0x13, 0x4c, 0x0e, 0xbe, 0x85, 0xe5, 0x40, 0x06, + 0x23, 0x3a, 0xe1, 0x95, 0xc5, 0x74, 0x8a, 0xcb, 0x8c, 0x0d, 0x87, 0xc5, 0x88, 0x4e, 0xa0, 0x64, + 0x31, 0x9d, 0x5e, 0x9b, 0x38, 0xf8, 0x0e, 0x2e, 0xf4, 0xb1, 0x30, 0xa6, 0xd3, 0xb3, 0x66, 0x09, + 0x9d, 0xdd, 0x90, 0x38, 0xd7, 0xee, 0x77, 0x5f, 0x7f, 0xdb, 0x37, 0xbf, 0x03, 0x00, 0x00, 0xff, + 0xff, 0x66, 0x66, 0xa8, 0x5d, 0xef, 0x03, 0x00, 0x00, +} diff --git a/config/source/mucp/proto/mucp.pb.micro.go b/config/source/mucp/proto/mucp.pb.micro.go new file mode 100644 index 00000000..088cd8ee --- /dev/null +++ b/config/source/mucp/proto/mucp.pb.micro.go @@ -0,0 +1,241 @@ +// Code generated by protoc-gen-micro. DO NOT EDIT. +// source: proto/mucp.proto + +package mucp + +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + math "math" +) + +import ( + context "context" + client "github.com/micro/go-micro/client" + server "github.com/micro/go-micro/server" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ client.Option +var _ server.Option + +// Client API for Source service + +type SourceService interface { + Create(ctx context.Context, in *CreateRequest, opts ...client.CallOption) (*CreateResponse, error) + Update(ctx context.Context, in *UpdateRequest, opts ...client.CallOption) (*UpdateResponse, error) + Delete(ctx context.Context, in *DeleteRequest, opts ...client.CallOption) (*DeleteResponse, error) + List(ctx context.Context, in *ListRequest, opts ...client.CallOption) (*ListResponse, error) + Read(ctx context.Context, in *ReadRequest, opts ...client.CallOption) (*ReadResponse, error) + Watch(ctx context.Context, in *WatchRequest, opts ...client.CallOption) (Source_WatchService, error) +} + +type sourceService struct { + c client.Client + name string +} + +func NewSourceService(name string, c client.Client) SourceService { + if c == nil { + c = client.NewClient() + } + if len(name) == 0 { + name = "source" + } + return &sourceService{ + c: c, + name: name, + } +} + +func (c *sourceService) Create(ctx context.Context, in *CreateRequest, opts ...client.CallOption) (*CreateResponse, error) { + req := c.c.NewRequest(c.name, "Source.Create", in) + out := new(CreateResponse) + err := c.c.Call(ctx, req, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *sourceService) Update(ctx context.Context, in *UpdateRequest, opts ...client.CallOption) (*UpdateResponse, error) { + req := c.c.NewRequest(c.name, "Source.Update", in) + out := new(UpdateResponse) + err := c.c.Call(ctx, req, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *sourceService) Delete(ctx context.Context, in *DeleteRequest, opts ...client.CallOption) (*DeleteResponse, error) { + req := c.c.NewRequest(c.name, "Source.Delete", in) + out := new(DeleteResponse) + err := c.c.Call(ctx, req, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *sourceService) List(ctx context.Context, in *ListRequest, opts ...client.CallOption) (*ListResponse, error) { + req := c.c.NewRequest(c.name, "Source.List", in) + out := new(ListResponse) + err := c.c.Call(ctx, req, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *sourceService) Read(ctx context.Context, in *ReadRequest, opts ...client.CallOption) (*ReadResponse, error) { + req := c.c.NewRequest(c.name, "Source.Read", in) + out := new(ReadResponse) + err := c.c.Call(ctx, req, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *sourceService) Watch(ctx context.Context, in *WatchRequest, opts ...client.CallOption) (Source_WatchService, error) { + req := c.c.NewRequest(c.name, "Source.Watch", &WatchRequest{}) + stream, err := c.c.Stream(ctx, req, opts...) + if err != nil { + return nil, err + } + if err := stream.Send(in); err != nil { + return nil, err + } + return &sourceServiceWatch{stream}, nil +} + +type Source_WatchService interface { + SendMsg(interface{}) error + RecvMsg(interface{}) error + Close() error + Recv() (*WatchResponse, error) +} + +type sourceServiceWatch struct { + stream client.Stream +} + +func (x *sourceServiceWatch) Close() error { + return x.stream.Close() +} + +func (x *sourceServiceWatch) SendMsg(m interface{}) error { + return x.stream.Send(m) +} + +func (x *sourceServiceWatch) RecvMsg(m interface{}) error { + return x.stream.Recv(m) +} + +func (x *sourceServiceWatch) Recv() (*WatchResponse, error) { + m := new(WatchResponse) + err := x.stream.Recv(m) + if err != nil { + return nil, err + } + return m, nil +} + +// Server API for Source service + +type SourceHandler interface { + Create(context.Context, *CreateRequest, *CreateResponse) error + Update(context.Context, *UpdateRequest, *UpdateResponse) error + Delete(context.Context, *DeleteRequest, *DeleteResponse) error + List(context.Context, *ListRequest, *ListResponse) error + Read(context.Context, *ReadRequest, *ReadResponse) error + Watch(context.Context, *WatchRequest, Source_WatchStream) error +} + +func RegisterSourceHandler(s server.Server, hdlr SourceHandler, opts ...server.HandlerOption) error { + type source interface { + Create(ctx context.Context, in *CreateRequest, out *CreateResponse) error + Update(ctx context.Context, in *UpdateRequest, out *UpdateResponse) error + Delete(ctx context.Context, in *DeleteRequest, out *DeleteResponse) error + List(ctx context.Context, in *ListRequest, out *ListResponse) error + Read(ctx context.Context, in *ReadRequest, out *ReadResponse) error + Watch(ctx context.Context, stream server.Stream) error + } + type Source struct { + source + } + h := &sourceHandler{hdlr} + return s.Handle(s.NewHandler(&Source{h}, opts...)) +} + +type sourceHandler struct { + SourceHandler +} + +func (h *sourceHandler) Create(ctx context.Context, in *CreateRequest, out *CreateResponse) error { + return h.SourceHandler.Create(ctx, in, out) +} + +func (h *sourceHandler) Update(ctx context.Context, in *UpdateRequest, out *UpdateResponse) error { + return h.SourceHandler.Update(ctx, in, out) +} + +func (h *sourceHandler) Delete(ctx context.Context, in *DeleteRequest, out *DeleteResponse) error { + return h.SourceHandler.Delete(ctx, in, out) +} + +func (h *sourceHandler) List(ctx context.Context, in *ListRequest, out *ListResponse) error { + return h.SourceHandler.List(ctx, in, out) +} + +func (h *sourceHandler) Read(ctx context.Context, in *ReadRequest, out *ReadResponse) error { + return h.SourceHandler.Read(ctx, in, out) +} + +func (h *sourceHandler) Watch(ctx context.Context, stream server.Stream) error { + m := new(WatchRequest) + if err := stream.Recv(m); err != nil { + return err + } + return h.SourceHandler.Watch(ctx, m, &sourceWatchStream{stream}) +} + +type Source_WatchStream interface { + SendMsg(interface{}) error + RecvMsg(interface{}) error + Close() error + Send(*WatchResponse) error +} + +type sourceWatchStream struct { + stream server.Stream +} + +func (x *sourceWatchStream) Close() error { + return x.stream.Close() +} + +func (x *sourceWatchStream) SendMsg(m interface{}) error { + return x.stream.Send(m) +} + +func (x *sourceWatchStream) RecvMsg(m interface{}) error { + return x.stream.Recv(m) +} + +func (x *sourceWatchStream) Send(m *WatchResponse) error { + return x.stream.Send(m) +} diff --git a/config/source/mucp/proto/mucp.proto b/config/source/mucp/proto/mucp.proto new file mode 100644 index 00000000..71bf99bc --- /dev/null +++ b/config/source/mucp/proto/mucp.proto @@ -0,0 +1,76 @@ +syntax = "proto3"; + +service Source { + rpc Create (CreateRequest) returns (CreateResponse) { + } + rpc Update (UpdateRequest) returns (UpdateResponse) { + } + rpc Delete (DeleteRequest) returns (DeleteResponse) { + } + rpc List (ListRequest) returns (ListResponse) { + } + rpc Read (ReadRequest) returns (ReadResponse) { + } + rpc Watch (WatchRequest) returns (stream WatchResponse) { + } +} + +message ChangeSet { + bytes data = 1; + string checksum = 2; + string format = 3; + string source = 4; + int64 timestamp = 5; +} + +message Change { + string key = 1; + string path = 2; + ChangeSet changeSet = 3; +} + +message CreateRequest { + Change change = 1; +} + +message CreateResponse { +} + +message UpdateRequest { + Change change = 1; +} + +message UpdateResponse { +} + +message DeleteRequest { + Change change = 1; +} + +message DeleteResponse { +} + +message ListRequest { +} + +message ListResponse { + repeated Change configs = 1; +} + +message ReadRequest { + string key = 1; + string path = 2; +} + +message ReadResponse { + Change change = 1; +} + +message WatchRequest { + string key = 1; +} + +message WatchResponse { + string key = 1; + ChangeSet changeSet = 2; +} \ No newline at end of file diff --git a/config/source/mucp/util.go b/config/source/mucp/util.go new file mode 100644 index 00000000..b1a8deec --- /dev/null +++ b/config/source/mucp/util.go @@ -0,0 +1,18 @@ +package mucp + +import ( + "time" + + "github.com/micro/go-micro/config/source" + proto "github.com/micro/go-micro/config/source/mucp/proto" +) + +func toChangeSet(c *proto.ChangeSet) *source.ChangeSet { + return &source.ChangeSet{ + Data: c.Data, + Checksum: c.Checksum, + Format: c.Format, + Timestamp: time.Unix(c.Timestamp, 0), + Source: c.Source, + } +} diff --git a/config/source/mucp/watcher.go b/config/source/mucp/watcher.go new file mode 100644 index 00000000..466703e9 --- /dev/null +++ b/config/source/mucp/watcher.go @@ -0,0 +1,27 @@ +package mucp + +import ( + "github.com/micro/go-micro/config/source" + proto "github.com/micro/go-micro/config/source/mucp/proto" +) + +type watcher struct { + stream proto.Source_WatchService +} + +func newWatcher(stream proto.Source_WatchService) (source.Watcher, error) { + return &watcher{stream: stream}, nil +} + +func (w *watcher) Next() (*source.ChangeSet, error) { + var rsp proto.WatchResponse + err := w.stream.RecvMsg(&rsp) + if err != nil { + return nil, err + } + return toChangeSet(rsp.ChangeSet), nil +} + +func (w *watcher) Stop() error { + return w.stream.Close() +}