File: transport.go

package info (click to toggle)
golang-github-scaleway-scaleway-sdk-go 1.0.0~beta12-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 3,000 kB
  • sloc: javascript: 160; sh: 70; makefile: 3
file content (62 lines) | stat: -rw-r--r-- 1,811 bytes parent folder | download
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
53
54
55
56
57
58
59
60
61
62
package scw

import (
	"net/http"
	"net/http/httputil"
	"sync/atomic"

	"github.com/scaleway/scaleway-sdk-go/internal/auth"
	"github.com/scaleway/scaleway-sdk-go/logger"
)

type requestLoggerTransport struct {
	rt http.RoundTripper
	// requestNumber auto increments on each do().
	// This allows easy distinguishing of concurrently performed requests in log.
	requestNumber uint32
}

func (l *requestLoggerTransport) RoundTrip(request *http.Request) (*http.Response, error) {
	currentRequestNumber := atomic.AddUint32(&l.requestNumber, 1)
	// Keep original headers (before anonymization)
	originalHeaders := request.Header

	// Get anonymized headers
	request.Header = auth.AnonymizeTokenHeaders(request.Header.Clone())

	dump, err := httputil.DumpRequestOut(request, true)
	if err != nil {
		logger.Warningf("cannot dump outgoing request: %s", err)
	} else {
		var logString string
		logString += "\n--------------- Scaleway SDK REQUEST %d : ---------------\n"
		logString += "%s\n"
		logString += "---------------------------------------------------------"

		logger.Debugf(logString, currentRequestNumber, dump)
	}

	// Restore original headers before sending the request
	request.Header = originalHeaders
	response, requestError := l.rt.RoundTrip(request)
	if requestError != nil {
		_, isSdkError := requestError.(SdkError)
		if !isSdkError {
			return response, err
		}
	}

	dump, err = httputil.DumpResponse(response, true)
	if err != nil {
		logger.Warningf("cannot dump ingoing response: %s", err)
	} else {
		var logString string
		logString += "\n--------------- Scaleway SDK RESPONSE %d : ---------------\n"
		logString += "%s\n"
		logString += "----------------------------------------------------------"

		logger.Debugf(logString, currentRequestNumber, dump)
	}

	return response, requestError
}