mirror of
https://github.com/karl0ss/homepage.git
synced 2025-05-02 13:33:40 +01:00
rewrite minecraft server status widget to directly ping server
This commit is contained in:
parent
f418ee6327
commit
ad66637ff1
@ -20,6 +20,7 @@
|
|||||||
"js-yaml": "^4.1.0",
|
"js-yaml": "^4.1.0",
|
||||||
"json-rpc-2.0": "^1.4.1",
|
"json-rpc-2.0": "^1.4.1",
|
||||||
"memory-cache": "^0.2.0",
|
"memory-cache": "^0.2.0",
|
||||||
|
"minecraft-ping-js": "^1.0.2",
|
||||||
"next": "^12.3.1",
|
"next": "^12.3.1",
|
||||||
"next-i18next": "^12.0.1",
|
"next-i18next": "^12.0.1",
|
||||||
"node-os-utils": "^1.3.7",
|
"node-os-utils": "^1.3.7",
|
||||||
|
17
pnpm-lock.yaml
generated
17
pnpm-lock.yaml
generated
@ -22,6 +22,7 @@ specifiers:
|
|||||||
js-yaml: ^4.1.0
|
js-yaml: ^4.1.0
|
||||||
json-rpc-2.0: ^1.4.1
|
json-rpc-2.0: ^1.4.1
|
||||||
memory-cache: ^0.2.0
|
memory-cache: ^0.2.0
|
||||||
|
minecraft-ping-js: ^1.0.2
|
||||||
next: ^12.3.1
|
next: ^12.3.1
|
||||||
next-i18next: ^12.0.1
|
next-i18next: ^12.0.1
|
||||||
node-os-utils: ^1.3.7
|
node-os-utils: ^1.3.7
|
||||||
@ -53,6 +54,7 @@ dependencies:
|
|||||||
js-yaml: 4.1.0
|
js-yaml: 4.1.0
|
||||||
json-rpc-2.0: 1.4.1
|
json-rpc-2.0: 1.4.1
|
||||||
memory-cache: 0.2.0
|
memory-cache: 0.2.0
|
||||||
|
minecraft-ping-js: 1.0.2
|
||||||
next: 12.3.1_biqbaboplfbrettd7655fr4n2y
|
next: 12.3.1_biqbaboplfbrettd7655fr4n2y
|
||||||
next-i18next: 12.0.1_azq6kxkn3od7qdylwkyksrwopy
|
next-i18next: 12.0.1_azq6kxkn3od7qdylwkyksrwopy
|
||||||
node-os-utils: 1.3.7
|
node-os-utils: 1.3.7
|
||||||
@ -2152,6 +2154,13 @@ packages:
|
|||||||
engines: {node: '>=6'}
|
engines: {node: '>=6'}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/minecraft-ping-js/1.0.2:
|
||||||
|
resolution: {integrity: sha512-h9QYG2n+fBKgp520tXBwR354XRzR/w5wXe8CJCmxKm6jbLpAoLODM8Nj5+ssuIVQF8rtxkAnjwv7PH+7ehFzQQ==}
|
||||||
|
dependencies:
|
||||||
|
node-int64: 0.4.0
|
||||||
|
varint: 6.0.0
|
||||||
|
dev: false
|
||||||
|
|
||||||
/mini-svg-data-uri/1.4.4:
|
/mini-svg-data-uri/1.4.4:
|
||||||
resolution: {integrity: sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==}
|
resolution: {integrity: sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
@ -2288,6 +2297,10 @@ packages:
|
|||||||
- babel-plugin-macros
|
- babel-plugin-macros
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/node-int64/0.4.0:
|
||||||
|
resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==}
|
||||||
|
dev: false
|
||||||
|
|
||||||
/node-os-utils/1.3.7:
|
/node-os-utils/1.3.7:
|
||||||
resolution: {integrity: sha512-fvnX9tZbR7WfCG5BAy3yO/nCLyjVWD6MghEq0z5FDfN+ZXpLWNITBdbifxQkQ25ebr16G0N7eRWJisOcMEHG3Q==}
|
resolution: {integrity: sha512-fvnX9tZbR7WfCG5BAy3yO/nCLyjVWD6MghEq0z5FDfN+ZXpLWNITBdbifxQkQ25ebr16G0N7eRWJisOcMEHG3Q==}
|
||||||
dev: false
|
dev: false
|
||||||
@ -3296,6 +3309,10 @@ packages:
|
|||||||
hasBin: true
|
hasBin: true
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/varint/6.0.0:
|
||||||
|
resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==}
|
||||||
|
dev: false
|
||||||
|
|
||||||
/verror/1.10.0:
|
/verror/1.10.0:
|
||||||
resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==}
|
resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==}
|
||||||
engines: {'0': node >=0.6.0}
|
engines: {'0': node >=0.6.0}
|
||||||
|
27
src/utils/proxy/handlers/minecraft.js
Normal file
27
src/utils/proxy/handlers/minecraft.js
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
import { pingWithPromise } from "minecraft-ping-js";
|
||||||
|
|
||||||
|
import createLogger from "utils/logger";
|
||||||
|
import getServiceWidget from "utils/config/service-helpers";
|
||||||
|
|
||||||
|
const proxyName = "minecraftProxyHandler";
|
||||||
|
const logger = createLogger(proxyName);
|
||||||
|
|
||||||
|
export default async function minecraftProxyHandler(req, res) {
|
||||||
|
const { group, service } = req.query;
|
||||||
|
const serviceWidget = await getServiceWidget(group, service);
|
||||||
|
try {
|
||||||
|
const pingResponse = await pingWithPromise(serviceWidget.domain, serviceWidget.port || 25565);
|
||||||
|
res.status(200).send({
|
||||||
|
version: pingResponse.version.name,
|
||||||
|
online: true,
|
||||||
|
players: pingResponse.players
|
||||||
|
});
|
||||||
|
} catch (e) {
|
||||||
|
logger.warn(e)
|
||||||
|
res.status(500).send({
|
||||||
|
version: undefined,
|
||||||
|
online: false,
|
||||||
|
players: undefined
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
@ -25,21 +25,14 @@ export default function Component({ service }) {
|
|||||||
const statusIndicator = serverData.online ?
|
const statusIndicator = serverData.online ?
|
||||||
<span className="text-green-500">{t("minecraft.up")}</span>:
|
<span className="text-green-500">{t("minecraft.up")}</span>:
|
||||||
<span className="text-red-500">{t("minecraft.down")}</span>;
|
<span className="text-red-500">{t("minecraft.down")}</span>;
|
||||||
|
const players = serverData.players ? `${serverData.players.online} / ${serverData.players.max}` : "-";
|
||||||
|
const version = serverData.version || "-";
|
||||||
|
|
||||||
if(serverData.players){
|
|
||||||
return (
|
return (
|
||||||
<Container service={service}>
|
<Container service={service}>
|
||||||
<Block label="minecraft.status" value={statusIndicator} />
|
<Block label="minecraft.status" value={statusIndicator} />
|
||||||
<Block label="minecraft.players" value={`${serverData.players.online} / ${serverData.players.max}`} />
|
<Block label="minecraft.players" value={players} />
|
||||||
<Block label="minecraft.version" value={serverData.version} />
|
<Block label="minecraft.version" value={version} />
|
||||||
</Container>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return (
|
|
||||||
<Container service={service}>
|
|
||||||
<Block label="minecraft.status" value={statusIndicator} />
|
|
||||||
<Block label="minecraft.players" value="-" />
|
|
||||||
<Block label="minecraft.version" value="-" />
|
|
||||||
</Container>
|
</Container>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -1,12 +1,11 @@
|
|||||||
import genericProxyHandler from "utils/proxy/handlers/generic";
|
import minecraftProxyHandler from "utils/proxy/handlers/minecraft";
|
||||||
import { asJson } from "utils/proxy/api-helpers";
|
import { asJson } from "utils/proxy/api-helpers";
|
||||||
|
|
||||||
const widget = {
|
const widget = {
|
||||||
api: "{url}/{endpoint}/{domain}",
|
proxyHandler: minecraftProxyHandler,
|
||||||
proxyHandler: genericProxyHandler,
|
|
||||||
mappings: {
|
mappings: {
|
||||||
status: {
|
status: {
|
||||||
endpoint: "2",
|
endpoint: "_",
|
||||||
map: (data) => {
|
map: (data) => {
|
||||||
const jsonData = asJson(data);
|
const jsonData = asJson(data);
|
||||||
return {
|
return {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user