readd syncstatuschart

Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space>
This commit is contained in:
Marc 'risson' Schmitt
2025-06-26 16:57:30 +02:00
parent 0ebbaeea6f
commit 670a88659e
2 changed files with 36 additions and 21 deletions

View File

@ -7,7 +7,7 @@ import "#admin/admin-overview/cards/VersionStatusCard";
import "#admin/admin-overview/cards/WorkerStatusCard"; import "#admin/admin-overview/cards/WorkerStatusCard";
import "#admin/admin-overview/charts/AdminLoginAuthorizeChart"; import "#admin/admin-overview/charts/AdminLoginAuthorizeChart";
import "#admin/admin-overview/charts/OutpostStatusChart"; import "#admin/admin-overview/charts/OutpostStatusChart";
// import "#admin/admin-overview/charts/SyncStatusChart"; import "#admin/admin-overview/charts/SyncStatusChart";
import { me } from "#common/users"; import { me } from "#common/users";
import "#components/ak-page-header"; import "#components/ak-page-header";
import { AKElement } from "#elements/Base"; import { AKElement } from "#elements/Base";
@ -109,15 +109,13 @@ export class AdminOverviewPage extends AdminOverviewBase {
<ak-admin-status-chart-outpost></ak-admin-status-chart-outpost> <ak-admin-status-chart-outpost></ak-admin-status-chart-outpost>
</ak-aggregate-card> </ak-aggregate-card>
</div> </div>
<!-- <div --> <div
<!-- class="pf-l-grid__item pf-m-12-col pf-m-12-col-on-xl pf-m-4-col-on-2xl" --> class="pf-l-grid__item pf-m-12-col pf-m-12-col-on-xl pf-m-4-col-on-2xl"
<!-- > --> >
<!-- <ak-aggregate-card icon="fa fa-sync-alt" header=${msg( <ak-aggregate-card icon="fa fa-sync-alt" header=${msg("Sync status")}>
"Sync status", <ak-admin-status-chart-sync></ak-admin-status-chart-sync>
)}> --> </ak-aggregate-card>
<!-- <ak-admin-status-chart-sync></ak-admin-status-chart-sync> --> </div>
<!-- </ak-aggregate-card> -->
<!-- </div> -->
<div class="pf-l-grid__item pf-m-12-col"> <div class="pf-l-grid__item pf-m-12-col">
<hr class="pf-c-divider" /> <hr class="pf-c-divider" />
</div> </div>

View File

@ -13,7 +13,7 @@ import {
ProvidersApi, ProvidersApi,
SourcesApi, SourcesApi,
SyncStatus, SyncStatus,
SystemTaskStatusEnum, TaskAggregatedStatusEnum,
} from "@goauthentik/api"; } from "@goauthentik/api";
export interface SummarizedSyncStatus { export interface SummarizedSyncStatus {
@ -58,16 +58,22 @@ export class SyncStatusChart extends AKChart<SummarizedSyncStatus[]> {
let objectKey = "healthy"; let objectKey = "healthy";
try { try {
const status = await fetchSyncStatus(element); const status = await fetchSyncStatus(element);
status.tasks.forEach((task) => {
if (task.status !== SystemTaskStatusEnum.Successful) {
objectKey = "failed";
}
const now = new Date().getTime(); const now = new Date().getTime();
const maxDelta = 3600000; // 1 hour const maxDelta = 3600000; // 1 hour
if (!status || now - task.finishTimestamp.getTime() > maxDelta) {
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"; objectKey = "unsynced";
} }
});
} catch { } catch {
objectKey = "unsynced"; objectKey = "unsynced";
} }
@ -133,6 +139,17 @@ export class SyncStatusChart extends AKChart<SummarizedSyncStatus[]> {
}, },
msg("LDAP Source"), 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(); this.centerText = statuses.reduce((total, el) => (total += el.total), 0).toString();
return statuses; return statuses;