feat(plesk): parse subscription status from CLI
This commit is contained in:
@@ -16,6 +16,8 @@ export type PleskSubscription = {
|
|||||||
external_id?: string;
|
external_id?: string;
|
||||||
name?: string;
|
name?: string;
|
||||||
status?: string;
|
status?: string;
|
||||||
|
status_raw?: string | null;
|
||||||
|
status_sync_error?: string | null;
|
||||||
owner_login?: string;
|
owner_login?: string;
|
||||||
owner?: { login?: string };
|
owner?: { login?: string };
|
||||||
plan_name?: string;
|
plan_name?: string;
|
||||||
@@ -148,16 +150,27 @@ export async function listPleskSubscriptions(connection: PleskConnection) {
|
|||||||
const subscriptions: PleskSubscription[] = [];
|
const subscriptions: PleskSubscription[] = [];
|
||||||
|
|
||||||
for (const subscriptionName of subscriptionNames.slice(0, 500)) {
|
for (const subscriptionName of subscriptionNames.slice(0, 500)) {
|
||||||
let status: "active" | "suspended" | "unknown" = "unknown";
|
let status: "active" | "suspended" | "disabled" | "expired" | "unknown" =
|
||||||
|
"unknown";
|
||||||
|
let statusRaw: string | null = null;
|
||||||
|
let statusSyncError: string | null = null;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const infoResult = await pleskCliCall(connection, "subscription", [
|
const infoResult = await pleskCliCall(connection, "subscription", [
|
||||||
"--info",
|
"--info",
|
||||||
subscriptionName,
|
subscriptionName,
|
||||||
]);
|
]);
|
||||||
status = parseSubscriptionStatusFromInfo(infoResult.stdout ?? "");
|
const parsed = parseSubscriptionStatusDetailsFromInfo(
|
||||||
} catch {
|
infoResult.stdout ?? "",
|
||||||
|
);
|
||||||
|
status = parsed.status;
|
||||||
|
statusRaw = parsed.statusRaw;
|
||||||
|
} catch (error) {
|
||||||
status = "unknown";
|
status = "unknown";
|
||||||
|
statusSyncError =
|
||||||
|
error instanceof Error
|
||||||
|
? error.message.slice(0, 1000)
|
||||||
|
: "status_sync_failed";
|
||||||
}
|
}
|
||||||
|
|
||||||
subscriptions.push({
|
subscriptions.push({
|
||||||
@@ -165,33 +178,57 @@ export async function listPleskSubscriptions(connection: PleskConnection) {
|
|||||||
subscription_id: subscriptionName,
|
subscription_id: subscriptionName,
|
||||||
name: subscriptionName,
|
name: subscriptionName,
|
||||||
status,
|
status,
|
||||||
|
status_raw: statusRaw,
|
||||||
|
status_sync_error: statusSyncError,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
return subscriptions;
|
return subscriptions;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function parseSubscriptionStatusFromInfo(
|
export function parseSubscriptionStatusDetailsFromInfo(stdout: string): {
|
||||||
stdout: string,
|
status: "active" | "suspended" | "disabled" | "expired" | "unknown";
|
||||||
): "active" | "suspended" | "unknown" {
|
statusRaw: string | null;
|
||||||
|
} {
|
||||||
const line = stdout
|
const line = stdout
|
||||||
.split(/\r?\n/)
|
.split(/\r?\n/)
|
||||||
.map((entry) => entry.trim())
|
.map((entry) => entry.trim())
|
||||||
.find((entry) => /^domain\s+status\s*:/i.test(entry));
|
.find((entry) => /^domain\s+status\s*:/i.test(entry));
|
||||||
|
|
||||||
if (!line) return "unknown";
|
if (!line) {
|
||||||
|
return { status: "unknown", statusRaw: null };
|
||||||
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";
|
const value = line.replace(/^domain\s+status\s*:/i, "").trim();
|
||||||
|
const normalized = value.toLowerCase();
|
||||||
|
|
||||||
|
if (normalized.includes("expired")) {
|
||||||
|
return { status: "expired", statusRaw: value };
|
||||||
|
}
|
||||||
|
|
||||||
|
if (normalized.includes("disabled")) {
|
||||||
|
return { status: "disabled", statusRaw: value };
|
||||||
|
}
|
||||||
|
|
||||||
|
if (normalized.includes("suspend")) {
|
||||||
|
return { status: "suspended", statusRaw: value };
|
||||||
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
normalized.includes("ok") ||
|
||||||
|
normalized.includes("active") ||
|
||||||
|
normalized.includes("enabled")
|
||||||
|
) {
|
||||||
|
return { status: "active", statusRaw: value };
|
||||||
|
}
|
||||||
|
|
||||||
|
return { status: "unknown", statusRaw: value };
|
||||||
|
}
|
||||||
|
|
||||||
|
export function parseSubscriptionStatusFromInfo(
|
||||||
|
stdout: string,
|
||||||
|
): "active" | "suspended" | "disabled" | "expired" | "unknown" {
|
||||||
|
return parseSubscriptionStatusDetailsFromInfo(stdout).status;
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function pleskCliCall(
|
export async function pleskCliCall(
|
||||||
|
|||||||
Reference in New Issue
Block a user