Some fixes to the spoof.go and exporter.go (#223)

* Some fixes to the spoof.go and exporter.go

While reviewing some other CL, I saw some avenues for improving
spoof.go, to log the URL that's being fetched, which would help in test
debugging and to use switch construct, rather than nested if's.

While testing the change, I noticed some shifty loggin from the
exporter, so I fixed that as well while I was there.

* Continuation of the previous cleanups.
This commit is contained in:
Victor Agababov 2019-01-11 12:13:29 -08:00 committed by Knative Prow Robot
parent 1aca435944
commit 225d11cc1a
3 changed files with 18 additions and 17 deletions

View File

@ -121,7 +121,7 @@ func newStackdriverExporter(config *metricsConfig, logger *zap.SugaredLogger) (v
DefaultMonitoringLabels: &stackdriver.Labels{}, DefaultMonitoringLabels: &stackdriver.Labels{},
}) })
if err != nil { if err != nil {
logger.Error("Failed to create the Stackdriver exporter.", zap.Error(err)) logger.Error("Failed to create the Stackdriver exporter: ", zap.Error(err))
return nil, err return nil, err
} }
logger.Infof("Created Opencensus Stackdriver exporter with config %v", config) logger.Infof("Created Opencensus Stackdriver exporter with config %v", config)
@ -172,7 +172,7 @@ func setMonitoredResourceFunc(config *metricsConfig, logger *zap.SugaredLogger)
if getMonitoredResourceFunc == nil { if getMonitoredResourceFunc == nil {
gm := retrieveGCPMetadata() gm := retrieveGCPMetadata()
metricsPrefix := config.domain + "/" + config.component metricsPrefix := config.domain + "/" + config.component
logger.Infof("metrics prefix", metricsPrefix) logger.Infof("metrics prefix: %s", metricsPrefix)
if _, ok := metricskey.KnativeRevisionMetricsPrefixes[metricsPrefix]; ok { if _, ok := metricskey.KnativeRevisionMetricsPrefixes[metricsPrefix]; ok {
getMonitoredResourceFunc = getKnativeRevisionMonitoredResource(gm) getMonitoredResourceFunc = getKnativeRevisionMonitoredResource(gm)
} else { } else {

View File

@ -32,7 +32,7 @@ func CleanupOnInterrupt(cleanup func(), logger *logging.BaseLogger) {
signal.Notify(c, os.Interrupt) signal.Notify(c, os.Interrupt)
go func() { go func() {
for range c { for range c {
logger.Infof("Test interrupted, cleaning up.") logger.Info("Test interrupted, cleaning up.")
cleanup() cleanup()
os.Exit(1) os.Exit(1)
} }

View File

@ -78,7 +78,7 @@ var _ Interface = (*SpoofingClient)(nil)
// https://github.com/kubernetes/apimachinery/blob/cf7ae2f57dabc02a3d215f15ca61ae1446f3be8f/pkg/util/wait/wait.go#L172 // https://github.com/kubernetes/apimachinery/blob/cf7ae2f57dabc02a3d215f15ca61ae1446f3be8f/pkg/util/wait/wait.go#L172
type ResponseChecker func(resp *Response) (done bool, err error) type ResponseChecker func(resp *Response) (done bool, err error)
// SpoofingClient is a minimal http client wrapper that spoofs the domain of requests // SpoofingClient is a minimal HTTP client wrapper that spoofs the domain of requests
// for non-resolvable domains. // for non-resolvable domains.
type SpoofingClient struct { type SpoofingClient struct {
Client *http.Client Client *http.Client
@ -123,7 +123,7 @@ func New(kubeClientset *kubernetes.Clientset, logger *logging.BaseLogger, domain
return &sc, nil return &sc, nil
} }
// GetServiceEndpoint gets the endpoint IP or hostname to use for the service // GetServiceEndpoint gets the endpoint IP or hostname to use for the service.
func GetServiceEndpoint(kubeClientset *kubernetes.Clientset) (*string, error) { func GetServiceEndpoint(kubeClientset *kubernetes.Clientset) (*string, error) {
var err error var err error
@ -135,7 +135,7 @@ func GetServiceEndpoint(kubeClientset *kubernetes.Clientset) (*string, error) {
} }
var endpoint string var endpoint string
endpoint, err = getEndpointFromService(ingress) endpoint, err = endpointFromService(ingress)
if err != nil { if err != nil {
continue continue
} }
@ -145,21 +145,22 @@ func GetServiceEndpoint(kubeClientset *kubernetes.Clientset) (*string, error) {
return nil, err return nil, err
} }
// getEndpointFromService extracts the endpoint from the service's ingress. // endpointFromService extracts the endpoint from the service's ingress.
func getEndpointFromService(svc *v1.Service) (string, error) { func endpointFromService(svc *v1.Service) (string, error) {
ingresses := svc.Status.LoadBalancer.Ingress ingresses := svc.Status.LoadBalancer.Ingress
if len(ingresses) != 1 { if len(ingresses) != 1 {
return "", fmt.Errorf("Expected exactly one ingress load balancer, instead had %d: %s", len(ingresses), ingresses) return "", fmt.Errorf("Expected exactly one ingress load balancer, instead had %d: %v", len(ingresses), ingresses)
} }
ingressToUse := ingresses[0] itu := ingresses[0]
if ingressToUse.IP == "" { switch {
if ingressToUse.Hostname == "" { case itu.IP != "":
return itu.IP, nil
case itu.Hostname != "":
return itu.Hostname, nil
default:
return "", fmt.Errorf("Expected ingress loadbalancer IP or hostname for %s to be set, instead was empty", svc.Name) return "", fmt.Errorf("Expected ingress loadbalancer IP or hostname for %s to be set, instead was empty", svc.Name)
} }
return ingressToUse.Hostname, nil
}
return ingressToUse.IP, nil
} }
// Do dispatches to the underlying http.Client.Do, spoofing domains as needed // Do dispatches to the underlying http.Client.Do, spoofing domains as needed
@ -212,7 +213,7 @@ func (sc *SpoofingClient) Poll(req *http.Request, inState ResponseChecker) (*Res
resp, err = sc.Do(req) resp, err = sc.Do(req)
if err != nil { if err != nil {
if err, ok := err.(net.Error); ok && err.Timeout() { if err, ok := err.(net.Error); ok && err.Timeout() {
sc.logger.Infof("Retrying for TCP timeout %v", err) sc.logger.Infof("Retrying %s for TCP timeout %v", req.URL.String(), err)
return false, nil return false, nil
} }
return true, err return true, err