Skip to content
Permalink
Browse files

fix #99

  • Loading branch information...
sunface committed May 15, 2019
1 parent 6199254 commit f5e323c5b38c10abcbfe2ca533be1f947f1192f1
Showing with 22 additions and 33 deletions.
  1. +22 −33 web/internal/application/req_trace.go
@@ -219,7 +219,6 @@ func QueryTrace(c echo.Context) error {
return err
}

// 把span按照请求链路的顺序排序,例如A、B、C三个服务,请求顺序A -> B -> C,那么span的排列顺序也应该是span(A) -> span(B) -> span(C)
spans.sort()

// 将span和events组合成链路tree
@@ -336,7 +335,13 @@ func (spans *traceSpans) load(tid string) error {
return nil
}

// span排序
// 1. 找到没有父节点的节点,放在最前面,然后按照时间排序
// 2. 有父节点的节点,放在父节点后面

func (spans *traceSpans) sort() {
nspans := make(traceSpans, 0)
tmpSpans := make(traceSpans, 0)
bucket := make(map[int64]int)
for i, span := range *spans {
bucket[span.id] = i
@@ -346,38 +351,22 @@ func (spans *traceSpans) sort() {
// span之间可能存在以下几种关系
// 通过父子串联
// 若不存在父子关系(离散服务的span,特殊情况),则通过时间排序(不同服务器时间不同,因此不够可靠)?
// noParents := make([]int, 0)
// for i, span := range *spans {
// // 若没有父节点,则加入noParents
// _, ok := bucket[span.pid]
// if !ok {
// noParents = append(noParents, i)
// }
// }

// var nspans traceSpans
// if len(noParents) == 1 {
// //只有一个节点没有父节点,证明可以串起来
// nspans = append(nspans, (*spans)[noParents[0]])
// for {
// // fmt.Println("sort1111:", len(nspans), len(*spans))
// if len(nspans) >= len(*spans) {
// break
// }

// currentSpan := nspans[len(nspans)-1]
// for _, span := range *spans {
// if span.pid == currentSpan.id {
// nspans = append(nspans, span)
// break
// }
// }
// }
// *spans = nspans
// } else {
// 多个父节点,通过时间排序
sort.Sort(spans)
// }
for _, span := range *spans {
_, ok := bucket[span.pid]
if !ok { // 无父节点
nspans = append(nspans, span)
} else { // 有父节点
tmpSpans = append(tmpSpans, span)
}
}

// 对父节点按照时间排序
sort.Sort(nspans)

// 把子节点添加到span列表中
nspans = append(nspans, tmpSpans...)

spans = &nspans
}

//

0 comments on commit f5e323c

Please sign in to comment.
You can’t perform that action at this time.