diff options
| author | Paul Buetow <paul@buetow.org> | 2026-05-22 13:11:09 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-05-22 13:11:09 +0300 |
| commit | 2d0056450fca1570a0282be664ffc35bea05c81b (patch) | |
| tree | 318455263bf7e9729752a94112d9992895e8f7c5 | |
| parent | 029a064e9ae91adcb46f2a94bddb3f0c20d65fb8 (diff) | |
| parent | 7078e12d89b13ee5858b9ade1ad63b23e7903dbc (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.go | 11 |
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 |
