CL3.6b instance overview and CL3.7 domain status badges

This commit is contained in:
2026-03-05 09:41:46 +00:00
parent 0dba5d2ebf
commit 0b7a95947f
2 changed files with 42 additions and 13 deletions

View File

@@ -49,6 +49,18 @@ type Props = {
>; >;
}; };
function getDomainStatusBadge(status: string | null) {
const normalized = (status ?? "unknown").toLowerCase();
if (normalized === "active") return "bg-emerald-100 text-emerald-700";
if (normalized === "suspended") return "bg-rose-100 text-rose-700";
if (normalized === "inactive") return "bg-amber-100 text-amber-700";
return "bg-slate-100 text-slate-600";
}
export function DashboardControls({ export function DashboardControls({
instances, instances,
subscriptions, subscriptions,
@@ -351,14 +363,28 @@ export function DashboardControls({
<span className="font-medium">{instance.status}</span> <span className="font-medium">{instance.status}</span>
</p> </p>
<p className="text-xs text-slate-500"> <p className="text-xs text-slate-500">
Last sync: {formatDateTime(instance.last_sync_at)} Subscriptions: {instance.last_sync_subscriptions ?? 0}
{instance.last_sync_status
? ` (${instance.last_sync_status})`
: ""}
</p> </p>
<p className="text-xs text-slate-500"> <p className="text-xs text-slate-500">
Last counts: {instance.last_sync_subscriptions ?? 0}{" "} Domains: {instance.last_sync_domains ?? 0}
subscriptions, {instance.last_sync_domains ?? 0} domains </p>
<p className="text-xs text-slate-500">
Last sync status:{" "}
<span
className={`inline-flex rounded px-2 py-0.5 text-[11px] font-medium ${
instance.last_sync_status === "success"
? "bg-emerald-100 text-emerald-700"
: instance.last_sync_status === "failed" ||
instance.last_sync_status === "error"
? "bg-rose-100 text-rose-700"
: "bg-slate-100 text-slate-600"
}`}
>
{instance.last_sync_status ?? "unknown"}
</span>
</p>
<p className="text-xs text-slate-500">
Last sync time: {formatDateTime(instance.last_sync_at)}
</p> </p>
<p className="text-xs text-slate-500"> <p className="text-xs text-slate-500">
Last connected:{" "} Last connected:{" "}
@@ -525,7 +551,11 @@ export function DashboardControls({
{domain.domain_name} {domain.domain_name}
</td> </td>
<td className="px-2 py-2"> <td className="px-2 py-2">
<span
className={`inline-flex rounded px-2 py-0.5 text-xs font-medium ${getDomainStatusBadge(domain.status)}`}
>
{domain.status ?? "unknown"} {domain.status ?? "unknown"}
</span>
</td> </td>
<td className="px-2 py-2"> <td className="px-2 py-2">
{domain.hosting_type ?? "unknown"} {domain.hosting_type ?? "unknown"}

View File

@@ -117,6 +117,9 @@ export async function syncPleskInstance(
.map((item: any) => { .map((item: any) => {
const domainId = item?.id ?? item?.guid ?? item?.name; const domainId = item?.id ?? item?.guid ?? item?.name;
const domainName = item?.name ?? item?.domain_name ?? item?.domain; const domainName = item?.name ?? item?.domain_name ?? item?.domain;
const status =
item?.status ??
(item?.hosting_type === "virtual" ? "active" : "inactive");
const externalSubscriptionId = const externalSubscriptionId =
item?.subscription?.id ?? item?.subscription_id ?? item?.webspace_id; item?.subscription?.id ?? item?.subscription_id ?? item?.webspace_id;
const rawCreated = item?.created_at ?? item?.created; const rawCreated = item?.created_at ?? item?.created;
@@ -141,12 +144,8 @@ export async function syncPleskInstance(
: null, : null,
plesk_domain_id: String(domainId), plesk_domain_id: String(domainId),
domain_name: String(domainName), domain_name: String(domainName),
status: item?.status ? String(item.status) : null, status: status ? String(status) : "unknown",
hosting_type: item?.hosting_type hosting_type: item?.hosting_type ? String(item.hosting_type) : null,
? String(item.hosting_type)
: item?.hosting?.type
? String(item.hosting.type)
: null,
source_created_at: sourceCreatedAt, source_created_at: sourceCreatedAt,
aliases_count: aliasesCount, aliases_count: aliasesCount,
}; };