<div dir="ltr">That's really cool and would be great to have this added to Keycloak.<div><br></div><div>Some questions/comments:</div><div><br></div><div>* What's the (+) under 7 total users?</div><div>* What's the purpose of "Logins along the year" - it looks cool, but I'm not sure how it'd be used. It would also require storing events for the whole year.</div><div>* I'm not keen on having db specific views. We already support quite a few dbs so maintaining these would be painful. Would be better to delegate this to Hibernate if possible and use ejq queries.</div><div>* Logins/Registrations should display date and time. At least if date is not today.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On 29 May 2016 at 22:52, Thomas Darimont <span dir="ltr"><<a href="mailto:thomas.darimont@googlemail.com" target="_blank">thomas.darimont@googlemail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Hello group,</div><div><br></div><div>a few months ago I raised the feature request "Activity dashboard" in the Keycloak JIRA.</div><div><a href="https://issues.jboss.org/browse/KEYCLOAK-1840" target="_blank">https://issues.jboss.org/browse/KEYCLOAK-1840</a></div><div><br></div><div>This weekend I gave this a spin and I think I got pretty far with it,</div><div>see attached annotated screenshot.</div><div><br></div><div>The idea was to leverage the information from the stored event data</div><div>to compute some Keycloak usage statistics over time.</div><div>My current prototype supports JPA (user / event) storage provider</div><div>and works with postgresql but could be adapted to other databases including MongoDB.</div><div><br></div><div>Since I need to compute the usage statistics based on the event data,</div><div>events need to be stored and some views (3) need to be defined to</div><div>make the data accessible from JPA in a generic fashion.</div><div><br></div><div>Since the queries are quite complex I wanted to keep them out</div><div>of the code and therefore used named native queries via orm.xml.</div><div>The actual queries use some database specific date/time functions</div><div>that I wanted to keep out of the code - thus I created views </div><div>that could be adapted for each database and provisioned via liquibase.</div><div><br></div><div>The view definitions can be found here:</div><div><a href="https://gist.github.com/thomasdarimont/24e11be101c6ed8773f22e1defc5d66e" target="_blank">https://gist.github.com/thomasdarimont/24e11be101c6ed8773f22e1defc5d66e</a></div><div><br></div><div>For MongoDB one could define appropriate aggregation framework pipelines</div><div>to express the same query logic.</div><div><br></div><div>I basically exposed the data from those views per realm via a newly </div><div>introduced AnalyticsProvider interface that is accessible via KeycloakSession.</div><div><br></div><div>Data from this AnalyticsProvider is then exposed as a REST resource called "DashboardResource".</div><div>Data from this REST endpoint is then consumed by the admin frontend in a new section</div><div>called "dashboard".</div><div><br></div><div>In the frontend I used basic patternfly components, e.g.: cards & tables:</div><div><a href="https://rawgit.com/patternfly/patternfly/master/tests/cards.html" target="_blank">https://rawgit.com/patternfly/patternfly/master/tests/cards.html</a></div><div><br></div><div>For the heatmap I used <a href="http://cal-heatmap.com/#start" target="_blank">http://cal-heatmap.com/#start</a> which is based on d3js.</div><div>There is also an angularjs directive that could be used as well.</div><div><a href="https://github.com/shekhargulati/angular-cal-heatmap-directive" target="_blank">https://github.com/shekhargulati/angular-cal-heatmap-directive</a></div><div><br></div><div>The current hacky code can be found here.:</div><div><a href="https://github.com/thomasdarimont/keycloak/commits/poc/KEYCLOAK-1840-dashboard" target="_blank">https://github.com/thomasdarimont/keycloak/commits/poc/KEYCLOAK-1840-dashboard</a></div><div><br></div><div>The relevant commit is:</div><div><a href="https://github.com/thomasdarimont/keycloak/commit/40a7956f8e547edc148d2ddbaf27961f2a852203" target="_blank">https://github.com/thomasdarimont/keycloak/commit/40a7956f8e547edc148d2ddbaf27961f2a852203</a></div><div><br></div><div>The code still needs a decent amount of polishing but I wanted to share this with</div><div>you guys first to see if this could make it into Keycloak at some point.</div><div><br></div><div>Cheers,</div><div>Thomas</div></div>
<br>_______________________________________________<br>
keycloak-dev mailing list<br>
<a href="mailto:keycloak-dev@lists.jboss.org">keycloak-dev@lists.jboss.org</a><br>
<a href="https://lists.jboss.org/mailman/listinfo/keycloak-dev" rel="noreferrer" target="_blank">https://lists.jboss.org/mailman/listinfo/keycloak-dev</a><br></blockquote></div><br></div>