summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-05-22 13:11:09 +0300
committerPaul Buetow <paul@buetow.org>2026-05-22 13:11:09 +0300
commit2d0056450fca1570a0282be664ffc35bea05c81b (patch)
tree318455263bf7e9729752a94112d9992895e8f7c5
parent029a064e9ae91adcb46f2a94bddb3f0c20d65fb8 (diff)
parent7078e12d89b13ee5858b9ade1ad63b23e7903dbc (diff)
Merge branch 'develop': optimize parseNumberWithMetric with early pre-check
Task nd: Skip unnecessary registry lookups for tokens like '10x' or '42abc' by rejecting single-character suffixes that aren't known valid metrics (s, m, g whitelisted).
-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