Skip to content

Commit 9d07f76

Browse files
Merge pull request #6524 from davidwatkins73/waltz-6497-version-display
Version Information Page
2 parents a8cb6b8 + 4658fbc commit 9d07f76

9 files changed

Lines changed: 244 additions & 1 deletion

File tree

pom.xml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -614,6 +614,19 @@
614614
<artifactId>maven-failsafe-plugin</artifactId>
615615
<version>${surefire.version}</version>
616616
</plugin>
617+
<plugin>
618+
<groupId>org.apache.maven.plugins</groupId>
619+
<artifactId>maven-jar-plugin</artifactId>
620+
<configuration>
621+
<archive>
622+
<manifest>
623+
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
624+
<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
625+
</manifest>
626+
</archive>
627+
</configuration>
628+
</plugin>
629+
617630
</plugins>
618631
</build>
619632
<reporting>
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package org.finos.waltz.model.system_version;
2+
3+
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
4+
import org.immutables.value.Value;
5+
6+
import java.util.List;
7+
8+
@Value.Immutable
9+
@JsonSerialize(as = ImmutableSystemVersionInfo.class)
10+
public abstract class SystemVersionInfo {
11+
12+
public abstract String packageVersion();
13+
public abstract List<String> databaseVersions();
14+
}

waltz-ng/client/system/routes.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import RelationshipKindsView from "./relationship-kinds-view";
3434
import ReassignRecipientsView from "./reassign-recipients-view";
3535
import ColorGradientView from "./color-gradient-view";
3636
import NavAidBuilderView from "./nav-aid-builder-view";
37+
import VersionInfoView from "./version-info-view";
3738

3839

