forked from Jarnpher553/gemini
/
transport.go
52 lines (43 loc) · 1.08 KB
/
transport.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package service
import (
"github.com/openzipkin/zipkin-go/model"
"net/http"
"strconv"
)
// ExtractHttp 解包http头为SpanContext
func ExtractHttp(r *http.Request) func() *model.SpanContext {
return func() *model.SpanContext {
var (
traceIDHeader = r.Header.Get("jar-traceid")
spanIDHeader = r.Header.Get("jar-spanid")
parentSpanIDHeader = r.Header.Get("jar-parentid")
sampledHeader = r.Header.Get("jar-sampled")
flagsHeader = r.Header.Get("jar-flags")
)
var sc = &model.SpanContext{}
traceID, err := model.TraceIDFromHex(traceIDHeader)
if err == nil {
sc.TraceID = traceID
}
spanID, err := strconv.ParseUint(spanIDHeader, 16, 64)
if err == nil {
sc.ID = model.ID(spanID)
}
parentID, err := strconv.ParseUint(parentSpanIDHeader, 16, 64)
if err == nil {
pID := model.ID(parentID)
sc.ParentID = &pID
}
if sampledHeader == "0" {
sampled := false
sc.Sampled = &sampled
} else if sampledHeader == "1" {
sampled := true
sc.Sampled = &sampled
}
if flagsHeader == "1" {
sc.Debug = true
}
return sc
}
}