little-cui closed pull request #278: SCB-332 Wrong json output format in zipkin 
file collector
URL: https://github.com/apache/incubator-servicecomb-service-center/pull/278
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/pkg/util/net.go b/pkg/util/net.go
index d73e928c..5791b4f6 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 228b4e4a..b87aad18 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 7ffe5a6b..941aa7cd 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 7e628fc8..72a38b08 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 bfae0863..b4616f21 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 32c09a78..5b8011d9 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"`
 }
 


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


With regards,
Apache Git Services

Reply via email to