3940
const baseState = {
@@ -130,6 +131,11 @@ const navAidBuilderState = {
130131
views: {"content@": NavAidBuilderView}
131132
};
132133

134+
const versionInfoState = {
135+
url: "/version-info",
136+
views: {"content@": VersionInfoView}
137+
};
138+
133139

134140
function setupRoutes($stateProvider) {
135141
$stateProvider
@@ -148,7 +154,8 @@ function setupRoutes($stateProvider) {
148154
.state("main.system.recalculate", recalculateState)
149155
.state("main.system.reassign-recipients", reassignRecipientsState)
150156
.state("main.system.color-gradient", colorGradientState)
151-
.state("main.system.nav-aid-builder", navAidBuilderState);
157+
.state("main.system.nav-aid-builder", navAidBuilderState)
158+
.state("main.system.version-info", versionInfoState);
152159
}
153160

154161

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
<script>
2+
3+
import {onMount} from "svelte";
4+
import PageHeader from "../../../common/svelte/PageHeader.svelte";
5+
import ViewLink from "../../../common/svelte/ViewLink.svelte";
6+
import Icon from "../../../common/svelte/Icon.svelte";
7+
const endpoint = "api/system-version";
8+
9+
let packageVersion = "";
10+
let databaseVersions = [];
11+
12+
onMount(async function () {
13+
const response = await fetch(endpoint);
14+
const data = await response.json();
15+
packageVersion = data.packageVersion;
16+
databaseVersions = data.databaseVersions;
17+
});
18+
19+
</script>
20+
21+
22+
23+
<PageHeader icon="bullseye"
24+
name="System Version Information">
25+
<div slot="breadcrumbs">
26+
<ol class="waltz-breadcrumbs">
27+
<li><ViewLink state="main">Home</ViewLink></li>
28+
<li><ViewLink state="main.system.list">System Admin</ViewLink></li>
29+
<li>System Version Info</li>
30+
</ol>
31+
</div>
32+
</PageHeader>
33+
34+
<div class="waltz-page-summary waltz-page-summary-attach">
35+
<div class="row">
36+
<div class="col-md-12">
37+
<div class="help-block">
38+
This page shows version information for this installation of Waltz.
39+
</div>
40+
<h3>
41+
<Icon name="code"/>
42+
Package Version
43+
</h3>
44+
<div class="help-block">
45+
This version information is read from the jar manifest.
46+
If it shows nulls you are most likely running an older (pre 1.48) build or direclty from a dev env.
47+
</div>
48+
<div class="version-info">{packageVersion}</div>
49+
50+
<h3>
51+
<Icon name="database"/>
52+
Database Versions
53+
</h3>
54+
<div class="help-block">
55+
This information is taken from the liquibase changelog.
56+
It reads the table <code>databasechangelog</code> and shows the unique filenames that have been applied.
57+
</div>
58+
{#each databaseVersions as dbv}
59+
<div class="version-info">
60+
{dbv}
61+
</div>
62+
{/each}
63+
</div>
64+
</div>
65+
</div>
66+
67+
<style>
68+
.version-info {
69+
font-family: monospace;
70+
}
71+
</style>

waltz-ng/client/system/system-admin-list.html

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,18 @@ <h3>Internals</h3>
259259
See configuration settings
260260
</p>
261261
</div>
262+
<div>
263+
<a ui-sref="main.system.version-info">
264+
<waltz-icon class='text-muted'
265+
fixed-width="true"
266+
name="bullseye">
267+
</waltz-icon>
268+
Version Info
269+
</a>
270+
<p class="text-muted small">
271+
See version information
272+
</p>
273+
</div>
262274

263275
</div>
264276

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import VersionInfoPage from "./svelte/version-info/VersionInfoPage.svelte";
2+
import {initialiseData} from "../common";
3+
4+
const initialState = {
5+
VersionInfoPage
6+
};
7+
8+
9+
function controller() {
10+
initialiseData(this, initialState);
11+
}
12+
13+
const page = {
14+
controller,
15+
template: `<waltz-svelte-component component="$ctrl.VersionInfoPage"></waltz-svelte-component>`,
16+
controllerAs: '$ctrl'
17+
};
18+
19+
20+
export default page;

waltz-service/src/main/java/org/finos/waltz/service/changelog/ChangeLogService.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545

4646

4747
import java.sql.Date;
48+
import java.util.Collection;
4849
import java.util.List;
4950
import java.util.Optional;
5051
import java.util.Set;
@@ -149,6 +150,11 @@ public int write(ChangeLog changeLog) {
149150
}
150151

151152

153+
public int[] write(Collection<ChangeLog> changeLogs) {
154+
return changeLogDao.write(changeLogs);
155+
}
156+
157+
152158
/**
153159
* Given an entity ref this function will determine all changelog entries made _after_ the latest
154160
* attestations for that entity. Change log is matched between the attestation kind and the change
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package org.finos.waltz.service.system_version;
2+
3+
import org.finos.waltz.model.system_version.ImmutableSystemVersionInfo;
4+
import org.finos.waltz.model.system_version.SystemVersionInfo;
5+
import org.jooq.CommonTableExpression;
6+
import org.jooq.DSLContext;
7+
import org.jooq.Field;
8+
import org.jooq.Record2;
9+
import org.jooq.impl.DSL;
10+
import org.springframework.beans.factory.annotation.Autowired;
11+
import org.springframework.stereotype.Service;
12+
13+
import java.util.List;
14+
15+
import static org.finos.waltz.schema.Tables.DATABASECHANGELOG;
16+
17+
@Service
18+
public class SystemVersionService {
19+
20+
private final DSLContext dsl;
21+
22+
@Autowired
23+
public SystemVersionService(DSLContext dsl) {
24+
this.dsl = dsl;
25+
}
26+
27+
28+
public SystemVersionInfo getVersionInfo() {
29+
return ImmutableSystemVersionInfo
30+
.builder()
31+
.packageVersion(packageVersion())
32+
.databaseVersions(databaseVersions())
33+
.build();
34+
}
35+
36+
private String packageVersion() {
37+
String version = getClass().getPackage().getImplementationVersion();
38+
String title = getClass().getPackage().getImplementationTitle();
39+
String vendor = getClass().getPackage().getImplementationVendor();
40+
41+
return String.format("%s - %s - %s", version, title, vendor);
42+
}
43+
44+
45+
private List<String> databaseVersions() {
46+
Field<String> filenameField = DSL.field("filename", String.class);
47+
Field<Integer> rowNumField = DSL.field("rn", Integer.class);
48+
49+
CommonTableExpression<Record2<String, Integer>> versionCTE = DSL
50+
.name("raw")
51+
.fields(filenameField.getName(), rowNumField.getName())
52+
.as(DSL
53+
.select(
54+
DATABASECHANGELOG.FILENAME,
55+
DSL.rowNumber()
56+
.over(DSL
57+
.partitionBy(DATABASECHANGELOG.FILENAME)
58+
.orderBy(DATABASECHANGELOG.DATEEXECUTED)))
59+
.from(DATABASECHANGELOG)
60+
.orderBy(DATABASECHANGELOG.DATEEXECUTED.desc()));
61+
62+
return dsl
63+
.with(versionCTE)
64+
.select(filenameField)
65+
.from(versionCTE)
66+
.where(rowNumField.eq(1))
67+
.fetch(filenameField);
68+
}
69+
70+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package org.finos.waltz.web.endpoints.api;
2+
3+
import org.finos.waltz.service.system_version.SystemVersionService;
4+
import org.finos.waltz.web.endpoints.Endpoint;
5+
import org.springframework.beans.factory.annotation.Autowired;
6+
import org.springframework.stereotype.Service;
7+
8+
import static org.finos.waltz.web.WebUtilities.mkPath;
9+
import static org.finos.waltz.web.endpoints.EndpointUtilities.getForDatum;
10+
11+
@Service
12+
public class SystemVersionEndpoint implements Endpoint {
13+
14+
private static final String BASE_URL = mkPath("api", "system-version");
15+
16+
private final SystemVersionService systemVersionService;
17+
18+
19+
@Autowired
20+
public SystemVersionEndpoint(SystemVersionService systemVersionService) {
21+
this.systemVersionService = systemVersionService;
22+
}
23+
24+
25+
@Override
26+
public void register() {
27+
getForDatum(BASE_URL, (req, resp) -> systemVersionService.getVersionInfo());
28+
}
29+
30+
}

0 commit comments

Comments
 (0)