Remove useless delegation from listener to recorder. #4
3 changed files with 24 additions and 59 deletions
|
@ -4,6 +4,8 @@ import org.keycloak.events.Event;
|
||||||
import org.keycloak.events.EventListenerProvider;
|
import org.keycloak.events.EventListenerProvider;
|
||||||
import org.keycloak.events.admin.AdminEvent;
|
import org.keycloak.events.admin.AdminEvent;
|
||||||
|
|
||||||
|
import io.micrometer.core.instrument.MeterRegistry;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Listener for {@link Event} and {@link AdminEvent}.
|
* Listener for {@link Event} and {@link AdminEvent}.
|
||||||
*
|
*
|
||||||
|
@ -11,22 +13,36 @@ import org.keycloak.events.admin.AdminEvent;
|
||||||
*/
|
*/
|
||||||
public class MicrometerEventListener implements EventListenerProvider, AutoCloseable {
|
public class MicrometerEventListener implements EventListenerProvider, AutoCloseable {
|
||||||
|
|
||||||
private final MicrometerEventRecorder recorder;
|
private final MeterRegistry registry;
|
||||||
|
|
||||||
MicrometerEventListener(MicrometerEventRecorder recorder) {
|
public MicrometerEventListener(MeterRegistry registry) {
|
||||||
this.recorder = recorder;
|
this.registry = registry;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onEvent(Event event) {
|
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
|
@Override
|
||||||
public void onEvent(AdminEvent event, boolean includeRepresentation) {
|
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
|
@Override
|
||||||
public void close() {}
|
public void close() {}
|
||||||
|
|
||||||
|
private String toBlank(Object value) {
|
||||||
|
return value == null ? "" : value.toString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,7 @@ import io.micrometer.core.instrument.MeterRegistry;
|
||||||
*/
|
*/
|
||||||
public class MicrometerEventListenerFactory implements EventListenerProviderFactory {
|
public class MicrometerEventListenerFactory implements EventListenerProviderFactory {
|
||||||
|
|
||||||
private MicrometerEventRecorder recorder;
|
private MeterRegistry registry;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getId() {
|
public String getId() {
|
||||||
|
@ -29,12 +29,12 @@ public class MicrometerEventListenerFactory implements EventListenerProviderFact
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void postInit(KeycloakSessionFactory factory) {
|
public void postInit(KeycloakSessionFactory factory) {
|
||||||
recorder = new MicrometerEventRecorder(CDI.current().select(MeterRegistry.class).get());
|
registry = CDI.current().select(MeterRegistry.class).get();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventListenerProvider create(KeycloakSession session) {
|
public EventListenerProvider create(KeycloakSession session) {
|
||||||
return new MicrometerEventListener(recorder);
|
return new MicrometerEventListener(registry);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -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();
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Add table
Add a link
Reference in a new issue