From 7078e12d89b13ee5858b9ade1ad63b23e7903dbc Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Fri, 22 May 2026 13:09:52 +0300 Subject: rpn: add early pre-check to skip unlikely metric suffixes Avoid unnecessary registry lookups in parseNumberWithMetric for tokens like '10x' or '42abc' by rejecting single-character suffixes that aren't known valid metrics (s, m, g). --- internal/rpn/metric_parse.go | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'internal') diff --git a/internal/rpn/metric_parse.go b/internal/rpn/metric_parse.go index bc53334..8a00a0d 100644 --- a/internal/rpn/metric_parse.go +++ b/internal/rpn/metric_parse.go @@ -57,6 +57,17 @@ func parseNumberWithMetric(token string) (float64, *Metric, bool) { numStr := token[:i] metricName := token[i:] + // Early pre-check: skip unlikely metric suffixes to avoid + // unnecessary registry lookups for tokens like "10x", "42abc". + // All built-in metric names are >= 2 chars, except for three + // single-char metrics: s (seconds), m (meters), g (grams). + // Require suffix length >= 2, or be one of those known singles. + if len(metricName) < 2 { + if metricName != "s" && metricName != "m" && metricName != "g" { + return 0, nil, false + } + } + num, err := strconv.ParseFloat(numStr, 64) if err != nil { return 0, nil, false -- cgit v1.2.3