diff --git a/build.gradle b/build.gradle index 56cdb7d2dd2..5f0cbad305e 100644 --- a/build.gradle +++ b/build.gradle @@ -226,6 +226,8 @@ configure(coreProjects) { dependency "io.micrometer:micrometer-spring-legacy:${micrometerVersion}" dependency "io.micrometer:micrometer-registry-influx:${micrometerVersion}" dependency "io.micrometer:micrometer-registry-prometheus:${micrometerVersion}" + // InfluxDB + dependency 'org.influxdb:influxdb-java:2.10' // Overrides from Spring Boot dependency 'com.fasterxml.jackson.module:jackson-module-kotlin:2.9.5' dependency 'org.postgresql:postgresql:9.4.1208' diff --git a/ontrack-acceptance/build.gradle b/ontrack-acceptance/build.gradle index d60539b156d..be0cb116cb9 100644 --- a/ontrack-acceptance/build.gradle +++ b/ontrack-acceptance/build.gradle @@ -22,6 +22,8 @@ dependencies { testCompile 'org.codehaus.groovy:groovy-all' testCompile 'org.springframework.boot:spring-boot-starter' + testCompile 'org.influxdb:influxdb-java' + testCompile "org.seleniumhq.selenium:selenium-java:${seleniumVersion}" testCompile "org.seleniumhq.selenium:selenium-support:${seleniumVersion}" } diff --git a/ontrack-acceptance/src/main/compose/docker-compose.yml b/ontrack-acceptance/src/main/compose/docker-compose.yml index 8cdc1110993..ddae23a263c 100644 --- a/ontrack-acceptance/src/main/compose/docker-compose.yml +++ b/ontrack-acceptance/src/main/compose/docker-compose.yml @@ -7,16 +7,23 @@ services: POSTGRES_DB : ontrack POSTGRES_USER : ontrack POSTGRES_PASSWORD: ontrack + influxdb: + image: influxdb:1.5.3 ontrack: image: "docker.nemerosa.net/nemerosa/ontrack:${ONTRACK_VERSION:-latest}" depends_on: postgres: condition: service_started + influxdb: + condition: service_started environment: PROFILE: acceptance ONTRACK_CONFIG_CONFIGURATION_TEST: "false" JAVA_OPTIONS: "-Xmx2048m -Xms2048m" SPRING_DATASOURCE_URL: "jdbc:postgresql://postgres/ontrack" + # InfluxDB being enabled + ONTRACK_INFLUXDB_ENABLED: "true" + ONTRACK_INFLUXDB_URI: "http://influxdb:8086" selenium: image: "selenium/standalone-chrome:3.11.0" environment: @@ -34,6 +41,7 @@ services: ONTRACK_ACCEPTANCE_SELENIUM_TARGET_URL: http://ontrack:8080 ONTRACK_ACCEPTANCE_IMPLICIT_WAIT: 30 ONTRACK_ACCEPTANCE_TARGET_URL: http://ontrack:8080 + ONTRACK_ACCEPTANCE_INFLUXDB_URI: http://influxdb:8086 JAVA_OPTIONS: "-Xmx2048m -Xms2048m" volumes: - "./build:/ontrack/acceptance/output:rw" diff --git a/ontrack-acceptance/src/main/docker/Dockerfile b/ontrack-acceptance/src/main/docker/Dockerfile index bcf7c940a51..e3b9435f736 100644 --- a/ontrack-acceptance/src/main/docker/Dockerfile +++ b/ontrack-acceptance/src/main/docker/Dockerfile @@ -30,7 +30,8 @@ ENV ONTRACK_ACCEPTANCE_SELENIUM_GRID_URL='' \ ONTRACK_ACCEPTANCE_TARGET_SSL_DISABLED='false' \ ONTRACK_ACCEPTANCE_CONTEXT='all' \ ONTRACK_ACCEPTANCE_TIMEOUT='120' \ - ONTRACK_ACCEPTANCE_IMPLICIT_WAIT='5' + ONTRACK_ACCEPTANCE_IMPLICIT_WAIT='5' \ + ONTRACK_ACCEPTANCE_INFLUXDB_URI='http://influxdb:8086' # Running the acceptance application ENTRYPOINT /ontrack/acceptance/app/acceptance.sh diff --git a/ontrack-acceptance/src/main/docker/acceptance.sh b/ontrack-acceptance/src/main/docker/acceptance.sh index d0ec6bc0f3e..4f7c1ed930d 100644 --- a/ontrack-acceptance/src/main/docker/acceptance.sh +++ b/ontrack-acceptance/src/main/docker/acceptance.sh @@ -11,4 +11,5 @@ exec java \ --ontrack.acceptance.timeout=${ONTRACK_ACCEPTANCE_TIMEOUT} \ --ontrack.acceptance.implicit-wait=${ONTRACK_ACCEPTANCE_IMPLICIT_WAIT} \ --ontrack.acceptance.output-dir=/ontrack/acceptance/output \ - --ontrack.acceptance.result-file-name=acceptance-tests.xml + --ontrack.acceptance.result-file-name=acceptance-tests.xml \ + --ontrack.acceptance.influxdb-uri=${ONTRACK_ACCEPTANCE_INFLUXDB_URI} diff --git a/ontrack-acceptance/src/test/groovy/net/nemerosa/ontrack/acceptance/ACCInfluxDBRunInfo.groovy b/ontrack-acceptance/src/test/groovy/net/nemerosa/ontrack/acceptance/ACCInfluxDBRunInfo.groovy new file mode 100644 index 00000000000..83b6f68fee5 --- /dev/null +++ b/ontrack-acceptance/src/test/groovy/net/nemerosa/ontrack/acceptance/ACCInfluxDBRunInfo.groovy @@ -0,0 +1,64 @@ +package net.nemerosa.ontrack.acceptance + +import org.influxdb.InfluxDBFactory +import org.influxdb.annotation.Column +import org.influxdb.annotation.Measurement +import org.influxdb.dto.Query +import org.influxdb.impl.InfluxDBResultMapper +import org.junit.Test + +import static net.nemerosa.ontrack.test.TestUtils.uid + +class ACCInfluxDBRunInfo extends AcceptanceTestClient { + + @Test + void 'Run info is exported to InfluxDB'() { + def p = uid("P") + ontrack.project(p) { + branch("1.0") { + build("1.0.0") { + runInfo = [ + runTime: 120 + ] + } + } + } + // Checks the time has been written in InfluxDB + def influxDB = InfluxDBFactory.connect( + configRule.config.influxdbUri + ) + def result = influxDB.query( + new Query( + "SELECT * " + + "FROM ontrack_value_run_info_build_time_seconds " + + "WHERE project = '${p}' " + + "AND branch = '1.0'", + "ontrack" + ) + ) + def resultMapper = new InfluxDBResultMapper() + def measurements = resultMapper.toPOJO( + result, + RunInfoMeasurement + ) + assert !measurements.empty + def measurement = measurements.first() + assert measurement.value == 120 + assert measurement.project == p + assert measurement.branch == "1.0" + assert measurement.name == "1.0.0" + } + + @Measurement(name = "ontrack_value_run_info_build_time_seconds") + static class RunInfoMeasurement { + @Column(name = "value") + int value + @Column(name = "project") + String project + @Column(name = "branch") + String branch + @Column(name = "name") + String name + } + +} diff --git a/ontrack-acceptance/src/test/groovy/net/nemerosa/ontrack/acceptance/config/AcceptanceConfig.java b/ontrack-acceptance/src/test/groovy/net/nemerosa/ontrack/acceptance/config/AcceptanceConfig.java index 4425e57e471..5acb5445f19 100644 --- a/ontrack-acceptance/src/test/groovy/net/nemerosa/ontrack/acceptance/config/AcceptanceConfig.java +++ b/ontrack-acceptance/src/test/groovy/net/nemerosa/ontrack/acceptance/config/AcceptanceConfig.java @@ -73,6 +73,11 @@ public class AcceptanceConfig { */ private String resultFileName = "ontrack-acceptance.xml"; + /** + * URI to the InfluxDB database + */ + private String influxdbUri = "http://localhost:8086"; + @PostConstruct public void check() throws InterruptedException, ExecutionException, TimeoutException { // Checks the URL is defined @@ -136,6 +141,7 @@ public void log(Consumer logger) { logger.accept(String.format(">>> Implicit wait: %s", implicitWait)); logger.accept(String.format(">>> Output directory: %s", outputDir)); logger.accept(String.format(">>> Result file name: %s", resultFileName)); + logger.accept(String.format(">>> InfluxDB URI: %s", influxdbUri)); } public static AcceptanceConfig fromEnv() { @@ -151,6 +157,7 @@ public static AcceptanceConfig fromEnv() { c.setImplicitWait(envAsInt("ontrack.acceptance.implicit-wait", c.getImplicitWait(), "GUI element wait (s)")); c.setOutputDir(envAsFile("ontrack.acceptance.output-dir", c.getOutputDir(), "Output directory")); c.setResultFileName(env("ontrack.acceptance.result-file-name", "ontrack-acceptance.xml", "Output directory")); + c.setInfluxdbUri(env("ontrack.acceptance.influxdb-uri", "http://localhost:8086", "URI to the InfluxDB database")); return c; } diff --git a/ontrack-extension-influxdb/build.gradle b/ontrack-extension-influxdb/build.gradle index 8647994a96a..8ef3666c7e4 100644 --- a/ontrack-extension-influxdb/build.gradle +++ b/ontrack-extension-influxdb/build.gradle @@ -4,7 +4,7 @@ apply plugin: OntrackExtensionPlugin dependencies { compile project(':ontrack-extension-support') - compile 'org.influxdb:influxdb-java:2.10' + compile 'org.influxdb:influxdb-java' testCompile project(':ontrack-it-utils') testCompile 'org.codehaus.groovy:groovy-all' diff --git a/ontrack-extension-influxdb/src/main/kotlin/net/nemerosa/ontrack/extension/influxdb/runinfo/InfluxDBRunInfoListener.kt b/ontrack-extension-influxdb/src/main/kotlin/net/nemerosa/ontrack/extension/influxdb/runinfo/InfluxDBRunInfoListener.kt index 79f533572d7..9c88ca223b5 100644 --- a/ontrack-extension-influxdb/src/main/kotlin/net/nemerosa/ontrack/extension/influxdb/runinfo/InfluxDBRunInfoListener.kt +++ b/ontrack-extension-influxdb/src/main/kotlin/net/nemerosa/ontrack/extension/influxdb/runinfo/InfluxDBRunInfoListener.kt @@ -19,7 +19,7 @@ class InfluxDBRunInfoListener( val runTime = runInfo.runTime if (runTime != null) { influxDB.write( - Point.measurement("ontrack_run_info_${runnableEntity.runnableEntityType.name.toLowerCase()}_time_seconds") + Point.measurement("ontrack_value_run_info_${runnableEntity.runnableEntityType.name.toLowerCase()}_time_seconds") .tag(runnableEntity.runMetricTags) .addField("value", runTime) .addField("name", runnableEntity.runMetricName)