summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-05-22 13:09:52 +0300
committerPaul Buetow <paul@buetow.org>2026-05-22 13:10:38 +0300
commit7078e12d89b13ee5858b9ade1ad63b23e7903dbc (patch)
tree817f8975bebe00c949611af412493582b42d054c
parentec40da3da7644a80c42f566cf2adee1ea346e8db (diff)
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).
-rw-r--r--internal/rpn/metric_parse.go11
1 files changed, 11 insertions, 0 deletions
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