Add test cases for unknown metric parsing.
This commit is contained in:
parent
df3a71eb79
commit
6802f4bbe3
|
@ -125,6 +125,7 @@ type MetricMap struct {
|
||||||
|
|
||||||
// TODO: revisit cu with the semver system
|
// TODO: revisit cu with the semver system
|
||||||
func dumpMaps() {
|
func dumpMaps() {
|
||||||
|
// TODO: make this function part of the exporter
|
||||||
for name, cmap := range builtinMetricMaps {
|
for name, cmap := range builtinMetricMaps {
|
||||||
query, ok := queryOverrides[name]
|
query, ok := queryOverrides[name]
|
||||||
if !ok {
|
if !ok {
|
||||||
|
@ -659,6 +660,10 @@ func dbToString(t interface{}) (string, bool) {
|
||||||
|
|
||||||
// Exporter collects Postgres metrics. It implements prometheus.Collector.
|
// Exporter collects Postgres metrics. It implements prometheus.Collector.
|
||||||
type Exporter struct {
|
type Exporter struct {
|
||||||
|
// Holds a reference to the build in column mappings. Currently this is for testing purposes
|
||||||
|
// only, since it just points to the global.
|
||||||
|
builtinMetricMaps map[string]map[string]ColumnMapping
|
||||||
|
|
||||||
dsn string
|
dsn string
|
||||||
userQueriesPath string
|
userQueriesPath string
|
||||||
duration prometheus.Gauge
|
duration prometheus.Gauge
|
||||||
|
@ -685,8 +690,9 @@ type Exporter struct {
|
||||||
// NewExporter returns a new PostgreSQL exporter for the provided DSN.
|
// NewExporter returns a new PostgreSQL exporter for the provided DSN.
|
||||||
func NewExporter(dsn string, userQueriesPath string) *Exporter {
|
func NewExporter(dsn string, userQueriesPath string) *Exporter {
|
||||||
return &Exporter{
|
return &Exporter{
|
||||||
dsn: dsn,
|
builtinMetricMaps: builtinMetricMaps,
|
||||||
userQueriesPath: userQueriesPath,
|
dsn: dsn,
|
||||||
|
userQueriesPath: userQueriesPath,
|
||||||
duration: prometheus.NewGauge(prometheus.GaugeOpts{
|
duration: prometheus.NewGauge(prometheus.GaugeOpts{
|
||||||
Namespace: namespace,
|
Namespace: namespace,
|
||||||
Subsystem: exporter,
|
Subsystem: exporter,
|
||||||
|
@ -913,7 +919,7 @@ func (e *Exporter) checkMapVersions(ch chan<- prometheus.Metric, db *sql.DB) err
|
||||||
log.Infoln("Semantic Version Changed:", e.lastMapVersion.String(), "->", semanticVersion.String())
|
log.Infoln("Semantic Version Changed:", e.lastMapVersion.String(), "->", semanticVersion.String())
|
||||||
e.mappingMtx.Lock()
|
e.mappingMtx.Lock()
|
||||||
|
|
||||||
e.metricMap = makeDescMap(semanticVersion, builtinMetricMaps)
|
e.metricMap = makeDescMap(semanticVersion, e.builtinMetricMaps)
|
||||||
e.queryOverrides = makeQueryOverrideMap(semanticVersion, queryOverrides)
|
e.queryOverrides = makeQueryOverrideMap(semanticVersion, queryOverrides)
|
||||||
e.lastMapVersion = semanticVersion
|
e.lastMapVersion = semanticVersion
|
||||||
|
|
||||||
|
|
|
@ -95,3 +95,30 @@ func (s *IntegrationSuite) TestInvalidDsnDoesntCrash(c *C) {
|
||||||
c.Assert(exporter, NotNil)
|
c.Assert(exporter, NotNil)
|
||||||
exporter.scrape(ch)
|
exporter.scrape(ch)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TestUnknownMetricParsingDoesntCrash deliberately deletes all the column maps out
|
||||||
|
// of an exporter to test that the default metric handling code can cope with unknown columns.
|
||||||
|
func (s *IntegrationSuite) TestUnknownMetricParsingDoesntCrash(c *C) {
|
||||||
|
// Setup a dummy channel to consume metrics
|
||||||
|
ch := make(chan prometheus.Metric, 100)
|
||||||
|
go func() {
|
||||||
|
for range ch {
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
dsn := os.Getenv("DATA_SOURCE_NAME")
|
||||||
|
c.Assert(dsn, Not(Equals), "")
|
||||||
|
|
||||||
|
exporter := NewExporter(dsn, "")
|
||||||
|
c.Assert(exporter, NotNil)
|
||||||
|
|
||||||
|
// Convert the default maps into a list of empty maps.
|
||||||
|
emptyMaps := make(map[string]map[string]ColumnMapping, 0)
|
||||||
|
for k := range exporter.builtinMetricMaps {
|
||||||
|
emptyMaps[k] = map[string]ColumnMapping{}
|
||||||
|
}
|
||||||
|
exporter.builtinMetricMaps = emptyMaps
|
||||||
|
|
||||||
|
// scrape the exporter and make sure it works
|
||||||
|
exporter.scrape(ch)
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue