From 83b720eade77f6737f1bb9616304e035f815ba4a Mon Sep 17 00:00:00 2001 From: bbassie Date: Thu, 4 Nov 2021 01:39:28 +0100 Subject: [PATCH] Added public_address field to lists - InstanceList - SlavesPage Added public_address field to messages - slaveProperties - instanceProperties --- packages/lib/link/messages.js | 2 ++ packages/lib/schema.js | 1 + packages/master/src/ControlConnection.js | 4 ++++ packages/master/src/Master.js | 1 + packages/master/src/SlaveConnection.js | 1 + packages/slave/slave.js | 1 + packages/web_ui/src/components/InstanceList.jsx | 17 ++++++++++++++++- packages/web_ui/src/components/SlavesPage.jsx | 13 +++++++++++-- 8 files changed, 37 insertions(+), 3 deletions(-) diff --git a/packages/lib/link/messages.js b/packages/lib/link/messages.js index 5a13f6dd..b09e3134 100644 --- a/packages/lib/link/messages.js +++ b/packages/lib/link/messages.js @@ -337,6 +337,7 @@ let slaveProperties = { "name": { type: "string" }, "id": { type: "integer" }, "connected": { type: "boolean" }, + "public_address": { type: ["null", "string"] }, }; messages.listSlaves = new Request({ @@ -372,6 +373,7 @@ let instanceProperties = { "name": { type: "string" }, "id": { type: "integer" }, "assigned_slave": { type: ["null", "integer"] }, + "game_port": { type: ["null", "integer"] }, "status": { enum: [ "unknown", "unassigned", "stopped", "starting", "running", "stopping", "creating_save", "exporting_data", "deleted", diff --git a/packages/lib/schema.js b/packages/lib/schema.js index da43a843..17157876 100644 --- a/packages/lib/schema.js +++ b/packages/lib/schema.js @@ -178,6 +178,7 @@ const clientHandshake = ajv.compile({ "version": { type: "string" }, "name": { type: "string" }, "id": { type: "integer" }, + "public_address": { type: "string" }, "plugins": { type: "object", additionalProperties: { type: "string" }, diff --git a/packages/master/src/ControlConnection.js b/packages/master/src/ControlConnection.js index 69e1f5e9..dfc07981 100644 --- a/packages/master/src/ControlConnection.js +++ b/packages/master/src/ControlConnection.js @@ -106,6 +106,7 @@ class ControlConnection extends BaseConnection { version: slave.version, id: slave.id, name: slave.name, + public_address: slave.public_address, connected: this._master.wsServer.slaveConnections.has(slave.id), }); } @@ -169,6 +170,7 @@ class ControlConnection extends BaseConnection { id, name: instance.config.get("instance.name"), assigned_slave: instance.config.get("instance.assigned_slave"), + game_port: instance.config.get("factorio.game_port"), status: instance.status, }; } @@ -180,6 +182,7 @@ class ControlConnection extends BaseConnection { id: instance.config.get("instance.id"), name: instance.config.get("instance.name"), assigned_slave: instance.config.get("instance.assigned_slave"), + game_port: instance.config.get("factorio.game_port"), status: instance.status, }); } @@ -199,6 +202,7 @@ class ControlConnection extends BaseConnection { id: instance.config.get("instance.id"), name: instance.config.get("instance.name"), assigned_slave: instance.config.get("instance.assigned_slave"), + game_port: instance.config.get("factorio.game_port"), status: instance.status, }); } diff --git a/packages/master/src/Master.js b/packages/master/src/Master.js index c4f2ee6e..72b525a7 100644 --- a/packages/master/src/Master.js +++ b/packages/master/src/Master.js @@ -368,6 +368,7 @@ class Master { version: slave.version, id: slave.id, name: slave.name, + public_address: slave.public_address, connected: this.wsServer.slaveConnections.has(slave.id), }; diff --git a/packages/master/src/SlaveConnection.js b/packages/master/src/SlaveConnection.js index 6c2319dd..dde922d1 100644 --- a/packages/master/src/SlaveConnection.js +++ b/packages/master/src/SlaveConnection.js @@ -28,6 +28,7 @@ class SlaveConnection extends BaseConnection { id: this._id, name: this._name, version: this._version, + public_address: registerData.public_address, plugins: registerData.plugins, }); diff --git a/packages/slave/slave.js b/packages/slave/slave.js index ddf0cd32..222c6687 100755 --- a/packages/slave/slave.js +++ b/packages/slave/slave.js @@ -1004,6 +1004,7 @@ class SlaveConnector extends libLink.WebSocketClientConnector { version, id: this.slaveConfig.get("slave.id"), name: this.slaveConfig.get("slave.name"), + public_address: this.slaveConfig.get("slave.public_address"), plugins, }); } diff --git a/packages/web_ui/src/components/InstanceList.jsx b/packages/web_ui/src/components/InstanceList.jsx index 39f77156..c5eb002a 100644 --- a/packages/web_ui/src/components/InstanceList.jsx +++ b/packages/web_ui/src/components/InstanceList.jsx @@ -19,7 +19,13 @@ export default function InstanceList(props) { } return String(slaveId); } - + function slavePublicAddress(slaveId) { + let slave = slaveList.find(s => s.id === slaveId); + if (slave) { + return slave.public_address; + } + return null; + } let columns = [ { title: "Name", @@ -33,6 +39,15 @@ export default function InstanceList(props) { render: instance => slaveName(instance["assigned_slave"]), sorter: (a, b) => strcmp(slaveName(a["assigned_slave"]), slaveName(b["assigned_slave"])), }, + { + title: "Public address", + key: "public_address", + render: instance => { + let address = slavePublicAddress(instance["assigned_slave"]); + return address ? `${address}:${instance["game_port"] || "unknown"}` : ""; + }, + sorter: (a, b) => strcmp(slavePublicAddress(a["assigned_slave"]), slavePublicAddress(b["assigned_slave"])), + }, { title: "Status", dataIndex: "status", diff --git a/packages/web_ui/src/components/SlavesPage.jsx b/packages/web_ui/src/components/SlavesPage.jsx index 9333752a..24cb17ed 100644 --- a/packages/web_ui/src/components/SlavesPage.jsx +++ b/packages/web_ui/src/components/SlavesPage.jsx @@ -1,6 +1,6 @@ import React, { useContext, useRef, useState } from "react"; import { useHistory } from "react-router-dom"; -import { Button, Form, Input, Modal, PageHeader, Table } from "antd"; +import { Button, Form, Input, Modal, PageHeader, Table, Tag } from "antd"; import { libLink } from "@clusterio/lib"; @@ -104,10 +104,19 @@ export default function SlavesPage() { dataIndex: "version", sorter: (a, b) => strcmp(a["version"], b["version"]), }, + { + title: "Public address", + dataIndex: "public_address", + sorter: (a, b) => strcmp(a["public_address"], b["public_address"]), + }, { title: "Connected", key: "connected", - render: slave => slave["connected"] && "Yes", + render: slave => + {slave["connected"] ? "Connected" : "Disconnected"} + , sorter: (a, b) => a["connected"] - b["connected"], }, ]}