Collect all unknown client ids as UNKNOWN. Fix #100

This commit is contained in:
Stephan Schnabel 2024-12-02 17:22:27 +01:00
parent 7aeb1b9e25
commit b4fad32161
Signed by: stephan.schnabel
GPG key ID: E07AF5BA239FE543
5 changed files with 46 additions and 11 deletions

View file

@ -1,11 +1,13 @@
package io.kokuwa.keycloak.metrics.event;
import java.util.Objects;
import java.util.Optional;
import org.jboss.logging.Logger;
import org.keycloak.events.Event;
import org.keycloak.events.EventListenerProvider;
import org.keycloak.events.admin.AdminEvent;
import org.keycloak.models.ClientModel;
import org.keycloak.models.KeycloakContext;
import org.keycloak.models.KeycloakSession;
import org.keycloak.models.RealmModel;
@ -33,7 +35,7 @@ public class MetricsEventListener implements EventListenerProvider, AutoCloseabl
Metrics.counter("keycloak_event_user",
"realm", toBlank(replaceIds ? getRealmName(event.getRealmId()) : event.getRealmId()),
"type", toBlank(event.getType()),
"client", toBlank(event.getClientId()),
"client", getClientId(event.getClientId()),
"error", toBlank(event.getError()))
.increment();
}
@ -65,6 +67,17 @@ public class MetricsEventListener implements EventListenerProvider, AutoCloseabl
});
}
private String getClientId(String clientId) {
return Optional.ofNullable(session.getContext())
.map(KeycloakContext::getClient)
.filter(model -> Objects.equals(model.getClientId(), clientId))
.map(ClientModel::getClientId)
.orElseGet(() -> {
log.tracev("Client for id {0} is unknown", clientId);
return "UNKNOWN";
});
}
private String toBlank(Object value) {
return value == null ? "" : value.toString();
}