diff --git a/collector/collector.go b/collector/collector.go index 25d0f38..644691a 100644 --- a/collector/collector.go +++ b/collector/collector.go @@ -360,9 +360,7 @@ func (e *Exporter) scrape(ch chan<- prometheus.Metric, tick *time.Time) { err = err1 } errmutex.Unlock() - if !metric.IgnoreZeroResult { - // do not print repetitive error messages for metrics - // with ignoreZeroResult set to true + if shouldLogScrapeError(err, metric.IgnoreZeroResult) { level.Error(e.logger).Log("msg", "Error scraping metric", "Context", metric.Context, "MetricsDesc", fmt.Sprint(metric.MetricsDesc), @@ -622,7 +620,9 @@ func (e *Exporter) scrapeGenericValues(db *sql.DB, ch chan<- prometheus.Metric, return err } if !ignoreZeroResult && metricsCount == 0 { - return errors.New("no metrics found while parsing, query returned no rows") + // a zero result error is returned for caller error identification. + // https://github.com/oracle/oracle-db-appdev-monitoring/issues/168 + return newZeroResultError() } return err } diff --git a/collector/errors.go b/collector/errors.go new file mode 100644 index 0000000..dd4ea14 --- /dev/null +++ b/collector/errors.go @@ -0,0 +1,25 @@ +// Copyright (c) 2024, Oracle and/or its affiliates. +// Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. + +package collector + +import "errors" + +type zeroResultError struct { + err string +} + +func (z *zeroResultError) Error() string { + return z.err +} + +func newZeroResultError() error { + return &zeroResultError{ + err: "no metrics found while parsing, query returned no rows", + } +} + +// shouldLogScrapeError returns false if the error is a zero result error and zero result errors are ignored. +func shouldLogScrapeError(err error, isIgnoreZeroResult bool) bool { + return !isIgnoreZeroResult || !errors.Is(err, newZeroResultError()) +}