From 9ff8a43959ef567c5bdf2e2f8ab8cccdbd39f605 Mon Sep 17 00:00:00 2001 From: Ed Lynes Date: Wed, 27 May 2020 09:03:12 -0400 Subject: [PATCH] place lock arounf http request creation. add http logging to papi --- client-v1/client.go | 7 +++++++ configdns-v2/authorities.go | 5 +++++ papi-v1/activations.go | 35 +++++++++++++++++++++++++++++++++++ papi-v1/available.go | 9 +++++++++ papi-v1/client_settings.go | 13 ++++++++++++- papi-v1/contracts.go | 9 +++++++++ papi-v1/cpcodes.go | 21 +++++++++++++++++++++ papi-v1/custombehaviors.go | 13 +++++++++++++ papi-v1/customoverrides.go | 12 ++++++++++++ papi-v1/edgehostnames.go | 14 ++++++++++++++ papi-v1/groups.go | 5 +++++ papi-v1/hostnames.go | 9 +++++++++ papi-v1/init.go | 2 ++ papi-v1/products.go | 5 +++++ papi-v1/properties.go | 26 ++++++++++++++++++++++++++ papi-v1/ruleformats.go | 9 +++++++++ papi-v1/rules.go | 17 +++++++++++++++++ papi-v1/search.go | 8 ++++++++ papi-v1/versions.go | 21 +++++++++++++++++++++ 19 files changed, 239 insertions(+), 1 deletion(-) diff --git a/client-v1/client.go b/client-v1/client.go index 188233ad..3dc56cba 100644 --- a/client-v1/client.go +++ b/client-v1/client.go @@ -15,6 +15,7 @@ import ( "path/filepath" "runtime" "strings" + "sync" ) var ( @@ -23,6 +24,8 @@ var ( UserAgent = "Akamai-Open-Edgegrid-golang/" + libraryVersion + " golang/" + strings.TrimPrefix(runtime.Version(), "go") // Client is the *http.Client to use Client = http.DefaultClient + + reqLock sync.Mutex ) // NewRequest creates an HTTP request that can be sent to Akamai APIs. A relative URL can be provided in path, which will be resolved to the @@ -33,6 +36,9 @@ func NewRequest(config edgegrid.Config, method, path string, body io.Reader) (*h err error ) + reqLock.Lock() + defer reqLock.Unlock() + if strings.HasPrefix(config.Host, "https://") { baseURL, err = url.Parse(config.Host) } else { @@ -70,6 +76,7 @@ func NewRequest(config edgegrid.Config, method, path string, body io.Reader) (*h func NewJSONRequest(config edgegrid.Config, method, path string, body interface{}) (*http.Request, error) { var req *http.Request var err error + if body != nil { jsonBody, err := jsonhooks.Marshal(body) if err != nil { diff --git a/configdns-v2/authorities.go b/configdns-v2/authorities.go index 2f393275..08ef4a75 100644 --- a/configdns-v2/authorities.go +++ b/configdns-v2/authorities.go @@ -2,6 +2,7 @@ package dnsv2 import ( "github.com/akamai/AkamaiOPEN-edgegrid-golang/client-v1" + edge "github.com/akamai/AkamaiOPEN-edgegrid-golang/edgegrid" ) type AuthorityResponse struct { @@ -29,11 +30,15 @@ func GetAuthorities(contractId string) (*AuthorityResponse, error) { return nil, err } + edge.PrintHttpRequest(req, true) + res, err := client.Do(Config, req) if err != nil { return nil, err } + edge.PrintHttpResponse(res, true) + if client.IsError(res) && res.StatusCode != 404 { return nil, client.NewAPIError(res) } else if res.StatusCode == 404 { diff --git a/papi-v1/activations.go b/papi-v1/activations.go index 32c55755..7d702a78 100644 --- a/papi-v1/activations.go +++ b/papi-v1/activations.go @@ -7,6 +7,8 @@ import ( "time" "github.com/akamai/AkamaiOPEN-edgegrid-golang/client-v1" + edge "github.com/akamai/AkamaiOPEN-edgegrid-golang/edgegrid" + ) // Activations is a collection of property activations @@ -49,12 +51,16 @@ func (activations *Activations) GetActivations(property *Property) error { return err } + edge.PrintHttpRequest(req, true) + res, err := client.Do(Config, req) if err != nil { return err } + edge.PrintHttpResponse(res, true) + if client.IsError(res) { return client.NewAPIError(res) } @@ -169,11 +175,15 @@ func (activation *Activation) GetActivation(property *Property) (time.Duration, return 0, err } + edge.PrintHttpRequest(req, true) + res, err := client.Do(Config, req) if err != nil { return 0, err } + edge.PrintHttpResponse(res, true) + if client.IsError(res) { return 0, client.NewAPIError(res) } @@ -236,8 +246,16 @@ func (activation *Activation) Save(property *Property, acknowledgeWarnings bool) return err } + edge.PrintHttpRequest(req, true) + res, err := client.Do(Config, req) + if err != nil { + return err + } + + edge.PrintHttpResponse(res, true) + if client.IsError(res) && (!acknowledgeWarnings || (acknowledgeWarnings && res.StatusCode != 400)) { return client.NewAPIError(res) } @@ -294,8 +312,17 @@ func (activation *Activation) Save(property *Property, acknowledgeWarnings bool) return err } + edge.PrintHttpRequest(req, true) + res, err = client.Do(Config, req) + if err != nil { + return err + } + + + edge.PrintHttpResponse(res, true) + activations := NewActivations() if err := client.BodyJSON(res, activations); err != nil { return err @@ -395,8 +422,16 @@ func (activation *Activation) Cancel(property *Property) error { return err } + edge.PrintHttpRequest(req, true) + res, err := client.Do(Config, req) + if err != nil { + return err + } + + edge.PrintHttpResponse(res, true) + if client.IsError(res) { return client.NewAPIError(res) } diff --git a/papi-v1/available.go b/papi-v1/available.go index 01f14fd4..d63bb8af 100644 --- a/papi-v1/available.go +++ b/papi-v1/available.go @@ -4,6 +4,7 @@ import ( "fmt" "io/ioutil" + edge "github.com/akamai/AkamaiOPEN-edgegrid-golang/edgegrid" "github.com/akamai/AkamaiOPEN-edgegrid-golang/client-v1" "github.com/xeipuuv/gojsonschema" ) @@ -52,11 +53,15 @@ func (availableCriteria *AvailableCriteria) GetAvailableCriteria(property *Prope return err } + edge.PrintHttpRequest(req, true) + res, err := client.Do(Config, req) if err != nil { return err } + edge.PrintHttpResponse(res, true) + if client.IsError(res) { return client.NewAPIError(res) } @@ -125,11 +130,15 @@ func (availableBehaviors *AvailableBehaviors) GetAvailableBehaviors(property *Pr return err } + edge.PrintHttpRequest(req, true) + res, err := client.Do(Config, req) if err != nil { return err } + edge.PrintHttpResponse(res, true) + if client.IsError(res) { return client.NewAPIError(res) } diff --git a/papi-v1/client_settings.go b/papi-v1/client_settings.go index e67a4bfd..77475ccf 100644 --- a/papi-v1/client_settings.go +++ b/papi-v1/client_settings.go @@ -1,6 +1,9 @@ package papi -import "github.com/akamai/AkamaiOPEN-edgegrid-golang/client-v1" +import ( + "github.com/akamai/AkamaiOPEN-edgegrid-golang/client-v1" + edge "github.com/akamai/AkamaiOPEN-edgegrid-golang/edgegrid" +) // ClientSettings represents the PAPI client settings resource type ClientSettings struct { @@ -26,11 +29,15 @@ func (clientSettings *ClientSettings) GetClientSettings() error { return err } + edge.PrintHttpRequest(req, true) + res, err := client.Do(Config, req) if err != nil { return err } + edge.PrintHttpResponse(res, true) + if client.IsError(res) { return client.NewAPIError(res) } @@ -57,11 +64,15 @@ func (clientSettings *ClientSettings) Save() error { return err } + edge.PrintHttpRequest(req, true) + res, err := client.Do(Config, req) if err != nil { return err } + edge.PrintHttpResponse(res, true) + if client.IsError(res) { return client.NewAPIError(res) } diff --git a/papi-v1/contracts.go b/papi-v1/contracts.go index 97c7089f..626faf63 100644 --- a/papi-v1/contracts.go +++ b/papi-v1/contracts.go @@ -4,6 +4,7 @@ import ( "encoding/json" "fmt" + edge "github.com/akamai/AkamaiOPEN-edgegrid-golang/edgegrid" "github.com/akamai/AkamaiOPEN-edgegrid-golang/client-v1" "github.com/patrickmn/go-cache" ) @@ -64,11 +65,15 @@ func (contracts *Contracts) GetContracts() error { return err } + edge.PrintHttpRequest(req, true) + res, err := client.Do(Config, req) if err != nil { return err } + edge.PrintHttpResponse(res, true) + if client.IsError(res) { return client.NewAPIError(res) } @@ -155,11 +160,15 @@ func (contract *Contract) GetProducts() (*Products, error) { return nil, err } + edge.PrintHttpRequest(req, true) + res, err := client.Do(Config, req) if err != nil { return nil, err } + edge.PrintHttpResponse(res, true) + if client.IsError(res) { return nil, client.NewAPIError(res) } diff --git a/papi-v1/cpcodes.go b/papi-v1/cpcodes.go index 73c86d4f..afb6bc92 100644 --- a/papi-v1/cpcodes.go +++ b/papi-v1/cpcodes.go @@ -8,6 +8,7 @@ import ( "strings" "time" + edge "github.com/akamai/AkamaiOPEN-edgegrid-golang/edgegrid" "github.com/akamai/AkamaiOPEN-edgegrid-golang/client-v1" "github.com/patrickmn/go-cache" ) @@ -97,11 +98,15 @@ func (cpcodes *CpCodes) GetCpCodes() error { return err } + edge.PrintHttpRequest(req, true) + res, err := client.Do(Config, req) if err != nil { return err } + edge.PrintHttpResponse(res, true) + if client.IsError(res) { return client.NewAPIError(res) } @@ -195,8 +200,16 @@ func (cpcode *CpCode) GetCpCode() error { return err } + edge.PrintHttpRequest(req, true) + res, err := client.Do(Config, req) + if err != nil { + return err + } + + edge.PrintHttpResponse(res, true) + if client.IsError(res) { return client.NewAPIError(res) } @@ -252,11 +265,15 @@ func (cpcode *CpCode) Save() error { return err } + edge.PrintHttpRequest(req, true) + res, err := client.Do(Config, req) if err != nil { return err } + edge.PrintHttpResponse(res, true) + if client.IsError(res) { return client.NewAPIError(res) } @@ -276,11 +293,15 @@ func (cpcode *CpCode) Save() error { return err } + edge.PrintHttpRequest(req, true) + res, err = client.Do(Config, req) if err != nil { return err } + edge.PrintHttpResponse(res, true) + if client.IsError(res) { return client.NewAPIError(res) } diff --git a/papi-v1/custombehaviors.go b/papi-v1/custombehaviors.go index 06df6f86..042c75a4 100644 --- a/papi-v1/custombehaviors.go +++ b/papi-v1/custombehaviors.go @@ -4,6 +4,7 @@ import ( "fmt" "time" + edge "github.com/akamai/AkamaiOPEN-edgegrid-golang/edgegrid" "github.com/akamai/AkamaiOPEN-edgegrid-golang/client-v1" ) @@ -56,11 +57,15 @@ func (behaviors *CustomBehaviors) GetCustomBehaviors() error { return err } + edge.PrintHttpRequest(req, true) + res, err := client.Do(Config, req) if err != nil { return err } + edge.PrintHttpResponse(res, true) + if client.IsError(res) { return client.NewAPIError(res) } @@ -119,8 +124,16 @@ func (behavior *CustomBehavior) GetCustomBehavior() error { return err } + edge.PrintHttpRequest(req, true) + res, err := client.Do(Config, req) + if err != nil { + return err + } + + edge.PrintHttpResponse(res, true) + if client.IsError(res) { return client.NewAPIError(res) } diff --git a/papi-v1/customoverrides.go b/papi-v1/customoverrides.go index 014c0d81..6fe1a572 100644 --- a/papi-v1/customoverrides.go +++ b/papi-v1/customoverrides.go @@ -4,6 +4,7 @@ import ( "fmt" "time" + edge "github.com/akamai/AkamaiOPEN-edgegrid-golang/edgegrid" "github.com/akamai/AkamaiOPEN-edgegrid-golang/client-v1" ) @@ -58,11 +59,15 @@ func (overrides *CustomOverrides) GetCustomOverrides() error { return err } + edge.PrintHttpRequest(req, true) + res, err := client.Do(Config, req) if err != nil { return err } + edge.PrintHttpResponse(res, true) + if client.IsError(res) { return client.NewAPIError(res) } @@ -121,7 +126,14 @@ func (override *CustomOverride) GetCustomOverride() error { return err } + edge.PrintHttpRequest(req, true) + res, err := client.Do(Config, req) + if err != nil { + return err + } + + edge.PrintHttpResponse(res, true) if client.IsError(res) { return client.NewAPIError(res) diff --git a/papi-v1/edgehostnames.go b/papi-v1/edgehostnames.go index 4c5f4f7a..f8e531a0 100644 --- a/papi-v1/edgehostnames.go +++ b/papi-v1/edgehostnames.go @@ -8,6 +8,7 @@ import ( "strings" "time" + edge "github.com/akamai/AkamaiOPEN-edgegrid-golang/edgegrid" "github.com/akamai/AkamaiOPEN-edgegrid-golang/client-v1" "github.com/patrickmn/go-cache" ) @@ -96,11 +97,15 @@ func (edgeHostnames *EdgeHostnames) GetEdgeHostnames(contract *Contract, group * return err } + edge.PrintHttpRequest(req, true) + res, err := client.Do(Config, req) if err != nil { return err } + edge.PrintHttpResponse(res, true) + if client.IsError(res) { return client.NewAPIError(res) } @@ -210,11 +215,15 @@ func (edgeHostname *EdgeHostname) GetEdgeHostname(options string) error { return err } + edge.PrintHttpRequest(req, true) + res, err := client.Do(Config, req) if err != nil { return err } + edge.PrintHttpResponse(res, true) + if client.IsError(res) { if res.StatusCode == 404 { // Check collection for current hostname @@ -290,11 +299,16 @@ func (edgeHostname *EdgeHostname) Save(options string) error { return err } + + edge.PrintHttpRequest(req, true) + res, err := client.Do(Config, req) if err != nil { return err } + edge.PrintHttpResponse(res, true) + if client.IsError(res) { return client.NewAPIError(res) } diff --git a/papi-v1/groups.go b/papi-v1/groups.go index ccdd3eeb..8b1b9faa 100644 --- a/papi-v1/groups.go +++ b/papi-v1/groups.go @@ -4,6 +4,7 @@ import ( "encoding/json" "fmt" + edge "github.com/akamai/AkamaiOPEN-edgegrid-golang/edgegrid" "github.com/akamai/AkamaiOPEN-edgegrid-golang/client-v1" "github.com/patrickmn/go-cache" ) @@ -61,11 +62,15 @@ func (groups *Groups) GetGroups() error { return err } + edge.PrintHttpRequest(req, true) + res, err := client.Do(Config, req) if err != nil { return err } + edge.PrintHttpResponse(res, true) + if client.IsError(res) { return client.NewAPIError(res) } diff --git a/papi-v1/hostnames.go b/papi-v1/hostnames.go index 5c70ad13..900cff07 100644 --- a/papi-v1/hostnames.go +++ b/papi-v1/hostnames.go @@ -3,6 +3,7 @@ package papi import ( "fmt" + edge "github.com/akamai/AkamaiOPEN-edgegrid-golang/edgegrid" "github.com/akamai/AkamaiOPEN-edgegrid-golang/client-v1" ) @@ -84,11 +85,15 @@ func (hostnames *Hostnames) GetHostnames(version *Version) error { return err } + edge.PrintHttpRequest(req, true) + res, err := client.Do(Config, req) if err != nil { return err } + edge.PrintHttpResponse(res, true) + if client.IsError(res) { return client.NewAPIError(res) } @@ -125,11 +130,15 @@ func (hostnames *Hostnames) Save() error { return err } + edge.PrintHttpRequest(req, true) + res, err := client.Do(Config, req) if err != nil { return err } + edge.PrintHttpResponse(res, true) + if client.IsError(res) { return client.NewAPIError(res) } diff --git a/papi-v1/init.go b/papi-v1/init.go index 85299cb5..28c858d5 100644 --- a/papi-v1/init.go +++ b/papi-v1/init.go @@ -5,5 +5,7 @@ import "github.com/akamai/AkamaiOPEN-edgegrid-golang/edgegrid" // Init sets the PAPI edgegrid Config func Init(config edgegrid.Config) { + Config = config + edgegrid.SetupLogging() } diff --git a/papi-v1/products.go b/papi-v1/products.go index d94a96ce..a210242e 100644 --- a/papi-v1/products.go +++ b/papi-v1/products.go @@ -4,6 +4,7 @@ import ( "encoding/json" "fmt" + edge "github.com/akamai/AkamaiOPEN-edgegrid-golang/edgegrid" "github.com/akamai/AkamaiOPEN-edgegrid-golang/client-v1" "github.com/patrickmn/go-cache" ) @@ -65,11 +66,15 @@ func (products *Products) GetProducts(contract *Contract) error { return err } + edge.PrintHttpRequest(req, true) + res, err := client.Do(Config, req) if err != nil { return err } + edge.PrintHttpResponse(res, true) + if client.IsError(res) { return client.NewAPIError(res) } diff --git a/papi-v1/properties.go b/papi-v1/properties.go index d730f3c8..362999de 100644 --- a/papi-v1/properties.go +++ b/papi-v1/properties.go @@ -4,6 +4,8 @@ import ( "fmt" "github.com/akamai/AkamaiOPEN-edgegrid-golang/client-v1" + edge "github.com/akamai/AkamaiOPEN-edgegrid-golang/edgegrid" + ) // Properties is a collection of PAPI Property resources @@ -65,8 +67,16 @@ func (properties *Properties) GetProperties(contract *Contract, group *Group) er return err } + edge.PrintHttpRequest(req, true) + res, err := client.Do(Config, req) + if err != nil { + return nil + } + + edge.PrintHttpResponse(res, true) + if client.IsError(res) { return client.NewAPIError(res) } @@ -186,11 +196,15 @@ func (property *Property) GetProperty() error { return err } + edge.PrintHttpRequest(req, true) + res, err := client.Do(Config, req) if err != nil { return err } + edge.PrintHttpResponse(res, true) + if client.IsError(res) { return client.NewAPIError(res) } @@ -370,11 +384,15 @@ func (property *Property) Save() error { return err } + edge.PrintHttpRequest(req, true) + res, err := client.Do(Config, req) if err != nil { return err } + edge.PrintHttpResponse(res, true) + if client.IsError(res) { return client.NewAPIError(res) } @@ -394,11 +412,15 @@ func (property *Property) Save() error { return err } + edge.PrintHttpRequest(req, true) + res, err = client.Do(Config, req) if err != nil { return err } + edge.PrintHttpResponse(res, true) + if client.IsError(res) { return client.NewAPIError(res) } @@ -456,11 +478,15 @@ func (property *Property) Delete() error { return err } + edge.PrintHttpRequest(req, true) + res, err := client.Do(Config, req) if err != nil { return err } + edge.PrintHttpResponse(res, true) + if client.IsError(res) { return client.NewAPIError(res) } diff --git a/papi-v1/ruleformats.go b/papi-v1/ruleformats.go index 67873820..b5a5d0ec 100644 --- a/papi-v1/ruleformats.go +++ b/papi-v1/ruleformats.go @@ -5,6 +5,7 @@ import ( "io/ioutil" "sort" + edge "github.com/akamai/AkamaiOPEN-edgegrid-golang/edgegrid" "github.com/akamai/AkamaiOPEN-edgegrid-golang/client-v1" "github.com/xeipuuv/gojsonschema" ) @@ -40,11 +41,15 @@ func (ruleFormats *RuleFormats) GetRuleFormats() error { return err } + edge.PrintHttpRequest(req, true) + res, err := client.Do(Config, req) if err != nil { return err } + edge.PrintHttpResponse(res, true) + if client.IsError(res) { return client.NewAPIError(res) } @@ -88,11 +93,15 @@ func (ruleFormats *RuleFormats) GetSchema(product string, ruleFormat string) (*g return nil, err } + edge.PrintHttpRequest(req, true) + res, err := client.Do(Config, req) if err != nil { return nil, err } + edge.PrintHttpResponse(res, true) + if client.IsError(res) { return nil, client.NewAPIError(res) } diff --git a/papi-v1/rules.go b/papi-v1/rules.go index ab756aa7..1229c214 100644 --- a/papi-v1/rules.go +++ b/papi-v1/rules.go @@ -4,6 +4,7 @@ import ( "fmt" "strings" + edge "github.com/akamai/AkamaiOPEN-edgegrid-golang/edgegrid" "github.com/akamai/AkamaiOPEN-edgegrid-golang/client-v1" ) @@ -59,11 +60,15 @@ func (rules *Rules) GetRules(property *Property) error { return err } + edge.PrintHttpRequest(req, true) + res, err := client.Do(Config, req) if err != nil { return err } + edge.PrintHttpResponse(res, true) + if client.IsError(res) { return client.NewAPIError(res) } @@ -95,11 +100,15 @@ func (rules *Rules) GetRulesDigest(property *Property) (string, error) { return "", err } + edge.PrintHttpRequest(req, true) + res, err := client.Do(Config, req) if err != nil { return "", err } + edge.PrintHttpResponse(res, true) + if client.IsError(res) { return "", client.NewAPIError(res) } @@ -128,11 +137,15 @@ func (rules *Rules) Save() error { return err } + edge.PrintHttpRequest(req, true) + res, err := client.Do(Config, req) if err != nil { return err } + edge.PrintHttpResponse(res, true) + if client.IsError(res) { return client.NewAPIError(res) } @@ -166,6 +179,8 @@ func (rules *Rules) Freeze(format string) error { return err } + edge.PrintHttpRequest(req, true) + req.Header.Set("Content-Type", fmt.Sprintf("application/vnd.akamai.papirules.%s+json", format)) res, err := client.Do(Config, req) @@ -173,6 +188,8 @@ func (rules *Rules) Freeze(format string) error { return err } + edge.PrintHttpResponse(res, true) + if client.IsError(res) { return client.NewAPIError(res) } diff --git a/papi-v1/search.go b/papi-v1/search.go index 90e5a4bc..1d111b4c 100644 --- a/papi-v1/search.go +++ b/papi-v1/search.go @@ -3,6 +3,7 @@ package papi import ( "time" + edge "github.com/akamai/AkamaiOPEN-edgegrid-golang/edgegrid" "github.com/akamai/AkamaiOPEN-edgegrid-golang/client-v1" ) @@ -48,7 +49,14 @@ func Search(searchBy SearchKey, propertyName string) (*SearchResult, error) { return nil, err } + edge.PrintHttpRequest(req, true) + res, err := client.Do(Config, req) + if err != nil { + return nil, err + } + + edge.PrintHttpResponse(res, true) if client.IsError(res) { return nil, client.NewAPIError(res) diff --git a/papi-v1/versions.go b/papi-v1/versions.go index 836cca44..99256b61 100644 --- a/papi-v1/versions.go +++ b/papi-v1/versions.go @@ -3,6 +3,7 @@ package papi import ( "errors" "fmt" + edge "github.com/akamai/AkamaiOPEN-edgegrid-golang/edgegrid" "github.com/akamai/AkamaiOPEN-edgegrid-golang/client-v1" "time" ) @@ -80,11 +81,15 @@ func (versions *Versions) GetVersions(property *Property) error { return err } + edge.PrintHttpRequest(req, true) + res, err := client.Do(Config, req) if err != nil { return err } + edge.PrintHttpResponse(res, true) + if err = client.BodyJSON(res, versions); err != nil { return err } @@ -116,11 +121,15 @@ func (versions *Versions) GetLatestVersion(activatedOn NetworkValue) (*Version, return nil, err } + edge.PrintHttpRequest(req, true) + res, err := client.Do(Config, req) if err != nil { return nil, err } + edge.PrintHttpResponse(res, true) + if client.IsError(res) { return nil, client.NewAPIError(res) } @@ -203,11 +212,15 @@ func (version *Version) GetVersion(property *Property, getVersion int) error { return err } + edge.PrintHttpRequest(req, true) + res, err := client.Do(Config, req) if err != nil { return err } + edge.PrintHttpResponse(res, true) + if client.IsError(res) { return client.NewAPIError(res) } @@ -279,11 +292,15 @@ func (version *Version) Save() error { return err } + edge.PrintHttpRequest(req, true) + res, err := client.Do(Config, req) if err != nil { return err } + edge.PrintHttpResponse(res, true) + if client.IsError(res) { return client.NewAPIError(res) } @@ -303,11 +320,15 @@ func (version *Version) Save() error { return err } + edge.PrintHttpRequest(req, true) + res, err = client.Do(Config, req) if err != nil { return err } + edge.PrintHttpResponse(res, true) + if client.IsError(res) { return client.NewAPIError(res) }