Refactor test: remove micrometer mocking, micrometer is testable (#32)
This commit is contained in:
parent
b4e8c3be4e
commit
cfce0dee45
7 changed files with 61 additions and 70 deletions
|
@ -10,7 +10,7 @@ import org.keycloak.models.KeycloakContext;
|
|||
import org.keycloak.models.KeycloakSession;
|
||||
import org.keycloak.models.RealmModel;
|
||||
|
||||
import io.micrometer.core.instrument.MeterRegistry;
|
||||
import io.micrometer.core.instrument.Metrics;
|
||||
|
||||
/**
|
||||
* Listener for {@link Event} and {@link AdminEvent}.
|
||||
|
@ -20,19 +20,17 @@ import io.micrometer.core.instrument.MeterRegistry;
|
|||
public class MetricsEventListener implements EventListenerProvider, AutoCloseable {
|
||||
|
||||
private static final Logger log = Logger.getLogger(MetricsEventListener.class);
|
||||
private final MeterRegistry registry;
|
||||
private final boolean replaceIds;
|
||||
private final KeycloakSession session;
|
||||
|
||||
MetricsEventListener(MeterRegistry registry, boolean replaceIds, KeycloakSession session) {
|
||||
this.registry = registry;
|
||||
MetricsEventListener(boolean replaceIds, KeycloakSession session) {
|
||||
this.replaceIds = replaceIds;
|
||||
this.session = session;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onEvent(Event event) {
|
||||
registry.counter("keycloak_event_user",
|
||||
Metrics.counter("keycloak_event_user",
|
||||
"realm", toBlank(replaceIds ? getRealmName(event.getRealmId()) : event.getRealmId()),
|
||||
"type", toBlank(event.getType()),
|
||||
"client", toBlank(event.getClientId()),
|
||||
|
@ -42,7 +40,7 @@ public class MetricsEventListener implements EventListenerProvider, AutoCloseabl
|
|||
|
||||
@Override
|
||||
public void onEvent(AdminEvent event, boolean includeRepresentation) {
|
||||
registry.counter("keycloak_event_admin",
|
||||
Metrics.counter("keycloak_event_admin",
|
||||
"realm", toBlank(replaceIds ? getRealmName(event.getRealmId()) : event.getRealmId()),
|
||||
"resource", toBlank(event.getResourceType()),
|
||||
"operation", toBlank(event.getOperationType()),
|
||||
|
|
|
@ -7,11 +7,8 @@ import org.keycloak.events.EventListenerProviderFactory;
|
|||
import org.keycloak.models.KeycloakSession;
|
||||
import org.keycloak.models.KeycloakSessionFactory;
|
||||
|
||||
import io.micrometer.core.instrument.MeterRegistry;
|
||||
import io.micrometer.core.instrument.Metrics;
|
||||
|
||||
/**
|
||||
* Factory for {@link MetricsEventListener}, uses {@link MeterRegistry} from CDI.
|
||||
* Factory for {@link MetricsEventListener}.
|
||||
*
|
||||
* @author Stephan Schnabel
|
||||
*/
|
||||
|
@ -36,7 +33,7 @@ public class MetricsEventListenerFactory implements EventListenerProviderFactory
|
|||
|
||||
@Override
|
||||
public EventListenerProvider create(KeycloakSession session) {
|
||||
return new MetricsEventListener(Metrics.globalRegistry, replaceIds, session);
|
||||
return new MetricsEventListener(replaceIds, session);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -10,8 +10,6 @@ import org.keycloak.models.KeycloakSessionFactory;
|
|||
import org.keycloak.models.utils.KeycloakModelUtils;
|
||||
import org.keycloak.timer.TimerProvider;
|
||||
|
||||
import io.micrometer.core.instrument.Metrics;
|
||||
|
||||
/**
|
||||
* Implementation of {@link MetricsStatsFactory}.
|
||||
*
|
||||
|
@ -53,10 +51,10 @@ public class MetricsStatsFactoryImpl implements MetricsStatsFactory {
|
|||
intervalDuration, infoThreshold, warnThreshold);
|
||||
|
||||
var interval = intervalDuration.toMillis();
|
||||
var task = new MetricsStatsTask(Metrics.globalRegistry, intervalDuration, infoThreshold, warnThreshold);
|
||||
var task = new MetricsStatsTask(intervalDuration, infoThreshold, warnThreshold);
|
||||
KeycloakModelUtils.runJobInTransaction(factory, session -> session
|
||||
.getProvider(TimerProvider.class)
|
||||
.schedule(() -> KeycloakModelUtils.runJobInTransaction(factory, task), interval, "metrics"));
|
||||
.scheduleTask(task, interval, "metrics"));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -9,10 +9,10 @@ import java.util.concurrent.atomic.AtomicLong;
|
|||
|
||||
import org.jboss.logging.Logger;
|
||||
import org.keycloak.models.KeycloakSession;
|
||||
import org.keycloak.models.KeycloakSessionTask;
|
||||
import org.keycloak.provider.Provider;
|
||||
import org.keycloak.timer.ScheduledTask;
|
||||
|
||||
import io.micrometer.core.instrument.MeterRegistry;
|
||||
import io.micrometer.core.instrument.Metrics;
|
||||
import io.micrometer.core.instrument.Tag;
|
||||
|
||||
/**
|
||||
|
@ -20,17 +20,15 @@ import io.micrometer.core.instrument.Tag;
|
|||
*
|
||||
* @author Stephan Schnabel
|
||||
*/
|
||||
public class MetricsStatsTask implements Provider, KeycloakSessionTask {
|
||||
public class MetricsStatsTask implements Provider, ScheduledTask {
|
||||
|
||||
private static final Logger log = Logger.getLogger(MetricsStatsTask.class);
|
||||
private final Map<String, AtomicLong> values = new HashMap<>();
|
||||
private final MeterRegistry registry;
|
||||
private static final Map<String, AtomicLong> values = new HashMap<>();
|
||||
private final Duration interval;
|
||||
private final Duration infoThreshold;
|
||||
private final Duration warnThreshold;
|
||||
|
||||
MetricsStatsTask(MeterRegistry registry, Duration interval, Duration infoThreshold, Duration warnThreshold) {
|
||||
this.registry = registry;
|
||||
MetricsStatsTask(Duration interval, Duration infoThreshold, Duration warnThreshold) {
|
||||
this.interval = interval;
|
||||
this.infoThreshold = infoThreshold;
|
||||
this.warnThreshold = warnThreshold;
|
||||
|
@ -84,6 +82,6 @@ public class MetricsStatsTask implements Provider, KeycloakSessionTask {
|
|||
}
|
||||
|
||||
private void gauge(String name, Set<Tag> tags, long value) {
|
||||
values.computeIfAbsent(name + tags, s -> registry.gauge(name, tags, new AtomicLong())).set(value);
|
||||
values.computeIfAbsent(name + tags, s -> Metrics.gauge(name, tags, new AtomicLong())).set(value);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue