func (c *Checker) Run() (Result, bool) {
	var (
		haserr bool
		err    error
	)
	cacheRes := c.retrieveResultFromCache()
	if cacheRes != nil {
		return *cacheRes, false
	}
	res := Result{}
	res.APIServerDirect, err = measure(c.APIServerDirect, "api_server_direct")
	haserr = haserr || (err != nil)
	res.APIServerDNS, err = measure(c.APIServerDNS, "api_server_dns")
	haserr = haserr || (err != nil)
	res.MeIngress, err = measure(c.MeIngress, "me_ingress")
	haserr = haserr || (err != nil)
	res.MeService, err = measure(c.MeService, "me_service")
	haserr = haserr || (err != nil)
	res.Neighbourhood, err = c.discovery.GetNeighbours(context.TODO(), c.KubenurseNamespace, c.NeighbourFilter)
	haserr = haserr || (err != nil)
	if err != nil {
		res.NeighbourhoodState = err.Error()
	} else {
		res.NeighbourhoodState = "ok"
		c.checkNeighbours(res.Neighbourhood)
	}
	c.cacheResult(&res)
	return res, haserr
}
Run runs an check and returns the result togeter with a boolean, if it wasn't
successful. It respects the cache.
package checker
import (
	"context"
	"fmt"
	"log"
	"net/http"
	"time"
	"github.com/postfinance/kubenurse/pkg/kubediscovery"
	"github.com/postfinance/kubenurse/pkg/metrics"
)
func New(ctx context.Context, httpClient *http.Client, cacheTTL time.Duration, allowUnschedulable bool) (*Checker, error) {
	discovery, err := kubediscovery.New(ctx, allowUnschedulable)
	if err != nil {
		return nil, fmt.Errorf("create k8s discovery client: %w", err)
	}
	return &Checker{
		allowUnschedulable: allowUnschedulable,
		discovery:          discovery,
		httpClient:         httpClient,
		cacheTTL:           cacheTTL,
	}, nil
}