mirror of
https://github.com/prometheus-community/windows_exporter.git
synced 2026-03-06 02:26:36 +00:00
Add benchmark for each collector
Benchmarks will allow for easier identification of slow collectors. Additionally, they increase test coverage of the collectors, with some collectors now reaching 80-95% coverage with this change. Collector benchmarks have been structed so that common functionality is present in `collector/collector_test.go` as is done with non-test functionality in `collector/collector.go`. Test logic that is specific to individual collectors is present in the collector test file (E.G. `collector/process_test.go` for the Process collector). Signed-off-by: Ben Reedy <breed808@breed808.com>
This commit is contained in:
@@ -3,6 +3,8 @@ package collector
|
||||
import (
|
||||
"reflect"
|
||||
"testing"
|
||||
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
)
|
||||
|
||||
func TestExpandChildCollectors(t *testing.T) {
|
||||
@@ -32,3 +34,27 @@ func TestExpandChildCollectors(t *testing.T) {
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func benchmarkCollector(b *testing.B, name string, collectFunc func() (Collector, error)) {
|
||||
// Create perflib scrape context. Some perflib collectors required a correct context,
|
||||
// or will fail during benchmark.
|
||||
scrapeContext, err := PrepareScrapeContext([]string{name})
|
||||
if err != nil {
|
||||
b.Error(err)
|
||||
}
|
||||
c, err := collectFunc()
|
||||
if err != nil {
|
||||
b.Error(err)
|
||||
}
|
||||
|
||||
metrics := make(chan prometheus.Metric)
|
||||
go func() {
|
||||
for {
|
||||
<-metrics
|
||||
}
|
||||
}()
|
||||
|
||||
for i := 0; i < b.N; i++ {
|
||||
c.Collect(scrapeContext, metrics)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user