mirror of https://github.com/milvus-io/milvus.git
Support get sdk type by user agent when we can't get sdk version by connection in access log. --------- pr: https://github.com/milvus-io/milvus/pull/30760 Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>pull/31341/head
parent
c36b54cb57
commit
bf2c5def8d
|
@ -32,6 +32,7 @@ import (
|
||||||
"github.com/milvus-io/milvus-proto/go-api/v2/commonpb"
|
"github.com/milvus-io/milvus-proto/go-api/v2/commonpb"
|
||||||
"github.com/milvus-io/milvus-proto/go-api/v2/milvuspb"
|
"github.com/milvus-io/milvus-proto/go-api/v2/milvuspb"
|
||||||
"github.com/milvus-io/milvus/internal/proxy/connection"
|
"github.com/milvus-io/milvus/internal/proxy/connection"
|
||||||
|
"github.com/milvus-io/milvus/pkg/util"
|
||||||
"github.com/milvus-io/milvus/pkg/util/merr"
|
"github.com/milvus-io/milvus/pkg/util/merr"
|
||||||
"github.com/milvus-io/milvus/pkg/util/paramtable"
|
"github.com/milvus-io/milvus/pkg/util/paramtable"
|
||||||
"github.com/milvus-io/milvus/pkg/util/requestutil"
|
"github.com/milvus-io/milvus/pkg/util/requestutil"
|
||||||
|
@ -277,7 +278,25 @@ func getSdkVersion(i *GrpcAccessInfo) string {
|
||||||
return req.GetClientInfo().GetSdkType() + "-" + req.GetClientInfo().GetSdkVersion()
|
return req.GetClientInfo().GetSdkType() + "-" + req.GetClientInfo().GetSdkVersion()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return getSdkVersionByUserAgent(i.ctx)
|
||||||
|
}
|
||||||
|
|
||||||
|
func getSdkVersionByUserAgent(ctx context.Context) string {
|
||||||
|
md, ok := metadata.FromIncomingContext(ctx)
|
||||||
|
if !ok {
|
||||||
return unknownString
|
return unknownString
|
||||||
|
}
|
||||||
|
UserAgent, ok := md[util.HeaderUserAgent]
|
||||||
|
if !ok {
|
||||||
|
return unknownString
|
||||||
|
}
|
||||||
|
|
||||||
|
SdkType, ok := getSdkTypeByUserAgent(UserAgent)
|
||||||
|
if !ok {
|
||||||
|
return unknownString
|
||||||
|
}
|
||||||
|
|
||||||
|
return SdkType + "-" + unknownString
|
||||||
}
|
}
|
||||||
|
|
||||||
func getClusterPrefix(i *GrpcAccessInfo) string {
|
func getClusterPrefix(i *GrpcAccessInfo) string {
|
||||||
|
|
|
@ -126,6 +126,24 @@ func (s *GrpcAccessInfoSuite) TestSdkInfo() {
|
||||||
result := s.info.Get("$sdk_version")
|
result := s.info.Get("$sdk_version")
|
||||||
s.Equal(unknownString, result[0])
|
s.Equal(unknownString, result[0])
|
||||||
|
|
||||||
|
md := metadata.MD{}
|
||||||
|
ctx = metadata.NewIncomingContext(ctx, md)
|
||||||
|
s.info.ctx = ctx
|
||||||
|
result = s.info.Get("$sdk_version")
|
||||||
|
s.Equal(unknownString, result[0])
|
||||||
|
|
||||||
|
md = metadata.MD{util.HeaderUserAgent: []string{"invalid"}}
|
||||||
|
ctx = metadata.NewIncomingContext(ctx, md)
|
||||||
|
s.info.ctx = ctx
|
||||||
|
result = s.info.Get("$sdk_version")
|
||||||
|
s.Equal(unknownString, result[0])
|
||||||
|
|
||||||
|
md = metadata.MD{util.HeaderUserAgent: []string{"grpc-go.test"}}
|
||||||
|
ctx = metadata.NewIncomingContext(ctx, md)
|
||||||
|
s.info.ctx = ctx
|
||||||
|
result = s.info.Get("$sdk_version")
|
||||||
|
s.Equal("Golang"+"-"+unknownString, result[0])
|
||||||
|
|
||||||
s.info.req = &milvuspb.ConnectRequest{
|
s.info.req = &milvuspb.ConnectRequest{
|
||||||
ClientInfo: clientInfo,
|
ClientInfo: clientInfo,
|
||||||
}
|
}
|
||||||
|
@ -133,7 +151,7 @@ func (s *GrpcAccessInfoSuite) TestSdkInfo() {
|
||||||
s.Equal(clientInfo.SdkType+"-"+clientInfo.SdkVersion, result[0])
|
s.Equal(clientInfo.SdkType+"-"+clientInfo.SdkVersion, result[0])
|
||||||
|
|
||||||
identifier := 11111
|
identifier := 11111
|
||||||
md := metadata.MD{util.IdentifierKey: []string{fmt.Sprint(identifier)}}
|
md = metadata.MD{util.IdentifierKey: []string{fmt.Sprint(identifier)}}
|
||||||
ctx = metadata.NewIncomingContext(ctx, md)
|
ctx = metadata.NewIncomingContext(ctx, md)
|
||||||
connection.GetManager().Register(ctx, int64(identifier), clientInfo)
|
connection.GetManager().Register(ctx, int64(identifier), clientInfo)
|
||||||
|
|
||||||
|
|
|
@ -86,3 +86,23 @@ func getCurUserFromContext(ctx context.Context) (string, error) {
|
||||||
username := secrets[0]
|
username := secrets[0]
|
||||||
return username, nil
|
return username, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getSdkTypeByUserAgent(userAgents []string) (string, bool) {
|
||||||
|
if len(userAgents) == 0 {
|
||||||
|
return "", false
|
||||||
|
}
|
||||||
|
|
||||||
|
userAgent := userAgents[0]
|
||||||
|
switch {
|
||||||
|
case strings.HasPrefix(userAgent, "grpc-node-js"):
|
||||||
|
return "nodejs", true
|
||||||
|
case strings.HasPrefix(userAgent, "grpc-python"):
|
||||||
|
return "Python", true
|
||||||
|
case strings.HasPrefix(userAgent, "grpc-go"):
|
||||||
|
return "Golang", true
|
||||||
|
case strings.HasPrefix(userAgent, "grpc-java"):
|
||||||
|
return "Java", true
|
||||||
|
default:
|
||||||
|
return "", false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -26,3 +26,27 @@ func TestJoin(t *testing.T) {
|
||||||
assert.Equal(t, "a/b", join("a", "b"))
|
assert.Equal(t, "a/b", join("a", "b"))
|
||||||
assert.Equal(t, "a/b", join("a/", "b"))
|
assert.Equal(t, "a/b", join("a/", "b"))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestGetSdkTypeByUserAgent(t *testing.T) {
|
||||||
|
_, ok := getSdkTypeByUserAgent([]string{})
|
||||||
|
assert.False(t, ok)
|
||||||
|
|
||||||
|
sdk, ok := getSdkTypeByUserAgent([]string{"grpc-node-js.test"})
|
||||||
|
assert.True(t, ok)
|
||||||
|
assert.Equal(t, "nodejs", sdk)
|
||||||
|
|
||||||
|
sdk, ok = getSdkTypeByUserAgent([]string{"grpc-python.test"})
|
||||||
|
assert.True(t, ok)
|
||||||
|
assert.Equal(t, "Python", sdk)
|
||||||
|
|
||||||
|
sdk, ok = getSdkTypeByUserAgent([]string{"grpc-go.test"})
|
||||||
|
assert.True(t, ok)
|
||||||
|
assert.Equal(t, "Golang", sdk)
|
||||||
|
|
||||||
|
sdk, ok = getSdkTypeByUserAgent([]string{"grpc-java.test"})
|
||||||
|
assert.True(t, ok)
|
||||||
|
assert.Equal(t, "Java", sdk)
|
||||||
|
|
||||||
|
_, ok = getSdkTypeByUserAgent([]string{"invalid_type"})
|
||||||
|
assert.False(t, ok)
|
||||||
|
}
|
||||||
|
|
|
@ -60,6 +60,8 @@ const (
|
||||||
AnyWord = "*"
|
AnyWord = "*"
|
||||||
|
|
||||||
IdentifierKey = "identifier"
|
IdentifierKey = "identifier"
|
||||||
|
|
||||||
|
HeaderUserAgent = "user-agent"
|
||||||
HeaderDBName = "dbName"
|
HeaderDBName = "dbName"
|
||||||
|
|
||||||
RoleConfigPrivileges = "privileges"
|
RoleConfigPrivileges = "privileges"
|
||||||
|
|
Loading…
Reference in New Issue