Remove useless delegation from listener to recorder. #4

Merged
sschnabe merged 1 commit from cleanup into main 2023-03-06 15:29:24 +01:00
3 changed files with 24 additions and 59 deletions

View file

@ -4,6 +4,8 @@ import org.keycloak.events.Event;
import org.keycloak.events.EventListenerProvider;
import org.keycloak.events.admin.AdminEvent;
import io.micrometer.core.instrument.MeterRegistry;
/**
* Listener for {@link Event} and {@link AdminEvent}.
*
@ -11,22 +13,36 @@ import org.keycloak.events.admin.AdminEvent;
*/
public class MicrometerEventListener implements EventListenerProvider, AutoCloseable {
private final MicrometerEventRecorder recorder;
private final MeterRegistry registry;
MicrometerEventListener(MicrometerEventRecorder recorder) {
this.recorder = recorder;
public MicrometerEventListener(MeterRegistry registry) {
this.registry = registry;
}
@Override
public void onEvent(Event event) {
recorder.userEvent(event);
registry.counter("keycloak_event_user",
"realm", toBlank(event.getRealmId()),
"type", toBlank(event.getType()),
"client", toBlank(event.getClientId()),
"error", toBlank(event.getError()))
.increment();
}
@Override
public void onEvent(AdminEvent event, boolean includeRepresentation) {
recorder.adminEvent(event);
registry.counter("keycloak_event_admin",
"realm", toBlank(event.getRealmId()),
"resource", toBlank(event.getResourceType()),
"operation", toBlank(event.getOperationType()),
"error", toBlank(event.getError()))
.increment();
}
@Override
public void close() {}
private String toBlank(Object value) {
return value == null ? "" : value.toString();
}
}

View file

@ -17,7 +17,7 @@ import io.micrometer.core.instrument.MeterRegistry;
*/
public class MicrometerEventListenerFactory implements EventListenerProviderFactory {
private MicrometerEventRecorder recorder;
private MeterRegistry registry;
@Override
public String getId() {
@ -29,12 +29,12 @@ public class MicrometerEventListenerFactory implements EventListenerProviderFact
@Override
public void postInit(KeycloakSessionFactory factory) {
recorder = new MicrometerEventRecorder(CDI.current().select(MeterRegistry.class).get());
registry = CDI.current().select(MeterRegistry.class).get();
}
@Override
public EventListenerProvider create(KeycloakSession session) {
return new MicrometerEventListener(recorder);
return new MicrometerEventListener(registry);
}
@Override

View file

@ -1,51 +0,0 @@
package io.kokuwa.keycloak.metrics;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import org.keycloak.events.Event;
import org.keycloak.events.admin.AdminEvent;
import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.MeterRegistry;
/**
* Micrometer based recorder for events.
*
* @author Stephan Schnabel
*/
public class MicrometerEventRecorder {
private final Map<String, Counter> counters = new HashMap<>();
private final MeterRegistry registry;
MicrometerEventRecorder(MeterRegistry registry) {
this.registry = registry;
}
void adminEvent(AdminEvent event) {
counter("keycloak_event_admin",
"realm", toBlankIfNull(event.getRealmId()),
"resource", toBlankIfNull(event.getResourceType()),
"operation", toBlankIfNull(event.getOperationType()),
"error", toBlankIfNull(event.getError()));
}
void userEvent(Event event) {
counter("keycloak_event_user",
"realm", toBlankIfNull(event.getRealmId()),
"type", toBlankIfNull(event.getType()),
"client", toBlankIfNull(event.getClientId()),
"error", toBlankIfNull(event.getError()));
}
private void counter(String counter, String... tags) {
counters.computeIfAbsent(counter + Arrays.toString(tags), string -> registry.counter(counter, tags))
.increment();
}
private String toBlankIfNull(Object value) {
return value == null ? "" : value.toString();
}
}