| 12345678910111213141516171819202122232425262728293031323334353637383940 |
- package trace
- import (
- "context"
- "fmt"
- "net/http"
- "time"
- "git.shuncheng.lu/bigthing/gocommon/pkg/internal/util"
- "github.com/SkyAPM/go2sky/propagation"
- v3 "github.com/SkyAPM/go2sky/reporter/grpc/language-agent"
- )
- func HttpClientTrace(ctx context.Context, client *http.Client, request *http.Request, serverName string) (*http.Response, error) {
- var _url = request.URL.String()
- reqSpan, err := GinNewExitSpan(ctx, fmt.Sprintf("%s:%s", serverName, request.URL.Path), serverName, func(header string) error {
- request.Header.Set(propagation.Header, header)
- return nil
- })
- if reqSpan == nil || err != nil {
- return client.Do(request)
- }
- startTime := time.Now()
- defer func() {
- reqSpan.Tag("spend", util.SubTimeToSeconds(startTime, time.Now()))
- reqSpan.End()
- }()
- reqSpan.SetComponent(HttpClientComponentID)
- reqSpan.SetSpanLayer(v3.SpanLayer_RPCFramework)
- reqSpan.Tag("http.method", request.Method)
- reqSpan.Tag("http.url", _url)
- response, err := client.Do(request)
- if err != nil {
- reqSpan.Error(time.Now(), "Error", fmt.Sprintf("%v", err))
- return nil, err
- }
- reqSpan.Tag("http.status", response.Status)
- return response, err
- }
|