From f38cb7b5d86c04b38783b9363fe5d5d7684ac404 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Tue, 8 Aug 2017 10:35:26 +0100 Subject: [PATCH] Improve structure of Flyway endpoint response, add missing properties Closes gh-9973 --- .../boot/actuate/endpoint/FlywayEndpoint.java | 49 ++++++++++--------- .../MvcEndpointPathConfigurationTests.java | 4 +- .../actuate/endpoint/FlywayEndpointTests.java | 8 +-- 3 files changed, 34 insertions(+), 27 deletions(-) diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/FlywayEndpoint.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/FlywayEndpoint.java index d5e33b5376..4280ad2497 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/FlywayEndpoint.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/FlywayEndpoint.java @@ -16,11 +16,12 @@ package org.springframework.boot.actuate.endpoint; -import java.util.ArrayList; -import java.util.Collections; import java.util.Date; +import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; +import java.util.stream.Stream; import org.flywaydb.core.Flyway; import org.flywaydb.core.api.MigrationInfo; @@ -40,14 +41,10 @@ import org.springframework.util.Assert; * @since 1.3.0 */ @ConfigurationProperties(prefix = "endpoints.flyway") -public class FlywayEndpoint extends AbstractEndpoint> { +public class FlywayEndpoint extends AbstractEndpoint> { private final Map flyways; - public FlywayEndpoint(Flyway flyway) { - this(Collections.singletonMap("default", flyway)); - } - public FlywayEndpoint(Map flyways) { super("flyway"); Assert.notEmpty(flyways, "Flyways must be specified"); @@ -55,35 +52,27 @@ public class FlywayEndpoint extends AbstractEndpoint> { } @Override - public List invoke() { - List reports = new ArrayList<>(); + public Map invoke() { + Map reports = new HashMap<>(); for (Map.Entry entry : this.flyways.entrySet()) { - List migrations = new ArrayList<>(); - for (MigrationInfo info : entry.getValue().info().all()) { - migrations.add(new FlywayMigration(info)); - } - reports.add(new FlywayReport(entry.getKey(), migrations)); + reports.put(entry.getKey(), + new FlywayReport(Stream.of(entry.getValue().info().all()) + .map(FlywayMigration::new).collect(Collectors.toList()))); } return reports; } /** - * Flyway report for one datasource. + * Report for one {@link Flyway} instance. */ public static class FlywayReport { - private final String name; private final List migrations; - public FlywayReport(String name, List migrations) { - this.name = name; + public FlywayReport(List migrations) { this.migrations = migrations; } - public String getName() { - return this.name; - } - public List getMigrations() { return this.migrations; } @@ -91,7 +80,7 @@ public class FlywayEndpoint extends AbstractEndpoint> { } /** - * Migration properties. + * Details of a migration performed by Flyway. */ public static class FlywayMigration { @@ -107,8 +96,12 @@ public class FlywayEndpoint extends AbstractEndpoint> { private final MigrationState state; + private final String installedBy; + private final Date installedOn; + private final Integer installedRank; + private final Integer executionTime; public FlywayMigration(MigrationInfo info) { @@ -118,7 +111,9 @@ public class FlywayEndpoint extends AbstractEndpoint> { this.description = info.getDescription(); this.script = info.getScript(); this.state = info.getState(); + this.installedBy = info.getInstalledBy(); this.installedOn = info.getInstalledOn(); + this.installedRank = info.getInstalledRank(); this.executionTime = info.getExecutionTime(); } @@ -150,10 +145,18 @@ public class FlywayEndpoint extends AbstractEndpoint> { return this.state; } + public String getInstalledBy() { + return this.installedBy; + } + public Date getInstalledOn() { return this.installedOn; } + public Integer getInstalledRank() { + return this.installedRank; + } + public Integer getExecutionTime() { return this.executionTime; } diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/MvcEndpointPathConfigurationTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/MvcEndpointPathConfigurationTests.java index f6dd37e641..9a7300751c 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/MvcEndpointPathConfigurationTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/MvcEndpointPathConfigurationTests.java @@ -16,6 +16,8 @@ package org.springframework.boot.actuate.autoconfigure; +import java.util.Collections; + import liquibase.integration.spring.SpringLiquibase; import org.flywaydb.core.Flyway; import org.junit.After; @@ -157,7 +159,7 @@ public class MvcEndpointPathConfigurationTests { @Bean public FlywayEndpoint flyway() { - return new FlywayEndpoint(new Flyway()); + return new FlywayEndpoint(Collections.singletonMap("flyway", new Flyway())); } @Bean diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/FlywayEndpointTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/FlywayEndpointTests.java index d33d6e0305..7705b72b0d 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/FlywayEndpointTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/FlywayEndpointTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2016 the original author or authors. + * Copyright 2012-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,8 @@ package org.springframework.boot.actuate.endpoint; +import java.util.Map; + import org.flywaydb.core.Flyway; import org.junit.Test; @@ -48,8 +50,8 @@ public class FlywayEndpointTests extends AbstractEndpointTests { public static class Config { @Bean - public FlywayEndpoint endpoint(Flyway flyway) { - return new FlywayEndpoint(flyway); + public FlywayEndpoint endpoint(Map flyways) { + return new FlywayEndpoint(flyways); } }