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;