diff --git a/integration-tests/configs/prometheus/config.yaml b/integration-tests/configs/prometheus/config.yaml new file mode 100644 index 0000000..a9c8dea --- /dev/null +++ b/integration-tests/configs/prometheus/config.yaml @@ -0,0 +1,16 @@ +# +# Integration Test Config: General +# + +listenAddressSingleHTTPFrontend: 0.0.0.0:1337 + +logLevel: "DEBUG" +checkForUpdates: false + +prometheus: + enabled: true + defaultGoMetrics: false + +actions: + - title: Hello OliveTin + shell: echo "Hello OliveTin" diff --git a/integration-tests/runner.mjs b/integration-tests/runner.mjs index e880a44..be5b75b 100644 --- a/integration-tests/runner.mjs +++ b/integration-tests/runner.mjs @@ -25,6 +25,10 @@ class OliveTinTestRunner { baseUrl() { return this.BASE_URL } + + metricsUrl() { + return new URL('metrics', this.baseUrl()); + } } class OliveTinTestRunnerStartLocalProcess extends OliveTinTestRunner { diff --git a/integration-tests/test/prometheus.mjs b/integration-tests/test/prometheus.mjs new file mode 100644 index 0000000..0c25e50 --- /dev/null +++ b/integration-tests/test/prometheus.mjs @@ -0,0 +1,33 @@ +import { describe, it, before, after } from 'mocha' +import { expect } from 'chai' + +import { By } from 'selenium-webdriver' + +let metrics = [ + {'name': 'olivetin_actions_requested_count', 'type': 'counter', 'desc': 'The actions requested count'}, + {'name': 'olivetin_config_action_count', 'type': 'gauge', 'desc': 'The number of actions in the config file'}, + {'name': 'olivetin_config_reloaded_count', 'type': 'counter', 'desc': 'The number of times the config has been reloaded'}, + {'name': 'olivetin_sv_count', 'type': 'gauge', 'desc': 'The number entries in the sv map'}, +] + +describe('config: prometheus', function () { + before(async function () { + await runner.start('prometheus') + }) + + after(async () => { + await runner.stop() + }) + + it('Metrics are available with correct types', async () => { + webdriver.get(runner.metricsUrl()) + const prometheusOutput = await webdriver.findElement(By.tagName('pre')).getText() + + expect(prometheusOutput).to.not.be.null + metrics.forEach(({name, type, desc}) => { + const metaLines = `# HELP ${name} ${desc}\n` + + `# TYPE ${name} ${type}\n` + expect(prometheusOutput).to.match(new RegExp(metaLines)) + }) + }) +}) diff --git a/internal/config/config_reloader.go b/internal/config/config_reloader.go index c33f91a..0a34add 100644 --- a/internal/config/config_reloader.go +++ b/internal/config/config_reloader.go @@ -15,7 +15,7 @@ import ( var ( metricConfigActionCount = promauto.NewGauge(prometheus.GaugeOpts{ Name: "olivetin_config_action_count", - Help: "Then number of actions in the config file", + Help: "The number of actions in the config file", }) metricConfigReloadedCount = promauto.NewCounter(prometheus.CounterOpts{ diff --git a/internal/executor/executor.go b/internal/executor/executor.go index 4e54947..ea038e9 100644 --- a/internal/executor/executor.go +++ b/internal/executor/executor.go @@ -22,7 +22,7 @@ import ( ) var ( - metricActionsRequested = promauto.NewGauge(prometheus.GaugeOpts{ + metricActionsRequested = promauto.NewCounter(prometheus.CounterOpts{ Name: "olivetin_actions_requested_count", Help: "The actions requested count", })