This is an automated email from the ASF dual-hosted git repository.

littlecui pushed a commit to branch master
in repository 
https://gitbox.apache.org/repos/asf/incubator-servicecomb-service-center.git


The following commit(s) were added to refs/heads/master by this push:
     new 268cba2  SCB-332 Wrong json output format in zipkin file collector 
(#278)
268cba2 is described below

commit 268cba27f2ee6ff533ea94de12833c3052b1206d
Author: little-cui <sure_0...@qq.com>
AuthorDate: Wed Feb 7 16:36:05 2018 +0800

    SCB-332 Wrong json output format in zipkin file collector (#278)
    
    * SCB-332 Wrong json output format in zipkin file collector
    
    (cherry picked from commit 3f48ccb)
    
    * SCB-332 Wrong json output format in zipkin file collector
---
 pkg/util/net.go                                | 12 ++++++
 server/infra/registry/registry.go              | 56 ++++++++++++++++++++++----
 server/plugin/infra/registry/etcd/etcd.go      | 36 +++++++++++------
 server/plugin/infra/registry/etcd/tracing.go   |  8 +++-
 server/plugin/infra/tracing/buildin/buildin.go |  4 +-
 server/plugin/infra/tracing/buildin/span.go    | 12 +++---
 6 files changed, 98 insertions(+), 30 deletions(-)

diff --git a/pkg/util/net.go b/pkg/util/net.go
index d73e928..5791b4f 100644
--- a/pkg/util/net.go
+++ b/pkg/util/net.go
@@ -109,3 +109,15 @@ func InetAton(ip string) (ipnr uint32) {
        }
        return
 }
+
+func ParseRequestURL(r *http.Request) string {
+       if len(r.URL.Scheme) > 0 {
+               return r.URL.String()
+       }
+
+       scheme := "https://";
+       if r.TLS == nil {
+               scheme = "http://";
+       }
+       return scheme + r.Host + r.RequestURI
+}
diff --git a/server/infra/registry/registry.go 
b/server/infra/registry/registry.go
index 228b4e4..b87aad1 100644
--- a/server/infra/registry/registry.go
+++ b/server/infra/registry/registry.go
@@ -17,8 +17,8 @@
 package registry
 
 import (
+       "bytes"
        "fmt"
-       "github.com/apache/incubator-servicecomb-service-center/pkg/util"
        "github.com/astaxie/beego"
        "github.com/coreos/etcd/mvcc/mvccpb"
        "golang.org/x/net/context"
@@ -194,12 +194,54 @@ type PluginOp struct {
 }
 
 func (op PluginOp) String() string {
-       return fmt.Sprintf(
-               "{mode: %s, action: %s, key: %s, end: %s, val: %d, prefix: %t, 
prev: %t, lease: %d, keyOnly: %t, countOnly: %t, sort: %s, rev: %d, 
ignoreLease: %t, offset: %d, limit: %d}",
-               op.Mode, op.Action, op.Key, op.EndKey, 
len(util.BytesToStringWithNoCopy(op.Value)),
-               op.Prefix, op.PrevKV, op.Lease, op.KeyOnly, op.CountOnly,
-               op.SortOrder, op.Revision, op.IgnoreLease, op.Offset, op.Limit,
-       )
+       return op.FormatUrlParams()
+}
+
+func (op PluginOp) FormatUrlParams() string {
+       var buf bytes.Buffer
+       buf.WriteString("action=")
+       buf.WriteString(op.Action.String())
+       buf.WriteString("&mode=true")
+       buf.WriteString(op.Mode.String())
+       buf.WriteString("&key=")
+       buf.Write(op.Key)
+       buf.WriteString(fmt.Sprintf("&value=%d", len(op.Value)))
+       if len(op.EndKey) > 0 {
+               buf.WriteString("&end=")
+               buf.Write(op.EndKey)
+       }
+       if op.Prefix {
+               buf.WriteString("&prefix=true")
+       }
+       if op.PrevKV {
+               buf.WriteString("&prev=true")
+       }
+       if op.Lease > 0 {
+               buf.WriteString(fmt.Sprintf("&lease=%d", op.Lease))
+       }
+       if op.KeyOnly {
+               buf.WriteString("&keyOnly=true")
+       }
+       if op.CountOnly {
+               buf.WriteString("&countOnly=true")
+       }
+       if op.SortOrder != SORT_NONE {
+               buf.WriteString("&sort=")
+               buf.WriteString(op.SortOrder.String())
+       }
+       if op.Revision > 0 {
+               buf.WriteString(fmt.Sprintf("&rev=%d", op.Revision))
+       }
+       if op.IgnoreLease {
+               buf.WriteString("&ignoreLease=true")
+       }
+       if op.Offset > 0 {
+               buf.WriteString(fmt.Sprintf("&offset=%d", op.Offset))
+       }
+       if op.Limit > 0 {
+               buf.WriteString(fmt.Sprintf("&limit=%d", op.Limit))
+       }
+       return buf.String()
 }
 
 type Operation func(...PluginOpOption) (op PluginOp)
diff --git a/server/plugin/infra/registry/etcd/etcd.go 
b/server/plugin/infra/registry/etcd/etcd.go
index 7ffe5a6..941aa7c 100644
--- a/server/plugin/infra/registry/etcd/etcd.go
+++ b/server/plugin/infra/registry/etcd/etcd.go
@@ -39,7 +39,10 @@ const (
        CONNECT_MANAGER_SERVER_TIMEOUT = 10
 )
 
-var clientTLSConfig *tls.Config
+var (
+       clientTLSConfig *tls.Config
+       endpoint        string
+)
 
 func init() {
        mgr.RegisterPlugin(mgr.Plugin{mgr.REGISTRY, "etcd", NewRegistry})
@@ -602,6 +605,11 @@ func setResponseAndCallback(pResp 
*registry.PluginResponse, kvs []*mvccpb.KeyVal
        return cb("key information changed", pResp)
 }
 
+func sslEnabled() bool {
+       return core.ServerInfo.Config.SslEnabled &&
+               
strings.Index(strings.ToLower(registry.RegistryConfig().ClusterAddresses), 
"https://";) >= 0
+}
+
 func NewRegistry() mgr.PluginInstance {
        util.Logger().Warnf(nil, "starting service center in proxy mode")
 
@@ -611,18 +619,7 @@ func NewRegistry() mgr.PluginInstance {
        }
        addrs := strings.Split(registry.RegistryConfig().ClusterAddresses, ",")
 
-       if core.ServerInfo.Config.SslEnabled && 
strings.Index(registry.RegistryConfig().ClusterAddresses, "https://";) >= 0 {
-               var err error
-               // go client tls限制,提供身份证书、不认证服务端、不校验CN
-               clientTLSConfig, err = sctls.GetClientTLSConfig()
-               if err != nil {
-                       util.Logger().Error("get etcd client tls config 
failed", err)
-                       inst.err <- err
-                       return inst
-               }
-       }
-
-       endpoints := []string{}
+       endpoints := make([]string, 0, len(addrs))
        for _, addr := range addrs {
                if strings.Index(addr, "://") > 0 {
                        // 如果配置格式为"sr-0=http(s)://IP:Port",则需要分离IP:Port部分
@@ -630,8 +627,21 @@ func NewRegistry() mgr.PluginInstance {
                } else {
                        endpoints = append(endpoints, addr)
                }
+       }
 
+       scheme := "http://";
+       if sslEnabled() {
+               var err error
+               // go client tls限制,提供身份证书、不认证服务端、不校验CN
+               clientTLSConfig, err = sctls.GetClientTLSConfig()
+               if err != nil {
+                       util.Logger().Error("get etcd client tls config 
failed", err)
+                       inst.err <- err
+                       return inst
+               }
+               scheme = "https://";
        }
+       endpoint = scheme + endpoints[0]
 
        inv, err := time.ParseDuration(core.ServerInfo.Config.AutoSyncInterval)
        if err != nil {
diff --git a/server/plugin/infra/registry/etcd/tracing.go 
b/server/plugin/infra/registry/etcd/tracing.go
index 7e628fc..72a38b0 100644
--- a/server/plugin/infra/registry/etcd/tracing.go
+++ b/server/plugin/infra/registry/etcd/tracing.go
@@ -25,7 +25,7 @@ import (
        "net/http"
 )
 
-func TracingBegin(ctx context.Context, operationName string, op 
registry.PluginOp) tracing.Span {
+func ToRequest(op registry.PluginOp) (*http.Request, error) {
        var action string
        switch op.Action {
        case registry.Get:
@@ -35,7 +35,11 @@ func TracingBegin(ctx context.Context, operationName string, 
op registry.PluginO
        case registry.Delete:
                action = http.MethodDelete
        }
-       r, err := http.NewRequest(action, util.BytesToStringWithNoCopy(op.Key), 
nil)
+       return http.NewRequest(action, endpoint+"/?"+op.FormatUrlParams(), nil)
+}
+
+func TracingBegin(ctx context.Context, operationName string, op 
registry.PluginOp) tracing.Span {
+       r, err := ToRequest(op)
        if err != nil {
                util.Logger().Errorf(err, "new backend request failed")
                return nil
diff --git a/server/plugin/infra/tracing/buildin/buildin.go 
b/server/plugin/infra/tracing/buildin/buildin.go
index bfae086..b4616f2 100644
--- a/server/plugin/infra/tracing/buildin/buildin.go
+++ b/server/plugin/infra/tracing/buildin/buildin.go
@@ -63,7 +63,7 @@ func (zp *Zipkin) ServerBegin(operationName string, itf 
tracing.Request) tracing
                span = ZipkinTracer().StartSpan(operationName, 
ext.RPCServerOption(wireContext))
                ext.SpanKindRPCServer.Set(span)
                ext.HTTPMethod.Set(span, r.Method)
-               ext.HTTPUrl.Set(span, r.URL.String())
+               ext.HTTPUrl.Set(span, util.ParseRequestURL(r))
 
                span.SetTag("protocol", "HTTP")
                span.SetTag(zipkincore.HTTP_PATH, r.URL.Path)
@@ -104,7 +104,7 @@ func (zp *Zipkin) ClientBegin(operationName string, itf 
tracing.Request) tracing
                span = ZipkinTracer().StartSpan(operationName, 
opentracing.ChildOf(parentSpan.Context()))
                ext.SpanKindRPCClient.Set(span)
                ext.HTTPMethod.Set(span, r.Method)
-               ext.HTTPUrl.Set(span, r.URL.String())
+               ext.HTTPUrl.Set(span, util.ParseRequestURL(r))
 
                span.SetTag("protocol", "HTTP")
                span.SetTag(zipkincore.HTTP_PATH, r.URL.Path)
diff --git a/server/plugin/infra/tracing/buildin/span.go 
b/server/plugin/infra/tracing/buildin/span.go
index 32c09a7..5b8011d 100644
--- a/server/plugin/infra/tracing/buildin/span.go
+++ b/server/plugin/infra/tracing/buildin/span.go
@@ -24,14 +24,14 @@ import (
 )
 
 type Span struct {
-       TraceID string `thrift:"trace_id,1" db:"trace_id" json:"traceId"`
+       TraceID string `thrift:"traceId,1" db:"traceId" json:"traceId"`
        // unused field # 2
        Name        string        `thrift:"name,3" db:"name" json:"name"`
        ID          string        `thrift:"id,4" db:"id" json:"id"`
-       ParentID    string        `thrift:"parent_id,5" db:"parent_id" 
json:"parentId,omitempty"`
+       ParentID    string        `thrift:"parentId,5" db:"parentId" 
json:"parentId,omitempty"`
        Annotations []*Annotation `thrift:"annotations,6" db:"annotations" 
json:"annotations"`
        // unused field # 7
-       BinaryAnnotations []*BinaryAnnotation `thrift:"binary_annotations,8" 
db:"binary_annotations" json:"binaryAnnotations"`
+       BinaryAnnotations []*BinaryAnnotation `thrift:"binaryAnnotations,8" 
db:"binaryAnnotations" json:"binaryAnnotations"`
        //Debug bool `thrift:"debug,9" db:"debug" json:"debug,omitempty"`
        Timestamp *int64 `thrift:"timestamp,10" db:"timestamp" 
json:"timestamp,omitempty"`
        Duration  *int64 `thrift:"duration,11" db:"duration" 
json:"duration,omitempty"`
@@ -41,20 +41,20 @@ type Span struct {
 type Annotation struct {
        Timestamp int64     `thrift:"timestamp,1" db:"timestamp" 
json:"timestamp"`
        Value     string    `thrift:"value,2" db:"value" json:"value"`
-       Host      *Endpoint `thrift:"host,3" db:"host" json:"host,omitempty"`
+       Host      *Endpoint `thrift:"endpoint,3" db:"endpoint" 
json:"endpoint,omitempty"`
 }
 
 type BinaryAnnotation struct {
        Key   string `thrift:"key,1" db:"key" json:"key"`
        Value string `thrift:"value,2" db:"value" json:"value"`
        //AnnotationType AnnotationType `thrift:"annotation_type,3" 
db:"annotation_type" json:"annotation_type"`
-       //Host *Endpoint `thrift:"host,4" db:"host" json:"host,omitempty"`
+       //Host *Endpoint `thrift:"endpoint,4" db:"endpoint" 
json:"endpoint,omitempty"`
 }
 
 type Endpoint struct {
        Ipv4        string `thrift:"ipv4,1" db:"ipv4" json:"ipv4"`
        Port        int16  `thrift:"port,2" db:"port" json:"port"`
-       ServiceName string `thrift:"service_name,3" db:"service_name" 
json:"serviceName"`
+       ServiceName string `thrift:"serviceName,3" db:"serviceName" 
json:"serviceName"`
        Ipv6        []byte `thrift:"ipv6,4" db:"ipv6" json:"ipv6,omitempty"`
 }
 

-- 
To stop receiving notification emails like this one, please contact
little...@apache.org.

Reply via email to