in internal/trace.go [81:190]
func (ctx *TraceContext) marshal2Bean() *TraceTransferBean {
buffer := bytes.NewBufferString("")
switch ctx.TraceType {
case Pub:
bean := ctx.TraceBeans[0]
buffer.WriteString(string(ctx.TraceType))
buffer.WriteRune(contentSplitter)
buffer.WriteString(strconv.FormatInt(ctx.TimeStamp, 10))
buffer.WriteRune(contentSplitter)
buffer.WriteString(ctx.RegionId)
buffer.WriteRune(contentSplitter)
ss := strings.Split(ctx.GroupName, "%")
if len(ss) == 2 {
buffer.WriteString(ss[1])
} else {
buffer.WriteString(ctx.GroupName)
}
buffer.WriteRune(contentSplitter)
ssTopic := strings.Split(bean.Topic, "%")
if len(ssTopic) == 2 {
buffer.WriteString(ssTopic[1])
} else {
buffer.WriteString(bean.Topic)
}
//buffer.WriteString(bean.Topic)
buffer.WriteRune(contentSplitter)
buffer.WriteString(bean.MsgId)
buffer.WriteRune(contentSplitter)
buffer.WriteString(bean.Tags)
buffer.WriteRune(contentSplitter)
buffer.WriteString(bean.Keys)
buffer.WriteRune(contentSplitter)
buffer.WriteString(bean.StoreHost)
buffer.WriteRune(contentSplitter)
buffer.WriteString(strconv.Itoa(bean.BodyLength))
buffer.WriteRune(contentSplitter)
buffer.WriteString(strconv.FormatInt(ctx.CostTime, 10))
buffer.WriteRune(contentSplitter)
buffer.WriteString(strconv.Itoa(int(bean.MsgType)))
buffer.WriteRune(contentSplitter)
buffer.WriteString(bean.OffsetMsgId)
buffer.WriteRune(contentSplitter)
buffer.WriteString(strconv.FormatBool(ctx.IsSuccess))
buffer.WriteRune(contentSplitter)
buffer.WriteString(bean.ClientHost)
buffer.WriteRune(fieldSplitter)
case SubBefore:
for _, bean := range ctx.TraceBeans {
buffer.WriteString(string(ctx.TraceType))
buffer.WriteRune(contentSplitter)
buffer.WriteString(strconv.FormatInt(ctx.TimeStamp, 10))
buffer.WriteRune(contentSplitter)
buffer.WriteString(ctx.RegionId)
buffer.WriteRune(contentSplitter)
ss := strings.Split(ctx.GroupName, "%")
if len(ss) == 2 {
buffer.WriteString(ss[1])
} else {
buffer.WriteString(ctx.GroupName)
}
buffer.WriteRune(contentSplitter)
buffer.WriteString(ctx.RequestId)
buffer.WriteRune(contentSplitter)
buffer.WriteString(bean.MsgId)
buffer.WriteRune(contentSplitter)
buffer.WriteString(strconv.Itoa(bean.RetryTimes))
buffer.WriteRune(contentSplitter)
buffer.WriteString(nullWrap(bean.Keys))
buffer.WriteRune(contentSplitter)
buffer.WriteString(bean.ClientHost)
buffer.WriteRune(fieldSplitter)
}
case SubAfter:
for _, bean := range ctx.TraceBeans {
buffer.WriteString(string(ctx.TraceType))
buffer.WriteRune(contentSplitter)
buffer.WriteString(ctx.RequestId)
buffer.WriteRune(contentSplitter)
buffer.WriteString(bean.MsgId)
buffer.WriteRune(contentSplitter)
buffer.WriteString(strconv.FormatInt(ctx.CostTime, 10))
buffer.WriteRune(contentSplitter)
buffer.WriteString(strconv.FormatBool(ctx.IsSuccess))
buffer.WriteRune(contentSplitter)
buffer.WriteString(nullWrap(bean.Keys))
buffer.WriteRune(contentSplitter)
buffer.WriteString(strconv.Itoa(ctx.ContextCode))
buffer.WriteRune(contentSplitter)
buffer.WriteString(strconv.FormatInt(ctx.TimeStamp, 10))
buffer.WriteRune(contentSplitter)
ss := strings.Split(ctx.GroupName, "%")
if len(ss) == 2 {
buffer.WriteString(ss[1])
} else {
buffer.WriteString(ctx.GroupName)
}
buffer.WriteRune(fieldSplitter)
}
}
transferBean := new(TraceTransferBean)
transferBean.transData = buffer.String()
for _, bean := range ctx.TraceBeans {
transferBean.transKey = append(transferBean.transKey, bean.MsgId)
if len(bean.Keys) > 0 {
transferBean.transKey = append(transferBean.transKey, bean.Keys)
}
}
return transferBean
}