cli: make check return SkipError when there is no prometheus configured (#5150)

Fixes #5143

The availability of prometheus is useful for some calls in public-api
that the check uses. This change updates the ListPods in public-api
to still return the pods even when prometheus is not configured.

For a test that exclusively checks for prometheus metrics, we have a gate
which checks if a prometheus is configured and skips it othervise.

Signed-off-by: Tarun Pothulapati tarunpothulapati@outlook.com
This commit is contained in:
Tarun Pothulapati 2020-10-29 19:57:11 +05:30 committed by GitHub
parent 3a16baa141
commit 4c106e9c08
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 18 additions and 2 deletions

View File

@ -117,9 +117,10 @@ func (s *grpcServer) ListPods(ctx context.Context, req *pb.ListPodsRequest) (*pb
// Query Prometheus for all pods present
vec, err := s.queryProm(ctx, processStartTimeQuery)
if err != nil {
if err != nil && !errors.Is(err, ErrNoPrometheusInstance) {
return nil, err
}
for _, sample := range vec {
pod := string(sample.Metric["pod"])
timestamp := sample.Timestamp

View File

@ -42,6 +42,11 @@ const (
remoteClusterNameLabel = model.LabelName("target_cluster_name")
)
var (
// ErrNoPrometheusInstance is returned when there is no prometheus instance configured
ErrNoPrometheusInstance = errors.New("No prometheus instance to connect")
)
func extractSampleValue(sample *model.Sample) uint64 {
value := uint64(0)
if !math.IsNaN(float64(sample.Value)) {
@ -58,7 +63,7 @@ func (s *grpcServer) queryProm(ctx context.Context, query string) (model.Vector,
span.AddAttributes(trace.StringAttribute("queryString", query))
if s.prometheusAPI == nil {
return nil, errors.New("No prometheus instance to connect")
return nil, ErrNoPrometheusInstance
}
// single data point (aka summary) query

View File

@ -1241,6 +1241,16 @@ func (hc *HealthChecker) allCategories() []category {
return err
}
// Check if prometheus configured
prometheusValues := make(map[string]interface{})
err = yaml.Unmarshal(hc.linkerdConfig.Prometheus.Values(), &prometheusValues)
if err != nil {
return err
}
if !GetBool(prometheusValues, "enabled") && hc.linkerdConfig.Global.PrometheusURL == "" {
return &SkipError{Reason: "no prometheus instance to connect"}
}
return validateDataPlanePodReporting(pods)
},
},