diff --git a/web/src/admin/admin-overview/AdminOverviewPage.ts b/web/src/admin/admin-overview/AdminOverviewPage.ts
index c0d0277092..005bc34f94 100644
--- a/web/src/admin/admin-overview/AdminOverviewPage.ts
+++ b/web/src/admin/admin-overview/AdminOverviewPage.ts
@@ -7,7 +7,7 @@ import "#admin/admin-overview/cards/VersionStatusCard";
import "#admin/admin-overview/cards/WorkerStatusCard";
import "#admin/admin-overview/charts/AdminLoginAuthorizeChart";
import "#admin/admin-overview/charts/OutpostStatusChart";
-// import "#admin/admin-overview/charts/SyncStatusChart";
+import "#admin/admin-overview/charts/SyncStatusChart";
import { me } from "#common/users";
import "#components/ak-page-header";
import { AKElement } from "#elements/Base";
@@ -109,15 +109,13 @@ export class AdminOverviewPage extends AdminOverviewBase {
-
-
-
-
-
-
-
+
diff --git a/web/src/admin/admin-overview/charts/SyncStatusChart.ts b/web/src/admin/admin-overview/charts/SyncStatusChart.ts
index e864546fd1..e2e96a39b9 100644
--- a/web/src/admin/admin-overview/charts/SyncStatusChart.ts
+++ b/web/src/admin/admin-overview/charts/SyncStatusChart.ts
@@ -13,7 +13,7 @@ import {
ProvidersApi,
SourcesApi,
SyncStatus,
- SystemTaskStatusEnum,
+ TaskAggregatedStatusEnum,
} from "@goauthentik/api";
export interface SummarizedSyncStatus {
@@ -58,16 +58,22 @@ export class SyncStatusChart extends AKChart {
let objectKey = "healthy";
try {
const status = await fetchSyncStatus(element);
- status.tasks.forEach((task) => {
- if (task.status !== SystemTaskStatusEnum.Successful) {
- objectKey = "failed";
- }
- const now = new Date().getTime();
- const maxDelta = 3600000; // 1 hour
- if (!status || now - task.finishTimestamp.getTime() > maxDelta) {
- objectKey = "unsynced";
- }
- });
+
+ const now = new Date().getTime();
+ const maxDelta = 3600000; // 1 hour
+
+ if (
+ status.lastSyncStatus === TaskAggregatedStatusEnum.Error ||
+ status.lastSyncStatus === TaskAggregatedStatusEnum.Rejected ||
+ status.lastSyncStatus === TaskAggregatedStatusEnum.Warning
+ ) {
+ objectKey = "failed";
+ } else if (
+ !status.lastSuccessfulSync ||
+ now - status.lastSuccessfulSync.getTime() > maxDelta
+ ) {
+ objectKey = "unsynced";
+ }
} catch {
objectKey = "unsynced";
}
@@ -133,6 +139,17 @@ export class SyncStatusChart extends AKChart {
},
msg("LDAP Source"),
),
+ await this.fetchStatus(
+ () => {
+ return new SourcesApi(DEFAULT_CONFIG).sourcesKerberosList();
+ },
+ (element) => {
+ return new SourcesApi(DEFAULT_CONFIG).sourcesKerberosSyncStatusRetrieve({
+ slug: element.slug,
+ });
+ },
+ msg("Kerberos Source"),
+ ),
];
this.centerText = statuses.reduce((total, el) => (total += el.total), 0).toString();
return statuses;