[REV] Switch to use IDS over server names
This commit is contained in:
parent
e94aca7c96
commit
91587f66b2
21 changed files with 196 additions and 221 deletions
|
@ -1,51 +1,42 @@
|
|||
import k8s from "@kubernetes/client-node";
|
||||
import {
|
||||
getDeployment,
|
||||
getDeployments,
|
||||
getServerAssets,
|
||||
scaleDeployment,
|
||||
} from "./k8s-server-control.js";
|
||||
import { ERR } from "../util/logging.js";
|
||||
import ExpressClientError from "../util/ExpressClientError.js";
|
||||
import { getDeployments } from "./k8s-server-control.js";
|
||||
const kc = new k8s.KubeConfig();
|
||||
kc.loadFromDefault();
|
||||
|
||||
const k8sMetrics = new k8s.Metrics(kc);
|
||||
const namespace = process.env.MCL_SERVER_NAMESPACE;
|
||||
|
||||
export async function startServerContainer(serverSpec) {
|
||||
const { name } = serverSpec;
|
||||
try {
|
||||
await scaleDeployment(name, true);
|
||||
} catch (e) {
|
||||
ERR("SERVER CONTROL", e);
|
||||
throw new ExpressClientError({
|
||||
c: 500,
|
||||
m: `Error updating server '${name}'!\n`,
|
||||
});
|
||||
}
|
||||
}
|
||||
function getServerMetrics(podMetricsRes, serverId, serverAvailable) {
|
||||
const pod = podMetricsRes.items.find(({ metadata: md }) => {
|
||||
return (
|
||||
md.annotations &&
|
||||
md.annotations["minecluster.dunemask.net/id"] === serverId
|
||||
);
|
||||
});
|
||||
|
||||
export async function stopServerContainer(serverSpec) {
|
||||
const { name } = serverSpec;
|
||||
try {
|
||||
await scaleDeployment(name, false);
|
||||
} catch (e) {
|
||||
ERR("SERVER CONTROL", e);
|
||||
throw new ExpressClientError({
|
||||
c: 500,
|
||||
m: `Error updating server '${name}'!`,
|
||||
});
|
||||
if (serverAvailable && pod) {
|
||||
const podCpus = pod.containers.map(
|
||||
({ usage }) => parseInt(usage.cpu) / 1_000_000,
|
||||
);
|
||||
const podMems = pod.containers.map(
|
||||
({ usage }) => parseInt(usage.memory) / 1024,
|
||||
);
|
||||
metrics = {
|
||||
cpu: Math.ceil(podCpus.reduce((a, b) => a + b)),
|
||||
memory: Math.ceil(podMems.reduce((a, b) => a + b)),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
export async function getInstances() {
|
||||
const serverDeployments = await getDeployments();
|
||||
const podMetricsResponse = await k8sMetrics.getPodMetrics(namespace);
|
||||
var name, metrics, services, serverAvailable, ftpAvailable;
|
||||
const podMetricsRes = await k8sMetrics.getPodMetrics(namespace);
|
||||
var name, serverId, metrics, services, serverAvailable, ftpAvailable;
|
||||
const serverInstances = serverDeployments.map((s) => {
|
||||
name = s.metadata.annotations["minecluster.dunemask.net/server-name"];
|
||||
serverId = s.metadata.annotations["minecluster.dunemask.net/id"];
|
||||
name = s.metadata.name;
|
||||
metrics = null;
|
||||
|
||||
const { containers } = s.spec.template.spec;
|
||||
services = containers.map(({ name }) => name.split("-").pop());
|
||||
const serverStatusList = s.status.conditions.map(
|
||||
|
@ -57,23 +48,15 @@ export async function getInstances() {
|
|||
) !== undefined;
|
||||
serverAvailable = services.includes(`server`) && deploymentAvailable;
|
||||
ftpAvailable = services.includes("ftp") && deploymentAvailable;
|
||||
|
||||
const pod = podMetricsResponse.items.find(({ metadata: md }) => {
|
||||
return md.labels && md.labels.app && md.labels.app === `mcl-${name}-app`;
|
||||
});
|
||||
if (serverAvailable && pod) {
|
||||
const podCpus = pod.containers.map(
|
||||
({ usage }) => parseInt(usage.cpu) / 1_000_000,
|
||||
);
|
||||
const podMems = pod.containers.map(
|
||||
({ usage }) => parseInt(usage.memory) / 1024,
|
||||
);
|
||||
metrics = {
|
||||
cpu: Math.ceil(podCpus.reduce((a, b) => a + b)),
|
||||
memory: Math.ceil(podMems.reduce((a, b) => a + b)),
|
||||
};
|
||||
}
|
||||
return { name, metrics, services, serverAvailable, ftpAvailable };
|
||||
metrics = getServerMetrics(podMetricsRes, serverId, serverAvailable);
|
||||
return {
|
||||
name,
|
||||
id: serverId,
|
||||
metrics,
|
||||
services,
|
||||
serverAvailable,
|
||||
ftpAvailable,
|
||||
};
|
||||
});
|
||||
return serverInstances;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue