Skip to content

Commit

Permalink
Merge pull request #204 from jannickherrmann/feature/keycloak-25-comp…
Browse files Browse the repository at this point in the history
…atibility

Keycloak 25 compatibility
  • Loading branch information
pb82 authored Jul 8, 2024
2 parents 9dc0a99 + 898dbdf commit ac6ec32
Show file tree
Hide file tree
Showing 6 changed files with 18 additions and 49 deletions.
16 changes: 1 addition & 15 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ Two distinct providers are defined:
* MetricsEventListener to record the internal Keycloak events
* MetricsEndpoint to expose the data through a custom endpoint

The endpoint is available under `<base url>/realms/<realm>/metrics` (Quarkus) or `<base url>/auth/realms/<realm>/metrics` (Wildfly).
The endpoint is available under `<base url>/realms/<realm>/metrics` (Quarkus).
It will return data for all realms, no matter which realm you use in the URL.

## License
Expand Down Expand Up @@ -70,20 +70,6 @@ mvn clean package -Dkeycloak.version=15.0.0 -Dprometheus.version=0.9.0

## Install and setup

### On Keycloak Widfly Distribution
> This section assumes `/opt/jboss` as the Keycloak home directory, which is used on the _jboss/keycloak_ reference container on Docker Hub.
- Drop the [jar](https://github.com/aerogear/keycloak-metrics-spi/releases/latest) into the _/opt/jboss/keycloak/standalone/deployments/_ subdirectory of your Keycloak installation.

- Touch a dodeploy file into the _/opt/jboss/keycloak/standalone/deployments/_ subdirectory of your Keycloak installation.

```bash
# If your jar file is `keycloak-metrics-spi-2.0.2.jar`
cd /opt/jboss/keycloak/standalone/deployments/
touch keycloak-metrics-spi-2.0.2.jar.dodeploy
```
- Restart the keycloak service.

### On Keycloak Quarkus Distribution

> We assume the home of keycloak is on the default `/opt/keycloak`
Expand Down
12 changes: 6 additions & 6 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,7 @@ import java.text.SimpleDateFormat

plugins {
id "net.nemerosa.versioning" version "3.0.0"
}

repositories {
jcenter()
id "java"
}

configurations {
Expand All @@ -15,16 +12,18 @@ configurations {
group 'org.jboss.aerogear'
version '5.0.1-SNAPSHOT'

apply plugin: 'java'

sourceCompatibility = 11
java {
sourceCompatibility = JavaVersion.VERSION_17
}

repositories {
mavenCentral()
}

ext {
keycloakVersion=project.properties["keycloakVersion"]
quarkusResteasyVersion=project.properties["quarkusResteasyVersion"]
prometheusVersion=project.properties["prometheusVersion"]
}

Expand All @@ -33,6 +32,7 @@ dependencies {
implementation group: 'org.keycloak', name: 'keycloak-server-spi-private', version: keycloakVersion
implementation group: 'org.keycloak', name: 'keycloak-server-spi', version: keycloakVersion
implementation group: 'org.keycloak', name: 'keycloak-services', version: keycloakVersion
compileOnly group: 'io.quarkus.resteasy.reactive', name: 'resteasy-reactive', version: quarkusResteasyVersion
bundleLib group: 'io.prometheus', name: 'simpleclient_common', version: prometheusVersion
bundleLib group: 'io.prometheus', name: 'simpleclient_hotspot', version: prometheusVersion
bundleLib group: 'io.prometheus', name: 'simpleclient_pushgateway', version: prometheusVersion
Expand Down
3 changes: 2 additions & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
keycloakVersion=23.0.3
keycloakVersion=25.0.0
prometheusVersion=0.16.0
quarkusResteasyVersion=3.8.5
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-all.zip
14 changes: 7 additions & 7 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,13 @@
<version>5.0.1-SNAPSHOT</version>

<properties>
<java.version>17</java.version>
<keycloak.version>23.0.3</keycloak.version>
<java.version>21</java.version>
<keycloak.version>25.0.0</keycloak.version>
<prometheus.version>0.16.0</prometheus.version>
<quarkus-resteasy.version>3.2.9.Final</quarkus-resteasy.version>
<quarkus-resteasy.version>3.8.5</quarkus-resteasy.version>
<version.compiler.maven.plugin>3.5.1</version.compiler.maven.plugin>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
</properties>

<dependencies>
Expand Down Expand Up @@ -54,8 +54,8 @@
<scope>provided</scope>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy-reactive</artifactId>
<groupId>io.quarkus.resteasy.reactive</groupId>
<artifactId>resteasy-reactive</artifactId>
<version>${quarkus-resteasy.version}</version>
<scope>provided</scope>
</dependency>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package org.jboss.aerogear.keycloak.metrics;

import org.jboss.resteasy.spi.ResteasyProviderFactory;
import org.keycloak.Config;
import org.keycloak.models.KeycloakSession;
import org.keycloak.models.KeycloakSessionFactory;
Expand All @@ -16,24 +15,7 @@ public RealmResourceProvider create(KeycloakSession session) {

@Override
public void init(Config.Scope config) {

String resteasyVersion = ResteasyProviderFactory.class.getPackage().getImplementationVersion();
if (resteasyVersion.startsWith("3.")) {
// This registers the MetricsFilter within environments that use Resteasy < 4.x, e.g. Keycloak on Wildfly / JBossEAP
registerMetricsFilterWithResteasy3();
}

// otherwise, we try to use the JAX-RS @Provider mechanism to register metrics filter
// with Keycloak.X, see: MetricsFilterProvider
}

private void registerMetricsFilterWithResteasy3() {

ResteasyProviderFactory providerFactory = ResteasyProviderFactory.getInstance();
MetricsFilter filter = MetricsFilter.instance();

providerFactory.getContainerRequestFilterRegistry().registerSingleton(filter);
providerFactory.getContainerResponseFilterRegistry().registerSingleton(filter);
// nothing to do
}

@Override
Expand Down

0 comments on commit ac6ec32

Please sign in to comment.