Use Plesk CLI subscription info to populate status; domains inherit status; UI badges
This commit is contained in:
@@ -138,37 +138,24 @@ export async function testPleskConnection(connection: PleskConnection) {
|
||||
}
|
||||
|
||||
export async function listPleskSubscriptions(connection: PleskConnection) {
|
||||
const listOutput = await pleskCliCall(connection, "subscription", ["--list"]);
|
||||
const listResult = await pleskCliCall(connection, "subscription", ["--list"]);
|
||||
|
||||
const subscriptionNames = listOutput
|
||||
const subscriptionNames = (listResult.stdout ?? "")
|
||||
.split(/\r?\n/)
|
||||
.map((line) => line.trim())
|
||||
.filter(Boolean);
|
||||
|
||||
const subscriptions: PleskSubscription[] = [];
|
||||
|
||||
for (const subscriptionName of subscriptionNames) {
|
||||
let status = "unknown";
|
||||
for (const subscriptionName of subscriptionNames.slice(0, 500)) {
|
||||
let status: "active" | "suspended" | "unknown" = "unknown";
|
||||
|
||||
try {
|
||||
const infoOutput = await pleskCliCall(connection, "subscription", [
|
||||
const infoResult = await pleskCliCall(connection, "subscription", [
|
||||
"--info",
|
||||
subscriptionName,
|
||||
]);
|
||||
const normalizedInfo = infoOutput.toLowerCase();
|
||||
|
||||
const hasSuspendedMarker =
|
||||
normalizedInfo.includes("suspended") ||
|
||||
normalizedInfo.includes("webspace-off") ||
|
||||
normalizedInfo.includes("disabled");
|
||||
|
||||
const hasActiveMarker =
|
||||
normalizedInfo.includes("active") ||
|
||||
normalizedInfo.includes("enabled") ||
|
||||
normalizedInfo.includes("ok");
|
||||
|
||||
if (hasSuspendedMarker) status = "suspended";
|
||||
else if (hasActiveMarker || !hasSuspendedMarker) status = "active";
|
||||
status = parseSubscriptionStatusFromInfo(infoResult.stdout ?? "");
|
||||
} catch {
|
||||
status = "unknown";
|
||||
}
|
||||
@@ -184,6 +171,29 @@ export async function listPleskSubscriptions(connection: PleskConnection) {
|
||||
return subscriptions;
|
||||
}
|
||||
|
||||
export function parseSubscriptionStatusFromInfo(
|
||||
stdout: string,
|
||||
): "active" | "suspended" | "unknown" {
|
||||
const line = stdout
|
||||
.split(/\r?\n/)
|
||||
.map((entry) => entry.trim())
|
||||
.find((entry) => /^domain\s+status\s*:/i.test(entry));
|
||||
|
||||
if (!line) return "unknown";
|
||||
|
||||
const value = line
|
||||
.replace(/^domain\s+status\s*:/i, "")
|
||||
.trim()
|
||||
.toLowerCase();
|
||||
|
||||
if (value.includes("ok")) return "active";
|
||||
if (value.includes("suspend") || value.includes("disabled")) {
|
||||
return "suspended";
|
||||
}
|
||||
|
||||
return "unknown";
|
||||
}
|
||||
|
||||
export async function pleskCliCall(
|
||||
connection: PleskConnection,
|
||||
command: string,
|
||||
@@ -208,7 +218,7 @@ export async function pleskCliCall(
|
||||
);
|
||||
}
|
||||
|
||||
return stdout;
|
||||
return { code, stdout, stderr };
|
||||
}
|
||||
|
||||
export async function listPleskDomains(connection: PleskConnection) {
|
||||
|
||||
Reference in New Issue
Block a user