Skip to content

Commit a0199ea

Browse files
committed
Ultimate slice reuse.
Signed-off-by: Bartlomiej Plotka <[email protected]>
1 parent 73ef5c6 commit a0199ea

File tree

1 file changed

+33
-11
lines changed

1 file changed

+33
-11
lines changed

metrics/prometheus.go

Lines changed: 33 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ package metrics
1717
import (
1818
"fmt"
1919
"regexp"
20+
"sort"
2021
"strconv"
2122
"time"
2223

@@ -1877,18 +1878,30 @@ func (c *PrometheusCollector) collectContainersInfo(session *prometheus.CollectS
18771878
if err != nil {
18781879
return err
18791880
}
1880-
rawLabels := map[string]struct{}{}
1881+
1882+
rawLabelsDup := map[string]struct{}{}
18811883
for _, container := range containers {
18821884
for l := range c.containerLabelsFunc(container) {
1883-
rawLabels[l] = struct{}{}
1885+
rawLabelsDup[l] = struct{}{}
18841886
}
18851887
}
18861888

1889+
rawLabels := make([]string, 0, len(rawLabelsDup))
1890+
for r := range rawLabelsDup {
1891+
rawLabels = append(rawLabels, r)
1892+
}
1893+
sort.Strings(rawLabels)
1894+
1895+
values := make([]string, 0, len(rawLabels))
1896+
labels := make([]string, 0, len(rawLabels))
1897+
1898+
clabels := make([]string, 0, len(rawLabels))
1899+
cvalues := make([]string, 0, len(rawLabels))
18871900
for _, cont := range containers {
1888-
values := make([]string, 0, len(rawLabels))
1889-
labels := make([]string, 0, len(rawLabels))
1901+
values := values[:0]
1902+
labels := labels[:0]
18901903
containerLabels := c.containerLabelsFunc(cont)
1891-
for l := range rawLabels {
1904+
for _, l := range rawLabels {
18921905
duplicate := false
18931906
sl := sanitizeLabelName(l)
18941907
for _, x := range labels {
@@ -1950,18 +1963,27 @@ func (c *PrometheusCollector) collectContainersInfo(session *prometheus.CollectS
19501963
continue
19511964
}
19521965
for _, metricValue := range cm.getValues(stats) {
1966+
labels = append(labels, cm.extraLabels...)
1967+
values = append(values, metricValue.labels...)
19531968
session.MustAddMetric(
1954-
cm.name, cm.help,
1955-
append(labels, cm.extraLabels...), append(values, metricValue.labels...),
1956-
cm.valueType, metricValue.value, &metricValue.timestamp,
1969+
cm.name, cm.help, labels, values, cm.valueType, metricValue.value, &metricValue.timestamp,
19571970
)
1971+
labels = labels[:len(labels)-len(cm.extraLabels)]
1972+
values = values[:len(values)-len(metricValue.labels)]
19581973
}
19591974
}
19601975
if c.includedMetrics.Has(container.AppMetrics) {
1961-
for metricLabel, v := range stats.CustomMetrics {
1976+
metricLabels := make([]string, 0, len(stats.CustomMetrics))
1977+
for metricLabel := range stats.CustomMetrics {
1978+
metricLabels = append(metricLabels, metricLabel)
1979+
}
1980+
sort.Strings(metricLabels)
1981+
1982+
for _, metricLabel := range metricLabels {
1983+
v := stats.CustomMetrics[metricLabel]
19621984
for _, metric := range v {
1963-
clabels := make([]string, len(rawLabels), len(rawLabels)+len(metric.Labels))
1964-
cvalues := make([]string, len(rawLabels), len(rawLabels)+len(metric.Labels))
1985+
clabels = clabels[:len(rawLabels)]
1986+
cvalues = cvalues[:len(rawLabels)]
19651987
copy(clabels, labels)
19661988
copy(cvalues, values)
19671989
for label, value := range metric.Labels {

0 commit comments

Comments
 (0)