github.com/graywolf-at-work-2/terraform-vendor@v1.4.5/internal/backend/remote-state/cos/transport.go (about) 1 package cos 2 3 import ( 4 "bytes" 5 "encoding/json" 6 "fmt" 7 "io/ioutil" 8 "log" 9 "net/http" 10 "os" 11 "time" 12 ) 13 14 const REQUEST_CLIENT = "TENCENTCLOUD_API_REQUEST_CLIENT" 15 16 var ReqClient = "Terraform-latest" 17 18 func SetReqClient(name string) { 19 if name == "" { 20 return 21 } 22 ReqClient = name 23 } 24 25 type LogRoundTripper struct { 26 } 27 28 func (me *LogRoundTripper) RoundTrip(request *http.Request) (response *http.Response, errRet error) { 29 30 var inBytes, outBytes []byte 31 32 var start = time.Now() 33 34 defer func() { me.log(inBytes, outBytes, errRet, start) }() 35 36 bodyReader, errRet := request.GetBody() 37 if errRet != nil { 38 return 39 } 40 var headName = "X-TC-Action" 41 42 if envReqClient := os.Getenv(REQUEST_CLIENT); envReqClient != "" { 43 ReqClient = envReqClient 44 } 45 46 request.Header.Set("X-TC-RequestClient", ReqClient) 47 inBytes = []byte(fmt.Sprintf("%s, request: ", request.Header[headName])) 48 requestBody, errRet := ioutil.ReadAll(bodyReader) 49 if errRet != nil { 50 return 51 } 52 inBytes = append(inBytes, requestBody...) 53 54 headName = "X-TC-Region" 55 appendMessage := []byte(fmt.Sprintf( 56 ", (host %+v, region:%+v)", 57 request.Header["Host"], 58 request.Header[headName], 59 )) 60 61 inBytes = append(inBytes, appendMessage...) 62 63 response, errRet = http.DefaultTransport.RoundTrip(request) 64 if errRet != nil { 65 return 66 } 67 outBytes, errRet = ioutil.ReadAll(response.Body) 68 if errRet != nil { 69 return 70 } 71 response.Body = ioutil.NopCloser(bytes.NewBuffer(outBytes)) 72 return 73 } 74 75 func (me *LogRoundTripper) log(in []byte, out []byte, err error, start time.Time) { 76 var buf bytes.Buffer 77 buf.WriteString("######") 78 tag := "[DEBUG]" 79 if err != nil { 80 tag = "[CRITICAL]" 81 } 82 buf.WriteString(tag) 83 if len(in) > 0 { 84 buf.WriteString("tencentcloud-sdk-go: ") 85 buf.Write(in) 86 } 87 if len(out) > 0 { 88 buf.WriteString("; response:") 89 err := json.Compact(&buf, out) 90 if err != nil { 91 out := bytes.Replace(out, 92 []byte("\n"), 93 []byte(""), 94 -1) 95 out = bytes.Replace(out, 96 []byte(" "), 97 []byte(""), 98 -1) 99 buf.Write(out) 100 } 101 } 102 103 if err != nil { 104 buf.WriteString("; error:") 105 buf.WriteString(err.Error()) 106 } 107 108 costFormat := fmt.Sprintf(",cost %s", time.Since(start).String()) 109 buf.WriteString(costFormat) 110 111 log.Println(buf.String()) 112 }