Web: show Flamenco name & version in header

This commit is contained in:
Sybren A. Stüvel 2022-04-12 15:54:58 +02:00
parent caa3481561
commit ec814afa91
2 changed files with 46 additions and 10 deletions

View File

@ -1,5 +1,5 @@
<template> <template>
<header>Flamenco</header> <header>{{ flamencoName }}<span class='flamenco-version'>version: {{ flamencoVersion }}</span></header>
<div class="col-1"> <div class="col-1">
<jobs-table ref="jobsTable" :apiClient="apiClient" @activeJobChange="onActiveJobChanged" /> <jobs-table ref="jobsTable" :apiClient="apiClient" @activeJobChange="onActiveJobChanged" />
</div> </div>
@ -11,18 +11,21 @@
</div> </div>
<footer>Footer <footer>Footer
<update-listener ref="updateListener" :websocketURL="websocketURL" @jobUpdate="onJobUpdate" @message="onChatMessage" <update-listener ref="updateListener" :websocketURL="websocketURL" @jobUpdate="onJobUpdate" @message="onChatMessage"
@reconnected="onReconnected" /> @sioReconnected="onSIOReconnected" @sioDisconnected="onSIODisconnected" />
</footer> </footer>
</template> </template>
<script> <script>
import * as urls from './urls' import * as urls from './urls'
import { ApiClient } from './manager-api'; import * as API from './manager-api';
import JobsTable from './components/JobsTable.vue' import JobsTable from './components/JobsTable.vue'
import JobDetails from './components/JobDetails.vue' import JobDetails from './components/JobDetails.vue'
import TaskDetails from './components/TaskDetails.vue' import TaskDetails from './components/TaskDetails.vue'
import UpdateListener from './components/UpdateListener.vue' import UpdateListener from './components/UpdateListener.vue'
const DEFAULT_FLAMENCO_NAME = "Flamenco";
const DEFAULT_FLAMENCO_VERSION = "unknown";
export default { export default {
name: 'App', name: 'App',
components: { components: {
@ -30,14 +33,18 @@ export default {
}, },
data: () => { data: () => {
return { return {
apiClient: new ApiClient(urls.api()), apiClient: new API.ApiClient(urls.api()),
websocketURL: urls.ws(), websocketURL: urls.ws(),
messages: [], messages: [],
activeJobSummary: {}, activeJobSummary: {},
flamencoName: DEFAULT_FLAMENCO_NAME,
flamencoVersion: DEFAULT_FLAMENCO_VERSION,
}; };
}, },
mounted() { }, mounted() {
this.fetchManagerInfo();
},
methods: { methods: {
// UI component event handlers: // UI component event handlers:
onActiveJobChanged(jobSummary) { onActiveJobChanged(jobSummary) {
@ -45,7 +52,7 @@ export default {
this.activeJobSummary = jobSummary; this.activeJobSummary = jobSummary;
}, },
// SocketIO event handlers: // SocketIO data event handlers:
sendMessage(message) { sendMessage(message) {
this.$refs.jobsListener.sendBroadcastMessage("typer", message); this.$refs.jobsListener.sendBroadcastMessage("typer", message);
}, },
@ -63,9 +70,24 @@ export default {
console.log("chat message received:", message); console.log("chat message received:", message);
this.messages.push(`${message.text}`); this.messages.push(`${message.text}`);
}, },
onReconnected() {
this.$refs.jobsTable.onReconnected(); // SocketIO connection event handlers:
onSIOReconnected() {
this.$refs.jobsTable.onSIOReconnected();
this.fetchManagerInfo();
}, },
onSIODisconnected(reason) {
this.flamencoName = DEFAULT_FLAMENCO_NAME;
this.flamencoVersion = DEFAULT_FLAMENCO_VERSION;
},
fetchManagerInfo() {
const metaAPI = new API.MetaApi(this.apiClient);
metaAPI.getVersion().then((version) => {
console.log("version:", version);
this.flamencoName = version.name;
this.flamencoVersion = version.version;
})
}
}, },
} }
</script> </script>
@ -101,6 +123,11 @@ header {
color: #EEE; color: #EEE;
} }
header span.flamenco-version {
float: right;
font-size: small;
}
h2.column-title { h2.column-title {
margin-top: 0; margin-top: 0;
font-size: 12pt; font-size: 12pt;

View File

@ -7,7 +7,12 @@ import io from "socket.io-client";
import * as API from "../manager-api" import * as API from "../manager-api"
export default { export default {
emits: ["jobUpdate", "taskUpdate", "message", "reconnected"], emits: [
// Data from Flamenco Manager:
"jobUpdate", "taskUpdate", "message",
// SocketIO events:
"sioReconnected", "sioDisconnected"
],
props: ["websocketURL"], props: ["websocketURL"],
data() { data() {
return { return {
@ -42,9 +47,13 @@ export default {
console.log("socketIO connection timeout:", timeout); console.log("socketIO connection timeout:", timeout);
}); });
this.socket.on("disconnect", (reason) => {
console.log("socketIO disconnected:", reason);
this.$emit("sioDisconnected", reason);
});
this.socket.on("reconnect", (attemptNumber) => { this.socket.on("reconnect", (attemptNumber) => {
console.log("socketIO reconnected after", attemptNumber, "attempts"); console.log("socketIO reconnected after", attemptNumber, "attempts");
this.$emit("reconnected"); this.$emit("sioReconnected", attemptNumber);
}); });
this.socket.on("/jobs", (jobUpdate) => { this.socket.on("/jobs", (jobUpdate) => {