diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 164cbad..3f0ccf3 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -1,4 +1,2 @@
# https://docs.github.com/en/github/creating-cloning-and-archiving-repositories/about-code-owners#codeowners-syntax
* @sschnabe @rpahli @fabian-schlegel @jschwarze @wistefan @monotek
-.github/workflows/* @kokuwaio-bot
-pom.xml @kokuwaio-bot
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index 04d2ce6..415bfca 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -2,21 +2,13 @@ version: 2
updates:
- package-ecosystem: maven
directory: /
- open-pull-requests-limit: 20
schedule:
- interval: monthly
- day: monday
- # github parses time without quotes to int
- # yamllint disable-line rule:quoted-strings
- time: "09:00"
- timezone: Europe/Berlin
+ interval: daily
+ allow:
+ - dependency-name: io.kokuwa.maven:maven-parent
+ - dependency-name: org.keycloak:keycloak-quarkus-server
- package-ecosystem: github-actions
directory: /
- open-pull-requests-limit: 10
schedule:
interval: monthly
day: monday
- # github parses time without quotes to int
- # yamllint disable-line rule:quoted-strings
- time: "09:00"
- timezone: Europe/Berlin
diff --git a/.github/settings.xml b/.github/settings.xml
new file mode 100644
index 0000000..44fd9ea
--- /dev/null
+++ b/.github/settings.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+ sonatype-nexus
+ ${env.SERVER_USERNAME}
+ ${env.SERVER_PASSWORD}
+
+
+ github.com
+ nope
+ ${env.GIT_ACTION_TOKEN}
+
+
+
diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml
new file mode 100644
index 0000000..8ad3f78
--- /dev/null
+++ b/.github/workflows/build.yaml
@@ -0,0 +1,31 @@
+name: Build
+
+on:
+ push:
+ branches: [main]
+
+jobs:
+
+ build:
+ runs-on: ubuntu-latest
+ env:
+ MAVEN_ARGS: --batch-mode --color=always --no-transfer-progress --settings=.github/settings.xml
+ steps:
+ - run: git config --global user.name "${{ vars.KOKUWA_IO_BOT_NAME }}"
+ - run: git config --global user.email "${{ vars.KOKUWA_IO_BOT_EMAIL }}"
+ - uses: actions/checkout@v3
+ with:
+ token: ${{ secrets.GIT_ACTION_TOKEN }}
+ - uses: actions/setup-java@v3
+ with:
+ distribution: temurin
+ java-version: 17
+ cache: maven
+ - run: mvn $MAVEN_ARGS dependency:go-offline
+ - run: mvn $MAVEN_ARGS deploy
+ env:
+ SERVER_USERNAME: ${{ secrets.SONATYPE_NEXUS_USERNAME }}
+ SERVER_PASSWORD: ${{ secrets.SONATYPE_NEXUS_PASSWORD }}
+ - run: mvn $MAVEN_ARGS site-deploy
+ env:
+ GIT_ACTION_TOKEN: ${{ secrets.GIT_ACTION_TOKEN }}
diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
deleted file mode 100644
index a1394ca..0000000
--- a/.github/workflows/ci.yaml
+++ /dev/null
@@ -1,87 +0,0 @@
-name: CI
-
-on:
- push:
- branches: [main]
- pull_request: {}
-
-jobs:
-
- yaml:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v3
- - uses: ibiqlik/action-yamllint@v3
- with:
- format: colored
- strict: true
-
- markdown:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v3
- - uses: avto-dev/markdown-lint@v1
- with:
- args: /github/workspace
-
- javadoc:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v3
- - uses: actions/setup-java@v3
- with:
- distribution: temurin
- java-version: 17
- cache: maven
- - run: mvn -B -ntp javadoc:javadoc-no-fork -Ddoclint=all
-
- checkstyle:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v3
- - uses: actions/setup-java@v3
- with:
- distribution: temurin
- java-version: 17
- cache: maven
- - run: mvn -B -ntp checkstyle:check
-
- build:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v3
- - uses: actions/setup-java@v3
- with:
- distribution: temurin
- java-version: 17
- cache: maven
- server-id: sonatype-nexus
- server-username: SERVER_USERNAME
- server-password: SERVER_PASSWORD
- - run: mvn -B -ntp verify -Dcheckstyle.skip -Dmaven.test.redirectTestOutputToFile=false
- if: ${{ github.ref != 'refs/heads/main' }}
- - run: mvn -B -ntp deploy -Dcheckstyle.skip -Dmaven.test.redirectTestOutputToFile=false
- if: ${{ github.ref == 'refs/heads/main' }}
- env:
- SERVER_USERNAME: ${{ secrets.SONATYPE_NEXUS_USERNAME }}
- SERVER_PASSWORD: ${{ secrets.SONATYPE_NEXUS_PASSWORD }}
-
- versions:
- runs-on: ubuntu-latest
- strategy:
- fail-fast: false
- matrix:
- version:
- - 21.0.0
- - 21.0.1
- - 21.0.2
- - 21.1.0
- - 21.1.1
- steps:
- - uses: actions/checkout@v3
- - uses: actions/setup-java@v3
- with:
- distribution: temurin
- java-version: 17
- cache: maven
- - run: mvn -B -ntp verify -Dcheckstyle.skip -Dmaven.test.redirectTestOutputToFile=false -Dversion.org.keycloak=${{ matrix.version }}
diff --git a/.github/workflows/dependabot.yaml b/.github/workflows/dependabot.yaml
deleted file mode 100644
index ed63eca..0000000
--- a/.github/workflows/dependabot.yaml
+++ /dev/null
@@ -1,17 +0,0 @@
-name: Dependabot
-
-on: pull_request_target
-
-jobs:
- auto-merge:
- runs-on: ubuntu-latest
- if: ${{ github.actor == 'dependabot[bot]' }}
- steps:
- - run: gh pr review --approve "$PR_URL"
- env:
- PR_URL: ${{ github.event.pull_request.html_url }}
- GITHUB_TOKEN: ${{ secrets.GIT_ACTION_TOKEN }}
- - run: gh pr merge --auto --squash "$PR_URL"
- env:
- PR_URL: ${{ github.event.pull_request.html_url }}
- GITHUB_TOKEN: ${{ secrets.GIT_ACTION_TOKEN }}
diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml
new file mode 100644
index 0000000..54c2bba
--- /dev/null
+++ b/.github/workflows/pr.yaml
@@ -0,0 +1,59 @@
+name: PullRequest
+
+on: pull_request
+
+env:
+ MAVEN_ARGS: --batch-mode --color=always --no-transfer-progress -Dmaven.test.redirectTestOutputToFile=false
+
+jobs:
+
+ yaml:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - uses: ibiqlik/action-yamllint@v3
+ with:
+ format: colored
+ strict: true
+
+ markdown:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - uses: avto-dev/markdown-lint@v1
+ with:
+ args: /github/workspace
+
+ build:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - uses: actions/setup-java@v3
+ with:
+ distribution: temurin
+ java-version: 17
+ cache: maven
+ - run: mvn $MAVEN_ARGS dependency:go-offline
+ - run: mvn $MAVEN_ARGS verify
+ - run: mvn $MAVEN_ARGS site
+ - uses: actions/upload-artifact@v3
+ if: always()
+ with:
+ path: target/site
+
+ versions:
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ matrix:
+ version:
+ - 21.0.2
+ - 21.1.1
+ steps:
+ - uses: actions/checkout@v3
+ - uses: actions/setup-java@v3
+ with:
+ distribution: temurin
+ java-version: 17
+ cache: maven
+ - run: mvn $MAVEN_ARGS verify -Dcheck.skip -Dversion.org.keycloak=${{ matrix.version }}
diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml
index 8329bb7..4c719f1 100644
--- a/.github/workflows/release.yaml
+++ b/.github/workflows/release.yaml
@@ -5,7 +5,11 @@ on: workflow_dispatch
jobs:
build:
runs-on: ubuntu-latest
+ env:
+ MAVEN_ARGS: --batch-mode --color=always --no-transfer-progress --settings=.github/settings.xml
steps:
+ - run: git config --global user.name "${{ vars.KOKUWA_IO_BOT_NAME }}"
+ - run: git config --global user.email "${{ vars.KOKUWA_IO_BOT_EMAIL }}"
- uses: actions/checkout@v3
with:
token: ${{ secrets.GIT_ACTION_TOKEN }}
@@ -25,9 +29,11 @@ jobs:
server-password: SERVER_PASSWORD
gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }}
gpg-passphrase: GPG_PASSPHRASE
- - run: mvn -B -ntp release:prepare
- - run: mvn -B -ntp release:perform
+ - run: mvn $MAVEN_ARGS dependency:go-offline
+ - run: mvn $MAVEN_ARGS release:prepare -Darguments="$MAVEN_ARGS"
+ - run: mvn $MAVEN_ARGS release:perform -Darguments="$MAVEN_ARGS"
env:
SERVER_USERNAME: ${{ secrets.SONATYPE_NEXUS_USERNAME }}
SERVER_PASSWORD: ${{ secrets.SONATYPE_NEXUS_PASSWORD }}
+ GIT_ACTION_TOKEN: ${{ secrets.GIT_ACTION_TOKEN }}
GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..1939404
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,5 @@
+# do not include developer stuff here, use `git config --global core.excludesFile ~/.gitignore` for your setup
+
+target
+pom.xml.releaseBackup
+release.properties
diff --git a/README.md b/README.md
index f9f4236..e18c360 100644
--- a/README.md
+++ b/README.md
@@ -1,10 +1,10 @@
# Keycloak Metrics
-Provides metrics for Keycloak user/admin events and user/client/session count. Tested on Keycloak [20-21](.github/workflows/ci.yaml#L74-L77).
+Provides metrics for Keycloak user/admin events and user/client/session count. Tested on Keycloak [21](.github/workflows/pr.yaml#L49-L51).
[](http://www.apache.org/licenses/)
[](https://central.sonatype.com/search?namespace=io.kokuwa.keycloak&q=keycloak-event-metrics)
-[](https://github.com/kokuwaio/keycloak-event-metrics/actions/workflows/ci.yaml?query=branch%3Amain)
+[](https://github.com/kokuwaio/keycloak-event-metrics/actions/workflows/build.yaml)
## Why?
diff --git a/pom.xml b/pom.xml
index 929a53f..5fe8e38 100644
--- a/pom.xml
+++ b/pom.xml
@@ -2,6 +2,13 @@
4.0.0
+
+ io.kokuwa.maven
+ maven-parent
+ 0.6.10
+
+
+
io.kokuwa.keycloak
keycloak-event-metrics
1.0.1-SNAPSHOT
@@ -16,19 +23,21 @@
- Apache License 2.0
- https://www.apache.org/licenses/LICENSE-2.0
+ Apache-2.0
+ https://www.apache.org/licenses/LICENSE-2.0.txt
+ repo
- stephanschnabel
+ sschnabe
Stephan Schnabel
https://github.com/sschnabe
stephan@grayc.de
GrayC GmbH
https://grayc.de
+ Europe/Berlin
@@ -46,16 +55,6 @@
github
https://github.com/kokuwaio/keycloak-event-metrics/actions
-
-
- sonatype-nexus
- https://oss.sonatype.org/content/repositories/snapshots
-
-
- sonatype-nexus
- https://oss.sonatype.org/service/local/staging/deploy/maven2
-
-
@@ -63,73 +62,27 @@
- UTF-8
-
17
17
- true
- true
- true
- true
-
-
- 3.2.2
- 3.2.0
- 3.11.0
- 3.5.0
- 3.1.1
- 3.0.1
- 3.1.1
- 3.3.0
- 1.0.0
- 3.0.0
- 3.3.1
- 3.2.1
- 3.0.0
- 1.2.0
- 1.6.13
- 10.10.0
- 0.5.6
-
-
-
21.1.1
- 5.3.1
- 1.18.0
+ 1.18.3
-
-
org.keycloak
- keycloak-parent
+ keycloak-quarkus-server
${version.org.keycloak}
pom
import
-
-
-
- org.mockito
- mockito-junit-jupiter
- ${version.org.mockito}
-
-
- org.testcontainers
- testcontainers-bom
- ${version.org.testcontainers}
- pom
- import
-
-
@@ -152,27 +105,61 @@
org.keycloak
- keycloak-quarkus-server
- provided
+ keycloak-admin-client
+ test
-
- com.openshift
- openshift-restclient-java
-
-
- org.keycloak
- keycloak-admin-ui
+
+ org.glassfish.jaxb
+ jaxb-runtime
- org.keycloak
- keycloak-account-ui
+ org.jboss.resteasy
+ resteasy-multipart-provider
+
+
+
+
+
+
+ org.jboss.logging
+ jboss-logging
+ provided
+
+
+ org.hibernate
+ hibernate-core
+ provided
+
+
+ javax.xml.bind
+ jaxb-api
+
+
+ org.glassfish.jaxb
+ jaxb-runtime
+
+
+ org.hibernate.common
+ hibernate-commons-annotations
+
+
+ org.jboss
+ jandex
+
+
+ antlr
+ antlr
+
+
+ com.fasterxml
+ classmate
- org.keycloak
- keycloak-admin-client
- test
+ io.micrometer
+ micrometer-core
+ provided
@@ -183,13 +170,7 @@
org.testcontainers
- junit-jupiter
- test
-
-
- org.wildfly.client
- wildfly-client-config
- 1.0.1.Final
+ testcontainers
test
@@ -202,151 +183,8 @@
true
-
-
-
- org.apache.maven.plugins
- maven-checkstyle-plugin
- ${version.org.apache.maven.plugins.checkstyle}
-
- checkstyle.xml
- checkstyle-suppression.xml
- true
-
-
-
- com.puppycrawl.tools
- checkstyle
- ${version.com.puppycrawl.tools.checkstyle}
-
-
- io.kokuwa
- maven-parent
- ${version.io.kokuwa.checkstyle}
- zip
- checkstyle
-
-
-
-
- org.apache.maven.plugins
- maven-clean-plugin
- ${version.org.apache.maven.plugins.clean}
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
- ${version.org.apache.maven.plugins.compiler}
-
-
- org.apache.maven.plugins
- maven-dependency-plugin
- ${version.org.apache.maven.plugins.dependency}
-
-
- org.apache.maven.plugins
- maven-deploy-plugin
- ${version.org.apache.maven.plugins.deploy}
-
-
- org.apache.maven.plugins
- maven-failsafe-plugin
- ${version.org.apache.maven.plugins.surefire}
-
- true
- ${maven.test.redirectTestOutputToFile}
-
-
-
- org.apache.maven.plugins
- maven-gpg-plugin
- ${version.org.apache.maven.plugins.gpg}
-
-
- org.apache.maven.plugins
- maven-install-plugin
- ${version.org.apache.maven.plugins.install}
-
-
- org.apache.maven.plugins
- maven-jar-plugin
- ${version.org.apache.maven.plugins.jar}
-
-
- org.apache.maven.plugins
- maven-javadoc-plugin
- ${version.org.apache.maven.plugins.jar}
-
-
- org.apache.maven.plugins
- maven-release-plugin
- ${version.org.apache.maven.plugins.release}
-
- @{project.version}
- release
- true
- true
- @{prefix} prepare release @{releaseLabel} [no ci]
-
-
-
- org.apache.maven.plugins
- maven-source-plugin
- ${version.org.apache.maven.plugins.source}
-
-
- org.apache.maven.plugins
- maven-resources-plugin
- ${version.org.apache.maven.plugins.resources}
-
- UTF-8
-
-
-
- org.apache.maven.plugins
- maven-surefire-plugin
- ${version.org.apache.maven.plugins.surefire}
-
-
- org.codehaus.mojo
- tidy-maven-plugin
- ${version.org.codehaus.mojo.tidy}
-
-
- org.sonatype.plugins
- nexus-staging-maven-plugin
- ${version.org.sonatype.plugins.nexus-staging}
-
-
-
-
-
- org.codehaus.mojo
- tidy-maven-plugin
-
-
-
- check
-
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-checkstyle-plugin
-
-
-
- check
-
-
-
-
-
org.apache.maven.plugins
@@ -363,66 +201,4 @@
-
-
-
- release
-
-
-
-
-
- org.apache.maven.plugins
- maven-source-plugin
-
-
-
- jar-no-fork
-
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-javadoc-plugin
-
-
-
- jar
-
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-gpg-plugin
-
-
-
- sign
-
-
-
-
-
-
-
- org.sonatype.plugins
- nexus-staging-maven-plugin
- true
-
- sonatype-nexus
- https://oss.sonatype.org/
- true
-
-
-
-
-
-
-
diff --git a/src/main/java/io/kokuwa/keycloak/metrics/stats/MetricsStatsTask.java b/src/main/java/io/kokuwa/keycloak/metrics/stats/MetricsStatsTask.java
index 0a3c57c..db75da8 100644
--- a/src/main/java/io/kokuwa/keycloak/metrics/stats/MetricsStatsTask.java
+++ b/src/main/java/io/kokuwa/keycloak/metrics/stats/MetricsStatsTask.java
@@ -41,12 +41,11 @@ public class MetricsStatsTask implements Provider, ScheduledTask {
try {
scrape(session);
+ } catch (org.hibernate.exception.SQLGrammarException e) {
+ log.infov("Metrics status task skipped, database not ready.");
+ return;
} catch (Exception e) {
- if (e instanceof org.hibernate.exception.SQLGrammarException) {
- log.infov("Metrics status task skipped, database not ready.");
- } else {
- log.errorv(e, "Failed to scrape stats.");
- }
+ log.errorv(e, "Failed to scrape stats.");
return;
}
@@ -67,6 +66,7 @@ public class MetricsStatsTask implements Provider, ScheduledTask {
private void scrape(KeycloakSession session) {
session.realms().getRealmsStream().forEach(realm -> {
+ log.tracev("Scrape for realm {0}.", realm.getName());
var tagRealm = Tag.of("realm", realm.getName());
gauge("keycloak_users", Set.of(tagRealm), session.users().getUsersCount(realm), true);
gauge("keycloak_clients", Set.of(tagRealm), session.clients().getClientsCount(realm), true);