5 Commits

Author SHA1 Message Date
9afed0bfb0 Merge pull request #54 from unistack-org/optimization
use newMetric helper in all places
2022-03-13 11:25:46 +03:00
eac6b15775 fixup
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
2022-03-13 11:24:11 +03:00
85319f9bd0 use newMetric helper in all places
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
2022-03-13 11:18:38 +03:00
e4f2c77510 Merge pull request #53 from unistack-org/fixup
fix to support all metric types
2022-03-11 01:39:40 +03:00
b77f70aeb0 fix to support all metric types
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
2022-03-11 01:37:53 +03:00

View File

@@ -52,21 +52,6 @@ func newFloat64(v float64) *float64 {
return &nv return &nv
} }
func newMt(v dto.MetricType) *dto.MetricType {
nv := v
return &nv
}
func newInt(v int) *int {
nv := v
return &nv
}
func newInt64(v int64) *int64 {
nv := v
return &nv
}
func newString(v string) *string { func newString(v string) *string {
nv := v nv := v
return &nv return &nv
@@ -102,9 +87,8 @@ func (m *prometheusMeter) buildMetric(name string, labels ...string) string {
return meter.BuildName(name, nlabels...) return meter.BuildName(name, nlabels...)
} }
for idx := 0; idx < nl; idx++ { for idx := 0; idx < nl; idx += 2 {
nlabels[idx] = m.opts.LabelPrefix + nlabels[idx] nlabels[idx] = m.opts.LabelPrefix + nlabels[idx]
idx++
} }
return meter.BuildName(name, nlabels...) return meter.BuildName(name, nlabels...)
} }
@@ -124,10 +108,9 @@ func (m *prometheusMeter) buildLabels(labels ...string) []string {
nlabels := make([]string, 0, nl) nlabels := make([]string, 0, nl)
for idx := 0; idx < nl; idx++ { for idx := 0; idx < nl; idx += 2 {
nlabels = append(nlabels, m.opts.LabelPrefix+labels[idx]) nlabels = append(nlabels, m.opts.LabelPrefix+labels[idx])
nlabels = append(nlabels, labels[idx+1]) nlabels = append(nlabels, labels[idx+1])
idx++
} }
return nlabels return nlabels
} }
@@ -319,19 +302,9 @@ func (m *prometheusMeter) Write(w io.Writer, opts ...meter.Option) error {
Metric: make([]*dto.Metric, 0, len(metrics.cs)), Metric: make([]*dto.Metric, 0, len(metrics.cs)),
} }
for _, c := range metrics.cs { for _, c := range metrics.cs {
m := &dto.Metric{ m := &dto.Metric{}
Label: make([]*dto.LabelPair, 0, len(c.labels)/2), _ = c.c.Write(m)
Gauge: &dto.Gauge{ fillMetric(m, c.labels)
Value: newFloat64(float64(c.Get())),
},
}
for idx := 0; idx < len(c.labels); idx++ {
m.Label = append(m.Label, &dto.LabelPair{
Name: &c.labels[idx],
Value: &c.labels[idx+1],
})
idx++
}
mf.Metric = append(mf.Metric, m) mf.Metric = append(mf.Metric, m)
} }
mfs = append(mfs, mf) mfs = append(mfs, mf)
@@ -344,19 +317,54 @@ func (m *prometheusMeter) Write(w io.Writer, opts ...meter.Option) error {
Metric: make([]*dto.Metric, 0, len(metrics.cs)), Metric: make([]*dto.Metric, 0, len(metrics.cs)),
} }
for _, c := range metrics.cs { for _, c := range metrics.cs {
m := &dto.Metric{ m := &dto.Metric{}
Label: make([]*dto.LabelPair, 0, len(c.labels)/2), _ = c.c.Write(m)
Gauge: &dto.Gauge{ fillMetric(m, c.labels)
Value: newFloat64(float64(c.Get())), mf.Metric = append(mf.Metric, m)
}, }
} mfs = append(mfs, mf)
for idx := 0; idx < len(c.labels); idx++ { }
m.Label = append(m.Label, &dto.LabelPair{
Name: &c.labels[idx], for name, metrics := range m.floatCounter {
Value: &c.labels[idx+1], mf := &dto.MetricFamily{
}) Name: newString(name),
idx++ Type: dto.MetricType_GAUGE.Enum(),
} Metric: make([]*dto.Metric, 0, len(metrics.cs)),
}
for _, c := range metrics.cs {
m := &dto.Metric{}
_ = c.c.Write(m)
fillMetric(m, c.labels)
mf.Metric = append(mf.Metric, m)
}
mfs = append(mfs, mf)
}
for name, metrics := range m.histogram {
mf := &dto.MetricFamily{
Name: newString(name),
Type: dto.MetricType_HISTOGRAM.Enum(),
Metric: make([]*dto.Metric, 0, len(metrics.cs)),
}
for _, c := range metrics.cs {
m := &dto.Metric{}
_ = c.c.Write(m)
fillMetric(m, c.labels)
mf.Metric = append(mf.Metric, m)
}
mfs = append(mfs, mf)
}
for name, metrics := range m.summary {
mf := &dto.MetricFamily{
Name: newString(name),
Type: dto.MetricType_SUMMARY.Enum(),
Metric: make([]*dto.Metric, 0, len(metrics.cs)),
}
for _, c := range metrics.cs {
m := &dto.Metric{}
_ = c.c.Write(m)
fillMetric(m, c.labels)
mf.Metric = append(mf.Metric, m) mf.Metric = append(mf.Metric, m)
} }
mfs = append(mfs, mf) mfs = append(mfs, mf)
@@ -510,3 +518,14 @@ func newHash(labels []string) uint64 {
} }
return h.Sum64() return h.Sum64()
} }
func fillMetric(m *dto.Metric, labels []string) *dto.Metric {
m.Label = make([]*dto.LabelPair, 0, len(labels)/2)
for idx := 0; idx < len(labels); idx += 2 {
m.Label = append(m.Label, &dto.LabelPair{
Name: newString(labels[idx]),
Value: newString(labels[idx+1]),
})
}
return m
}