func()

in hugegraph-client-go/hgtransport/logger.go [175:250]


func (l *CurlLogger) LogRoundTrip(req *http.Request, res *http.Response, err error, start time.Time, dur time.Duration) error {
    var b bytes.Buffer

    var query string
    qvalues := url.Values{}
    for k, v := range req.URL.Query() {
        if k == "pretty" {
            continue
        }
        for _, qv := range v {
            qvalues.Add(k, qv)
        }
    }
    if len(qvalues) > 0 {
        query = qvalues.Encode()
    }

    b.WriteString(`curl`)
    if req.Method == "HEAD" {
        b.WriteString(" --head")
    } else {
        fmt.Fprintf(&b, " -X %s", req.Method)
    }

    if len(req.Header) > 0 {
        for k, vv := range req.Header {
            if k == "Authorization" || k == "User-Agent" {
                continue
            }
            v := strings.Join(vv, ",")
            b.WriteString(fmt.Sprintf(" -H '%s: %s'", k, v))
        }
    }

    b.WriteString(" 'http://localhost:9200")
    b.WriteString(req.URL.Path)
    b.WriteString("?pretty")
    if query != "" {
        fmt.Fprintf(&b, "&%s", query)
    }
    b.WriteString("'")

    if req != nil && req.Body != nil && req.Body != http.NoBody {
        var buf bytes.Buffer
        buf.ReadFrom(req.Body)

        b.Grow(buf.Len())
        b.WriteString(" -d \\\n'")
        json.Indent(&b, buf.Bytes(), "", " ")
        b.WriteString("'")
    }

    b.WriteRune('\n')

    var status string
    status = res.Status

    fmt.Fprintf(&b, "# => %s [%s] %s\n", start.UTC().Format(time.RFC3339), status, dur.Truncate(time.Millisecond))
    if l.ResponseBodyEnabled() && res != nil && res.Body != nil && res.Body != http.NoBody {
        var buf bytes.Buffer
        buf.ReadFrom(res.Body)

        b.Grow(buf.Len())
        b.WriteString("# ")
        json.Indent(&b, buf.Bytes(), "# ", " ")
    }

    b.WriteString("\n")
    if l.ResponseBodyEnabled() && res != nil && res.Body != nil && res.Body != http.NoBody {
        b.WriteString("\n")
    }

    b.WriteTo(l.Output)

    return nil
}