admin: monitor worker version (#12463)

* root: include version in celery ping

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* check version in worker endpoint

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* include worker version in prom metrics

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* format

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix tests

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

---------

Signed-off-by: Jens Langhammer <jens@goauthentik.io>
This commit is contained in:
Jens L.
2024-12-23 22:13:38 +01:00
committed by GitHub
parent c3aefd55a2
commit aa4f817856
8 changed files with 100 additions and 26 deletions

View File

@ -8,34 +8,41 @@ import { msg } from "@lit/localize";
import { TemplateResult, html } from "lit";
import { customElement } from "lit/decorators.js";
import { AdminApi } from "@goauthentik/api";
import { AdminApi, Worker } from "@goauthentik/api";
@customElement("ak-admin-status-card-workers")
export class WorkersStatusCard extends AdminStatusCard<number> {
export class WorkersStatusCard extends AdminStatusCard<Worker[]> {
icon = "pf-icon pf-icon-server";
getPrimaryValue(): Promise<number> {
return new AdminApi(DEFAULT_CONFIG).adminWorkersRetrieve().then((workers) => {
return workers.count;
});
getPrimaryValue(): Promise<Worker[]> {
return new AdminApi(DEFAULT_CONFIG).adminWorkersList();
}
renderHeader(): TemplateResult {
return html`${msg("Workers")}`;
}
getStatus(value: number): Promise<AdminStatus> {
if (value < 1) {
getStatus(value: Worker[]): Promise<AdminStatus> {
if (value.length < 1) {
return Promise.resolve<AdminStatus>({
icon: "fa fa-times-circle pf-m-danger",
message: html`${msg("No workers connected. Background tasks will not run.")}`,
});
} else if (value.filter((w) => !w.versionMatching).length > 0) {
return Promise.resolve<AdminStatus>({
icon: "fa fa-times-circle pf-m-danger",
message: html`${msg("Worker with incorrect version connected.")}`,
});
} else {
return Promise.resolve<AdminStatus>({
icon: "fa fa-check-circle pf-m-success",
});
}
}
renderValue() {
return html`${this.value?.length}`;
}
}
declare global {