diff --git a/keycloak/keycloak_admin.py b/keycloak/keycloak_admin.py index f567be1..6a74425 100644 --- a/keycloak/keycloak_admin.py +++ b/keycloak/keycloak_admin.py @@ -1928,7 +1928,6 @@ class KeycloakAdmin: data_raw = self.connection.raw_get(URL_ADMIN_CLIENT_ALL_SESSIONS.format(**params_path)) return raise_error_from_response(data_raw, KeycloakGetError) - def delete_user_realm_role(self, user_id, payload): """ Delete realm-level role mappings @@ -1938,4 +1937,19 @@ class KeycloakAdmin: params_path = {"realm-name": self.realm_name, "id": str(user_id) } data_raw = self.connection.raw_delete(URL_ADMIN_DELETE_USER_ROLE.format(**params_path), data=json.dumps(payload)) - return raise_error_from_response(data_raw, KeycloakGetError, expected_codes=[204]) \ No newline at end of file + return raise_error_from_response(data_raw, KeycloakGetError, expected_codes=[204]) + + def get_client_sessions_stats(self): + """ + Get current session count for all clients with active sessions + + https://www.keycloak.org/docs-api/16.1/rest-api/index.html#_getclientsessionstats + + :return: Dict of clients and session count + """ + params_path = {"realm-name": self.realm_name} + data_raw = self.raw_get( + self.URL_ADMIN_CLIENT_SESSION_STATS.format(**params_path) + ) + return raise_error_from_response(data_raw, KeycloakGetError) + diff --git a/keycloak/urls_patterns.py b/keycloak/urls_patterns.py index 1332586..54026cf 100644 --- a/keycloak/urls_patterns.py +++ b/keycloak/urls_patterns.py @@ -109,4 +109,6 @@ URL_ADMIN_USER_FEDERATED_IDENTITY = "admin/realms/{realm-name}/users/{id}/federa URL_ADMIN_EVENTS = 'admin/realms/{realm-name}/events' -URL_ADMIN_DELETE_USER_ROLE = "admin/realms/{realm-name}/users/{id}/role-mappings/realm" \ No newline at end of file +URL_ADMIN_DELETE_USER_ROLE = "admin/realms/{realm-name}/users/{id}/role-mappings/realm" + +URL_ADMIN_CLIENT_SESSION_STATS = "admin/realms/{realm-name}/client-session-stats"