fix lint
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
This commit is contained in:
parent
a1999ff81c
commit
ecb60e4dc5
@ -114,8 +114,8 @@ func (m *memoryBroker) Publish(ctx context.Context, topic string, msg *Message,
|
|||||||
}
|
}
|
||||||
|
|
||||||
type msgWrapper struct {
|
type msgWrapper struct {
|
||||||
topic string
|
|
||||||
body interface{}
|
body interface{}
|
||||||
|
topic string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *memoryBroker) BatchPublish(ctx context.Context, msgs []*Message, opts ...PublishOption) error {
|
func (m *memoryBroker) BatchPublish(ctx context.Context, msgs []*Message, opts ...PublishOption) error {
|
||||||
@ -180,7 +180,7 @@ func (m *memoryBroker) publish(ctx context.Context, vs []msgWrapper, opts ...Pub
|
|||||||
beh = sub.opts.BatchErrorHandler
|
beh = sub.opts.BatchErrorHandler
|
||||||
}
|
}
|
||||||
if beh != nil {
|
if beh != nil {
|
||||||
beh(ms)
|
_ = beh(ms)
|
||||||
} else if m.opts.Logger.V(logger.ErrorLevel) {
|
} else if m.opts.Logger.V(logger.ErrorLevel) {
|
||||||
m.opts.Logger.Error(m.opts.Context, err.Error())
|
m.opts.Logger.Error(m.opts.Context, err.Error())
|
||||||
}
|
}
|
||||||
@ -199,7 +199,7 @@ func (m *memoryBroker) publish(ctx context.Context, vs []msgWrapper, opts ...Pub
|
|||||||
eh = sub.opts.ErrorHandler
|
eh = sub.opts.ErrorHandler
|
||||||
}
|
}
|
||||||
if eh != nil {
|
if eh != nil {
|
||||||
eh(p)
|
_ = eh(p)
|
||||||
} else if m.opts.Logger.V(logger.ErrorLevel) {
|
} else if m.opts.Logger.V(logger.ErrorLevel) {
|
||||||
m.opts.Logger.Error(m.opts.Context, err.Error())
|
m.opts.Logger.Error(m.opts.Context, err.Error())
|
||||||
}
|
}
|
||||||
|
@ -53,6 +53,7 @@ func TestMemoryBatchBroker(t *testing.T) {
|
|||||||
t.Fatalf("Unexpected connect error %v", err)
|
t.Fatalf("Unexpected connect error %v", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestMemoryBroker(t *testing.T) {
|
func TestMemoryBroker(t *testing.T) {
|
||||||
b := NewBroker()
|
b := NewBroker()
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
|
@ -13,7 +13,7 @@ var DefaultConfig Config = NewConfig()
|
|||||||
// DefaultWatcherMinInterval default min interval for poll changes
|
// DefaultWatcherMinInterval default min interval for poll changes
|
||||||
var DefaultWatcherMinInterval = 5 * time.Second
|
var DefaultWatcherMinInterval = 5 * time.Second
|
||||||
|
|
||||||
// DefaultWatcherMinInterval default max interval for poll changes
|
// DefaultWatcherMaxInterval default max interval for poll changes
|
||||||
var DefaultWatcherMaxInterval = 9 * time.Second
|
var DefaultWatcherMaxInterval = 9 * time.Second
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -48,5 +48,5 @@ func TestDefault(t *testing.T) {
|
|||||||
t.Fatal("AfterLoad option not working")
|
t.Fatal("AfterLoad option not working")
|
||||||
}
|
}
|
||||||
_ = conf
|
_ = conf
|
||||||
//t.Logf("%#+v\n", conf)
|
// t.Logf("%#+v\n", conf)
|
||||||
}
|
}
|
||||||
|
@ -264,17 +264,16 @@ func (w *microWorkflow) Execute(ctx context.Context, req *Message, opts ...Execu
|
|||||||
}
|
}
|
||||||
cherr <- serr
|
cherr <- serr
|
||||||
return
|
return
|
||||||
} else {
|
}
|
||||||
if werr := stepStore.Write(ctx, filepath.Join(step.ID(), "rsp"), rsp); werr != nil {
|
if werr := stepStore.Write(ctx, filepath.Join(step.ID(), "rsp"), rsp); werr != nil {
|
||||||
w.opts.Logger.Errorf(ctx, "store write error: %v", werr)
|
w.opts.Logger.Errorf(ctx, "store write error: %v", werr)
|
||||||
cherr <- werr
|
cherr <- werr
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if werr := stepStore.Write(ctx, filepath.Join(step.ID(), "status"), &codec.Frame{Data: []byte(StatusSuccess.String())}); werr != nil {
|
if werr := stepStore.Write(ctx, filepath.Join(step.ID(), "status"), &codec.Frame{Data: []byte(StatusSuccess.String())}); werr != nil {
|
||||||
w.opts.Logger.Errorf(ctx, "store write error: %v", werr)
|
w.opts.Logger.Errorf(ctx, "store write error: %v", werr)
|
||||||
cherr <- werr
|
cherr <- werr
|
||||||
return
|
return
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}(cstep)
|
}(cstep)
|
||||||
wg.Wait()
|
wg.Wait()
|
||||||
@ -298,16 +297,15 @@ func (w *microWorkflow) Execute(ctx context.Context, req *Message, opts ...Execu
|
|||||||
}
|
}
|
||||||
cherr <- serr
|
cherr <- serr
|
||||||
return
|
return
|
||||||
} else {
|
}
|
||||||
if werr := stepStore.Write(ctx, filepath.Join(cstep.ID(), "rsp"), rsp); werr != nil {
|
if werr := stepStore.Write(ctx, filepath.Join(cstep.ID(), "rsp"), rsp); werr != nil {
|
||||||
w.opts.Logger.Errorf(ctx, "store write error: %v", werr)
|
w.opts.Logger.Errorf(ctx, "store write error: %v", werr)
|
||||||
cherr <- werr
|
cherr <- werr
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if werr := stepStore.Write(ctx, filepath.Join(cstep.ID(), "status"), &codec.Frame{Data: []byte(StatusSuccess.String())}); werr != nil {
|
if werr := stepStore.Write(ctx, filepath.Join(cstep.ID(), "status"), &codec.Frame{Data: []byte(StatusSuccess.String())}); werr != nil {
|
||||||
cherr <- werr
|
cherr <- werr
|
||||||
return
|
return
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -337,17 +335,14 @@ func (w *microWorkflow) Execute(ctx context.Context, req *Message, opts ...Execu
|
|||||||
if werr := workflowStore.Write(w.opts.Context, "status", &codec.Frame{Data: []byte(StatusAborted.String())}); werr != nil {
|
if werr := workflowStore.Write(w.opts.Context, "status", &codec.Frame{Data: []byte(StatusAborted.String())}); werr != nil {
|
||||||
w.opts.Logger.Errorf(w.opts.Context, "store error: %v", werr)
|
w.opts.Logger.Errorf(w.opts.Context, "store error: %v", werr)
|
||||||
}
|
}
|
||||||
break
|
|
||||||
case err == nil:
|
case err == nil:
|
||||||
if werr := workflowStore.Write(w.opts.Context, "status", &codec.Frame{Data: []byte(StatusSuccess.String())}); werr != nil {
|
if werr := workflowStore.Write(w.opts.Context, "status", &codec.Frame{Data: []byte(StatusSuccess.String())}); werr != nil {
|
||||||
w.opts.Logger.Errorf(w.opts.Context, "store error: %v", werr)
|
w.opts.Logger.Errorf(w.opts.Context, "store error: %v", werr)
|
||||||
}
|
}
|
||||||
break
|
|
||||||
case err != nil:
|
case err != nil:
|
||||||
if werr := workflowStore.Write(w.opts.Context, "status", &codec.Frame{Data: []byte(StatusFailure.String())}); werr != nil {
|
if werr := workflowStore.Write(w.opts.Context, "status", &codec.Frame{Data: []byte(StatusFailure.String())}); werr != nil {
|
||||||
w.opts.Logger.Errorf(w.opts.Context, "store error: %v", werr)
|
w.opts.Logger.Errorf(w.opts.Context, "store error: %v", werr)
|
||||||
}
|
}
|
||||||
break
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return eid, err
|
return eid, err
|
||||||
@ -499,10 +494,12 @@ func (s *microCallStep) Execute(ctx context.Context, req *Message, opts ...Execu
|
|||||||
rsp := &codec.Frame{}
|
rsp := &codec.Frame{}
|
||||||
copts := []client.CallOption{client.WithRetries(0)}
|
copts := []client.CallOption{client.WithRetries(0)}
|
||||||
if options.Timeout > 0 {
|
if options.Timeout > 0 {
|
||||||
copts = append(copts, client.WithRequestTimeout(options.Timeout), client.WithDialTimeout(options.Timeout))
|
copts = append(copts,
|
||||||
|
client.WithRequestTimeout(options.Timeout),
|
||||||
|
client.WithDialTimeout(options.Timeout))
|
||||||
}
|
}
|
||||||
nctx := metadata.NewOutgoingContext(ctx, req.Header)
|
nctx := metadata.NewOutgoingContext(ctx, req.Header)
|
||||||
err := options.Client.Call(nctx, options.Client.NewRequest(s.service, s.method, &codec.Frame{Data: req.Body}), rsp)
|
err := options.Client.Call(nctx, options.Client.NewRequest(s.service, s.method, &codec.Frame{Data: req.Body}), rsp, copts...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -553,7 +550,7 @@ func (s *microPublishStep) String() string {
|
|||||||
if s.opts.ID != "" {
|
if s.opts.ID != "" {
|
||||||
return s.opts.ID
|
return s.opts.ID
|
||||||
}
|
}
|
||||||
return fmt.Sprintf("%s", s.topic)
|
return s.topic
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *microPublishStep) Name() string {
|
func (s *microPublishStep) Name() string {
|
||||||
|
6
go.mod
6
go.mod
@ -4,11 +4,11 @@ go 1.16
|
|||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/ef-ds/deque v1.0.4
|
github.com/ef-ds/deque v1.0.4
|
||||||
github.com/golang-jwt/jwt/v4 v4.0.0
|
github.com/golang-jwt/jwt/v4 v4.1.0
|
||||||
github.com/imdario/mergo v0.3.12
|
github.com/imdario/mergo v0.3.12
|
||||||
github.com/patrickmn/go-cache v2.1.0+incompatible
|
github.com/patrickmn/go-cache v2.1.0+incompatible
|
||||||
github.com/silas/dag v0.0.0-20210121180416-41cf55125c34
|
github.com/silas/dag v0.0.0-20210626123444-3804bac2d6d4
|
||||||
github.com/unistack-org/micro-proto v0.0.9
|
github.com/unistack-org/micro-proto v0.0.9
|
||||||
golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d
|
golang.org/x/net v0.0.0-20210928044308-7d9f5e0b762b
|
||||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
|
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
|
||||||
)
|
)
|
||||||
|
6
go.sum
6
go.sum
@ -2,6 +2,8 @@ github.com/ef-ds/deque v1.0.4 h1:iFAZNmveMT9WERAkqLJ+oaABF9AcVQ5AjXem/hroniI=
|
|||||||
github.com/ef-ds/deque v1.0.4/go.mod h1:gXDnTC3yqvBcHbq2lcExjtAcVrOnJCbMcZXmuj8Z4tg=
|
github.com/ef-ds/deque v1.0.4/go.mod h1:gXDnTC3yqvBcHbq2lcExjtAcVrOnJCbMcZXmuj8Z4tg=
|
||||||
github.com/golang-jwt/jwt/v4 v4.0.0 h1:RAqyYixv1p7uEnocuy8P1nru5wprCh/MH2BIlW5z5/o=
|
github.com/golang-jwt/jwt/v4 v4.0.0 h1:RAqyYixv1p7uEnocuy8P1nru5wprCh/MH2BIlW5z5/o=
|
||||||
github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg=
|
github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg=
|
||||||
|
github.com/golang-jwt/jwt/v4 v4.1.0 h1:XUgk2Ex5veyVFVeLm0xhusUTQybEbexJXrvPNOKkSY0=
|
||||||
|
github.com/golang-jwt/jwt/v4 v4.1.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg=
|
||||||
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
|
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
|
||||||
github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
|
github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
|
||||||
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||||
@ -11,10 +13,14 @@ github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaR
|
|||||||
github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ=
|
github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ=
|
||||||
github.com/silas/dag v0.0.0-20210121180416-41cf55125c34 h1:vBfVmA5mZhsQa2jr1FOL9nfA37N/jnbBmi5XUfviVTI=
|
github.com/silas/dag v0.0.0-20210121180416-41cf55125c34 h1:vBfVmA5mZhsQa2jr1FOL9nfA37N/jnbBmi5XUfviVTI=
|
||||||
github.com/silas/dag v0.0.0-20210121180416-41cf55125c34/go.mod h1:7RTUFBdIRC9nZ7/3RyRNH1bdqIShrDejd1YbLwgPS+I=
|
github.com/silas/dag v0.0.0-20210121180416-41cf55125c34/go.mod h1:7RTUFBdIRC9nZ7/3RyRNH1bdqIShrDejd1YbLwgPS+I=
|
||||||
|
github.com/silas/dag v0.0.0-20210626123444-3804bac2d6d4 h1:fOH64AB0C3ixGf9emky61STvPJL3smxJg+1Zwx1oCdg=
|
||||||
|
github.com/silas/dag v0.0.0-20210626123444-3804bac2d6d4/go.mod h1:7RTUFBdIRC9nZ7/3RyRNH1bdqIShrDejd1YbLwgPS+I=
|
||||||
github.com/unistack-org/micro-proto v0.0.9 h1:KrWLS4FUX7UAWNAilQf70uad6ZPf/0EudeddCXllRVc=
|
github.com/unistack-org/micro-proto v0.0.9 h1:KrWLS4FUX7UAWNAilQf70uad6ZPf/0EudeddCXllRVc=
|
||||||
github.com/unistack-org/micro-proto v0.0.9/go.mod h1:Cckwmzd89gvS7ThxzZp9kQR/EOdksFQcsTAtDDyKwrg=
|
github.com/unistack-org/micro-proto v0.0.9/go.mod h1:Cckwmzd89gvS7ThxzZp9kQR/EOdksFQcsTAtDDyKwrg=
|
||||||
golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d h1:20cMwl2fHAzkJMEA+8J4JgqBQcQGzbisXo31MIeenXI=
|
golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d h1:20cMwl2fHAzkJMEA+8J4JgqBQcQGzbisXo31MIeenXI=
|
||||||
golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||||
|
golang.org/x/net v0.0.0-20210928044308-7d9f5e0b762b h1:eB48h3HiRycXNy8E0Gf5e0hv7YT6Kt14L/D73G1fuwo=
|
||||||
|
golang.org/x/net v0.0.0-20210928044308-7d9f5e0b762b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
|
@ -81,7 +81,7 @@ func (l *defaultLogger) Fields(fields ...interface{}) Logger {
|
|||||||
} else if len(fields)%2 != 0 {
|
} else if len(fields)%2 != 0 {
|
||||||
fields = fields[:len(fields)-1]
|
fields = fields[:len(fields)-1]
|
||||||
}
|
}
|
||||||
nl.opts.Fields = append(l.opts.Fields, fields...)
|
nl.opts.Fields = append(nl.opts.Fields, fields...)
|
||||||
return nl
|
return nl
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -125,23 +125,29 @@ func getArgs(args []interface{}) []interface{} {
|
|||||||
var err error
|
var err error
|
||||||
for _, arg := range args {
|
for _, arg := range args {
|
||||||
val := reflect.ValueOf(arg)
|
val := reflect.ValueOf(arg)
|
||||||
switch val.Kind() {
|
if val.Kind() == reflect.Ptr {
|
||||||
case reflect.Ptr:
|
|
||||||
val = val.Elem()
|
val = val.Elem()
|
||||||
}
|
}
|
||||||
narg := arg
|
narg := arg
|
||||||
if val.Kind() == reflect.Struct {
|
if val.Kind() != reflect.Struct {
|
||||||
if narg, err = rutil.Zero(arg); err == nil {
|
nargs = append(nargs, narg)
|
||||||
rutil.CopyDefaults(narg, arg)
|
continue
|
||||||
if flds, ferr := rutil.StructFields(narg); ferr == nil {
|
}
|
||||||
for _, fld := range flds {
|
|
||||||
if tv, ok := fld.Field.Tag.Lookup("logger"); ok && tv == "omit" {
|
if narg, err = rutil.Zero(arg); err != nil {
|
||||||
fld.Value.Set(reflect.Zero(fld.Value.Type()))
|
nargs = append(nargs, narg)
|
||||||
}
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rutil.CopyDefaults(narg, arg)
|
||||||
|
if flds, ferr := rutil.StructFields(narg); ferr == nil {
|
||||||
|
for _, fld := range flds {
|
||||||
|
if tv, ok := fld.Field.Tag.Lookup("logger"); ok && tv == "omit" {
|
||||||
|
fld.Value.Set(reflect.Zero(fld.Value.Type()))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
nargs = append(nargs, narg)
|
nargs = append(nargs, narg)
|
||||||
}
|
}
|
||||||
return nargs
|
return nargs
|
||||||
|
@ -3,6 +3,10 @@ package meter
|
|||||||
//go:generate sh -c "protoc -I./handler -I../ -I$(go list -f '{{ .Dir }}' -m github.com/unistack-org/micro-proto) --go-micro_out='components=micro|http|server',standalone=false,debug=true,paths=source_relative:./handler handler/handler.proto"
|
//go:generate sh -c "protoc -I./handler -I../ -I$(go list -f '{{ .Dir }}' -m github.com/unistack-org/micro-proto) --go-micro_out='components=micro|http|server',standalone=false,debug=true,paths=source_relative:./handler handler/handler.proto"
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|
||||||
|
// import required packages
|
||||||
_ "github.com/unistack-org/micro-proto/api"
|
_ "github.com/unistack-org/micro-proto/api"
|
||||||
|
|
||||||
|
// import required packages
|
||||||
_ "github.com/unistack-org/micro-proto/openapiv2"
|
_ "github.com/unistack-org/micro-proto/openapiv2"
|
||||||
)
|
)
|
||||||
|
@ -6,6 +6,7 @@ package handler
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
context "context"
|
context "context"
|
||||||
|
|
||||||
api "github.com/unistack-org/micro/v3/api"
|
api "github.com/unistack-org/micro/v3/api"
|
||||||
codec "github.com/unistack-org/micro/v3/codec"
|
codec "github.com/unistack-org/micro/v3/codec"
|
||||||
)
|
)
|
||||||
|
@ -6,6 +6,7 @@ package handler
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
context "context"
|
context "context"
|
||||||
|
|
||||||
api "github.com/unistack-org/micro/v3/api"
|
api "github.com/unistack-org/micro/v3/api"
|
||||||
codec "github.com/unistack-org/micro/v3/codec"
|
codec "github.com/unistack-org/micro/v3/codec"
|
||||||
server "github.com/unistack-org/micro/v3/server"
|
server "github.com/unistack-org/micro/v3/server"
|
||||||
|
@ -33,7 +33,7 @@ func TestBuildLabels(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
data := []testData{
|
data := []testData{
|
||||||
testData{
|
{
|
||||||
src: []string{"zerolabel", "value3", "firstlabel", "value2"},
|
src: []string{"zerolabel", "value3", "firstlabel", "value2"},
|
||||||
dst: []string{"firstlabel", "value2", "zerolabel", "value3"},
|
dst: []string{"firstlabel", "value2", "zerolabel", "value3"},
|
||||||
},
|
},
|
||||||
@ -48,15 +48,15 @@ func TestBuildLabels(t *testing.T) {
|
|||||||
|
|
||||||
func TestBuildName(t *testing.T) {
|
func TestBuildName(t *testing.T) {
|
||||||
data := map[string][]string{
|
data := map[string][]string{
|
||||||
`my_metric{firstlabel="value2",zerolabel="value3"}`: []string{
|
`my_metric{firstlabel="value2",zerolabel="value3"}`: {
|
||||||
"my_metric",
|
"my_metric",
|
||||||
"zerolabel", "value3", "firstlabel", "value2",
|
"zerolabel", "value3", "firstlabel", "value2",
|
||||||
},
|
},
|
||||||
`my_metric{broker="broker2",register="mdns",server="tcp"}`: []string{
|
`my_metric{broker="broker2",register="mdns",server="tcp"}`: {
|
||||||
"my_metric",
|
"my_metric",
|
||||||
"broker", "broker1", "broker", "broker2", "server", "http", "server", "tcp", "register", "mdns",
|
"broker", "broker1", "broker", "broker2", "server", "http", "server", "tcp", "register", "mdns",
|
||||||
},
|
},
|
||||||
`my_metric{aaa="aaa"}`: []string{
|
`my_metric{aaa="aaa"}`: {
|
||||||
"my_metric",
|
"my_metric",
|
||||||
"aaa", "aaa",
|
"aaa", "aaa",
|
||||||
},
|
},
|
||||||
|
@ -82,7 +82,7 @@ func (t *tunBroker) BatchPublish(ctx context.Context, msgs []*broker.Message, op
|
|||||||
topic, _ := msg.Header.Get(metadata.HeaderTopic)
|
topic, _ := msg.Header.Get(metadata.HeaderTopic)
|
||||||
c, ok := topicMap[topic]
|
c, ok := topicMap[topic]
|
||||||
if !ok {
|
if !ok {
|
||||||
c, err := t.tunnel.Dial(ctx, topic, tunnel.DialMode(tunnel.Multicast))
|
c, err = t.tunnel.Dial(ctx, topic, tunnel.DialMode(tunnel.Multicast))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -31,7 +31,7 @@ func (p *profiler) writeHeap(f *os.File) {
|
|||||||
select {
|
select {
|
||||||
case <-t.C:
|
case <-t.C:
|
||||||
runtime.GC()
|
runtime.GC()
|
||||||
pprof.WriteHeapProfile(f)
|
_ = pprof.WriteHeapProfile(f)
|
||||||
case <-p.exit:
|
case <-p.exit:
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -40,8 +40,9 @@ func (d *dns) Lookup(opts ...QueryOption) ([]Route, error) {
|
|||||||
// check to see if we have the port provided in the service, e.g. go-micro-srv-foo:8000
|
// check to see if we have the port provided in the service, e.g. go-micro-srv-foo:8000
|
||||||
host, port, err := net.SplitHostPort(options.Service)
|
host, port, err := net.SplitHostPort(options.Service)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
|
var ips []string
|
||||||
// lookup the service using A records
|
// lookup the service using A records
|
||||||
ips, err := net.LookupHost(host)
|
ips, err = net.LookupHost(host)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,10 @@ package server
|
|||||||
//go:generate sh -c "protoc -I./health -I../ -I$(go list -f '{{ .Dir }}' -m github.com/unistack-org/micro-proto) --go-micro_out='components=micro|http|server',standalone=false,debug=true,paths=source_relative:./health health/health.proto"
|
//go:generate sh -c "protoc -I./health -I../ -I$(go list -f '{{ .Dir }}' -m github.com/unistack-org/micro-proto) --go-micro_out='components=micro|http|server',standalone=false,debug=true,paths=source_relative:./health health/health.proto"
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|
||||||
|
// import required packages
|
||||||
_ "github.com/unistack-org/micro-proto/api"
|
_ "github.com/unistack-org/micro-proto/api"
|
||||||
|
|
||||||
|
// import required packages
|
||||||
_ "github.com/unistack-org/micro-proto/openapiv2"
|
_ "github.com/unistack-org/micro-proto/openapiv2"
|
||||||
)
|
)
|
||||||
|
@ -6,6 +6,7 @@ package health
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
context "context"
|
context "context"
|
||||||
|
|
||||||
api "github.com/unistack-org/micro/v3/api"
|
api "github.com/unistack-org/micro/v3/api"
|
||||||
codec "github.com/unistack-org/micro/v3/codec"
|
codec "github.com/unistack-org/micro/v3/codec"
|
||||||
)
|
)
|
||||||
|
@ -6,6 +6,7 @@ package health
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
context "context"
|
context "context"
|
||||||
|
|
||||||
api "github.com/unistack-org/micro/v3/api"
|
api "github.com/unistack-org/micro/v3/api"
|
||||||
codec "github.com/unistack-org/micro/v3/codec"
|
codec "github.com/unistack-org/micro/v3/codec"
|
||||||
server "github.com/unistack-org/micro/v3/server"
|
server "github.com/unistack-org/micro/v3/server"
|
||||||
|
@ -190,7 +190,7 @@ func (n *noopServer) Register() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// register the service
|
// register the service
|
||||||
if err := DefaultRegisterFunc(service, config); err != nil {
|
if err = DefaultRegisterFunc(service, config); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,12 +20,8 @@ type TestMessage struct {
|
|||||||
Name string
|
Name string
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
|
||||||
numMsg int = 8
|
|
||||||
)
|
|
||||||
|
|
||||||
func (h *TestHandler) SingleSubHandler(ctx context.Context, msg *codec.Frame) error {
|
func (h *TestHandler) SingleSubHandler(ctx context.Context, msg *codec.Frame) error {
|
||||||
//fmt.Printf("msg %s\n", msg.Data)
|
// fmt.Printf("msg %s\n", msg.Data)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,6 +11,7 @@ import (
|
|||||||
"unicode/utf8"
|
"unicode/utf8"
|
||||||
|
|
||||||
"github.com/unistack-org/micro/v3/broker"
|
"github.com/unistack-org/micro/v3/broker"
|
||||||
|
"github.com/unistack-org/micro/v3/codec"
|
||||||
"github.com/unistack-org/micro/v3/errors"
|
"github.com/unistack-org/micro/v3/errors"
|
||||||
"github.com/unistack-org/micro/v3/logger"
|
"github.com/unistack-org/micro/v3/logger"
|
||||||
"github.com/unistack-org/micro/v3/metadata"
|
"github.com/unistack-org/micro/v3/metadata"
|
||||||
@ -72,7 +73,7 @@ func ValidateSubscriber(sub Subscriber) error {
|
|||||||
if argType.Kind() != reflect.Slice {
|
if argType.Kind() != reflect.Slice {
|
||||||
return fmt.Errorf("subscriber %v dont have required signature %s", name, batchSubSig)
|
return fmt.Errorf("subscriber %v dont have required signature %s", name, batchSubSig)
|
||||||
}
|
}
|
||||||
if strings.Compare(fmt.Sprintf("%s", argType), "[]interface{}") == 0 {
|
if strings.Compare(fmt.Sprintf("%v", argType), "[]interface{}") == 0 {
|
||||||
return fmt.Errorf("subscriber %v dont have required signaure %s", name, batchSubSig)
|
return fmt.Errorf("subscriber %v dont have required signaure %s", name, batchSubSig)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -244,9 +245,9 @@ func (n *noopServer) newBatchSubHandler(sb *subscriber, opts Options) broker.Bat
|
|||||||
}
|
}
|
||||||
|
|
||||||
reqType := handler.reqType
|
reqType := handler.reqType
|
||||||
|
var cf codec.Codec
|
||||||
for _, msg := range msgs {
|
for _, msg := range msgs {
|
||||||
cf, err := n.newCodec(msg.ContentType())
|
cf, err = n.newCodec(msg.ContentType())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -32,8 +32,8 @@ type Options struct {
|
|||||||
Namespace string
|
Namespace string
|
||||||
// Addrs contains store address
|
// Addrs contains store address
|
||||||
Addrs []string
|
Addrs []string
|
||||||
//Wrappers store wrapper that called before actual functions
|
// Wrappers store wrapper that called before actual functions
|
||||||
//Wrappers []Wrapper
|
// Wrappers []Wrapper
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewOptions creates options struct
|
// NewOptions creates options struct
|
||||||
|
@ -5,21 +5,19 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// LogfFunc function used for Logf method
|
// LogfFunc function used for Logf method
|
||||||
//type LogfFunc func(ctx context.Context, level Level, msg string, args ...interface{})
|
// type LogfFunc func(ctx context.Context, level Level, msg string, args ...interface{})
|
||||||
|
// type Wrapper interface {
|
||||||
//type Wrapper interface {
|
// Logf logs message with needed level
|
||||||
// Logf logs message with needed level
|
// Logf(LogfFunc) LogfFunc
|
||||||
//Logf(LogfFunc) LogfFunc
|
// }
|
||||||
//}
|
|
||||||
|
|
||||||
|
// NamespaceStore wrap store with namespace
|
||||||
type NamespaceStore struct {
|
type NamespaceStore struct {
|
||||||
s Store
|
s Store
|
||||||
ns string
|
ns string
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var _ Store = &NamespaceStore{}
|
||||||
_ Store = &NamespaceStore{}
|
|
||||||
)
|
|
||||||
|
|
||||||
func NewNamespaceStore(s Store, ns string) Store {
|
func NewNamespaceStore(s Store, ns string) Store {
|
||||||
return &NamespaceStore{s: s, ns: ns}
|
return &NamespaceStore{s: s, ns: ns}
|
||||||
@ -69,7 +67,7 @@ func (w *NamespaceStore) String() string {
|
|||||||
return w.s.String()
|
return w.s.String()
|
||||||
}
|
}
|
||||||
|
|
||||||
//type NamespaceWrapper struct{}
|
// type NamespaceWrapper struct{}
|
||||||
|
|
||||||
//func NewNamespaceWrapper() Wrapper {
|
//func NewNamespaceWrapper() Wrapper {
|
||||||
// return &NamespaceWrapper{}
|
// return &NamespaceWrapper{}
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
package http
|
package http
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"io"
|
||||||
"net"
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
"testing"
|
"testing"
|
||||||
@ -80,5 +81,4 @@ func TestRoundTripper(t *testing.T) {
|
|||||||
if string(b) != "hello world" {
|
if string(b) != "hello world" {
|
||||||
t.Fatal("response is", string(b))
|
t.Fatal("response is", string(b))
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -8,9 +8,9 @@ import (
|
|||||||
|
|
||||||
// Tree is a trie tree.
|
// Tree is a trie tree.
|
||||||
type Trie struct {
|
type Trie struct {
|
||||||
rmu sync.RWMutex
|
|
||||||
node *node
|
node *node
|
||||||
rcache map[string]*regexp.Regexp
|
rcache map[string]*regexp.Regexp
|
||||||
|
rmu sync.RWMutex
|
||||||
}
|
}
|
||||||
|
|
||||||
// node is a node of tree
|
// node is a node of tree
|
||||||
|
@ -5,6 +5,26 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func TestTrieContentType(t *testing.T) {
|
||||||
|
type handler struct {
|
||||||
|
name string
|
||||||
|
}
|
||||||
|
tr := NewTrie()
|
||||||
|
tr.Insert([]string{"application/json"}, "/v1/create/{id}", &handler{name: "test"})
|
||||||
|
|
||||||
|
h, _, ok := tr.Search("application/json", "/v1/create/12")
|
||||||
|
if !ok {
|
||||||
|
t.Fatalf("must be found error")
|
||||||
|
}
|
||||||
|
if h.(*handler).name != "test" {
|
||||||
|
t.Fatalf("invalid handler %v", h)
|
||||||
|
}
|
||||||
|
_, _, ok = tr.Search("text/xml", "/v1/create/12")
|
||||||
|
if ok {
|
||||||
|
t.Fatalf("must be not found error")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestTrieNoMatchMethod(t *testing.T) {
|
func TestTrieNoMatchMethod(t *testing.T) {
|
||||||
tr := NewTrie()
|
tr := NewTrie()
|
||||||
tr.Insert([]string{http.MethodPut}, "/v1/create/{id}", nil)
|
tr.Insert([]string{http.MethodPut}, "/v1/create/{id}", nil)
|
||||||
|
@ -12,10 +12,9 @@ import (
|
|||||||
// ErrInvalidParam specifies invalid url query params
|
// ErrInvalidParam specifies invalid url query params
|
||||||
var ErrInvalidParam = errors.New("invalid url query param provided")
|
var ErrInvalidParam = errors.New("invalid url query param provided")
|
||||||
|
|
||||||
|
// var timeKind = reflect.ValueOf(time.Time{}).Kind()
|
||||||
var bracketSplitter = regexp.MustCompile(`\[|\]`)
|
var bracketSplitter = regexp.MustCompile(`\[|\]`)
|
||||||
|
|
||||||
//var timeKind = reflect.ValueOf(time.Time{}).Kind()
|
|
||||||
|
|
||||||
type StructField struct {
|
type StructField struct {
|
||||||
Field reflect.StructField
|
Field reflect.StructField
|
||||||
Value reflect.Value
|
Value reflect.Value
|
||||||
@ -149,9 +148,9 @@ func StructFields(src interface{}) ([]StructField, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
switch val.Kind() {
|
switch val.Kind() {
|
||||||
//case timeKind:
|
// case timeKind:
|
||||||
//fmt.Printf("GGG\n")
|
// fmt.Printf("GGG\n")
|
||||||
//fields = append(fields, StructField{Field: fld, Value: val, Path: fld.Name})
|
// fields = append(fields, StructField{Field: fld, Value: val, Path: fld.Name})
|
||||||
case reflect.Struct:
|
case reflect.Struct:
|
||||||
infields, err := StructFields(val.Interface())
|
infields, err := StructFields(val.Interface())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -2,7 +2,7 @@ package reflect
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"net/url"
|
"net/url"
|
||||||
"reflect"
|
rfl "reflect"
|
||||||
rfl "reflect"
|
rfl "reflect"
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
@ -45,10 +45,10 @@ func (b *Basic) Generate(acc *auth.Account, opts ...token.GenerateOption) (*toke
|
|||||||
|
|
||||||
// write to the store
|
// write to the store
|
||||||
key, err := id.New()
|
key, err := id.New()
|
||||||
if err !=nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
err = b.store.Write(context.Background(), fmt.Sprintf("%v%v", StorePrefix, key), bytes, store.WriteTTL(options.Expiry))
|
err = b.store.Write(context.Background(), fmt.Sprintf("%v%v", StorePrefix, key), bytes, store.WriteTTL(options.Expiry))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -13,7 +13,7 @@ import (
|
|||||||
// authClaims to be encoded in the JWT
|
// authClaims to be encoded in the JWT
|
||||||
type authClaims struct {
|
type authClaims struct {
|
||||||
Metadata metadata.Metadata `json:"metadata"`
|
Metadata metadata.Metadata `json:"metadata"`
|
||||||
jwt.StandardClaims
|
jwt.RegisteredClaims
|
||||||
Type string `json:"type"`
|
Type string `json:"type"`
|
||||||
Scopes []string `json:"scopes"`
|
Scopes []string `json:"scopes"`
|
||||||
}
|
}
|
||||||
@ -50,10 +50,10 @@ func (j *JWT) Generate(acc *auth.Account, opts ...token.GenerateOption) (*token.
|
|||||||
// generate the JWT
|
// generate the JWT
|
||||||
expiry := time.Now().Add(options.Expiry)
|
expiry := time.Now().Add(options.Expiry)
|
||||||
t := jwt.NewWithClaims(jwt.SigningMethodRS256, authClaims{
|
t := jwt.NewWithClaims(jwt.SigningMethodRS256, authClaims{
|
||||||
Type: acc.Type, Scopes: acc.Scopes, Metadata: acc.Metadata, StandardClaims: jwt.StandardClaims{
|
Type: acc.Type, Scopes: acc.Scopes, Metadata: acc.Metadata, RegisteredClaims: jwt.RegisteredClaims{
|
||||||
Subject: acc.ID,
|
Subject: acc.ID,
|
||||||
Issuer: acc.Issuer,
|
Issuer: acc.Issuer,
|
||||||
ExpiresAt: expiry.Unix(),
|
ExpiresAt: jwt.NewNumericDate(expiry),
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
tok, err := t.SignedString(key)
|
tok, err := t.SignedString(key)
|
||||||
|
Loading…
Reference in New Issue
Block a user