Merge pull request #1067 from Sairenity/1042-minecraft-server-status
Minecraft server status widgetpull/1078/head
commit
65b23b9674
@ -0,0 +1,39 @@
|
|||||||
|
import { useTranslation } from "next-i18next";
|
||||||
|
|
||||||
|
import Container from "components/services/widget/container";
|
||||||
|
import Block from "components/services/widget/block";
|
||||||
|
import useWidgetAPI from "utils/proxy/use-widget-api";
|
||||||
|
|
||||||
|
export default function Component({ service }) {
|
||||||
|
const { widget } = service;
|
||||||
|
const { data: serverData, error: serverError } = useWidgetAPI(widget, "status");
|
||||||
|
const { t } = useTranslation();
|
||||||
|
|
||||||
|
if(serverError){
|
||||||
|
return <Container error={serverError} />;
|
||||||
|
}
|
||||||
|
if (!serverData) {
|
||||||
|
return (
|
||||||
|
<Container service={service}>
|
||||||
|
<Block label="minecraft.status"/>
|
||||||
|
<Block label="minecraft.players" />
|
||||||
|
<Block label="minecraft.version" />
|
||||||
|
</Container>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
const statusIndicator = serverData.online ?
|
||||||
|
<span className="text-green-500">{t("minecraft.up")}</span>:
|
||||||
|
<span className="text-red-500">{t("minecraft.down")}</span>;
|
||||||
|
const players = serverData.players ? `${serverData.players.online} / ${serverData.players.max}` : "-";
|
||||||
|
const version = serverData.version || "-";
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Container service={service}>
|
||||||
|
<Block label="minecraft.status" value={statusIndicator} />
|
||||||
|
<Block label="minecraft.players" value={players} />
|
||||||
|
<Block label="minecraft.version" value={version} />
|
||||||
|
</Container>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,28 @@
|
|||||||
|
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);
|
||||||
|
const url = new URL(serviceWidget.url);
|
||||||
|
try {
|
||||||
|
const pingResponse = await pingWithPromise(url.hostname, url.port || 25565);
|
||||||
|
res.status(200).send({
|
||||||
|
version: pingResponse.version.name,
|
||||||
|
online: true,
|
||||||
|
players: pingResponse.players
|
||||||
|
});
|
||||||
|
} catch (e) {
|
||||||
|
logger.error(e);
|
||||||
|
res.status(200).send({
|
||||||
|
version: undefined,
|
||||||
|
online: false,
|
||||||
|
players: undefined
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,7 @@
|
|||||||
|
import minecraftProxyHandler from "./proxy";
|
||||||
|
|
||||||
|
const widget = {
|
||||||
|
proxyHandler: minecraftProxyHandler
|
||||||
|
}
|
||||||
|
|
||||||
|
export default widget;
|
Loading…
Reference in new issue