TODO - adrianrm/javamelody GitHub Wiki

Here is a list of wishes of features.

JavaMelody is opensource: Priorities and todos may change any time. There is no promise of dates or that a particular feature will ever be done.

And

  1. Fix bugs
  2. More unit tests
  3. More integration tests (all JDK/JRE and versions, all OS, all application servers and versions, all navigators)
  4. Translations (Italian, Spanish...)
  5. If the transaction isolation level is not read committed (unusual), display a warning about slowness or bugs
  6. Display the 100 latest slow requests for each counter (duration at severe level when they were executed), including user and http parameters
  7. Possibility to add graphics based on configurable MBeans values (such as business metrics)
  8. In the database informations report, be able to switch between DB when there are several, instead of displaying only the report for the first DB.
  9. Add a graph of Blocked threads and perhaps of contention durations. This would show if there are thread contentions of synchronization locks. But this would need to get thread infos everytime and to enable threadContentionMonitoring for durations.
  10. Inline drill-down in child requests, for example in the detail of a request
  11. Monitor incoming or outgoing web-services when using Apache CXF or JavaEE7-JAX-RS2. See Interceptors or this one for CXF and this one for JAX-RS2 (incoming web-services done with issue 228)
  12. Option in the UI to change from cumulative times (http times include sql) to non-cumulative times, via a link and a persistent http cookie or at least a parameter (from user group)
  13. Basic server monitoring: in downloads, provide a simple war file to monitor only an application server (cpu, memory, system informations, mbeans, threads) without monitoring any application (http requests, http sessions, etc)
  14. A module-info.java should be added to say that the newly made public classes in model/web/web.html/web.pdf packages are not exported and not accessible outside of the module. See blog.
  15. In development time, it could be injected a floating button at the bottom of the html pages of the application to go directly to the monitoring report of the current http request.
  16. Possibly document the rewrap-datasources parameter for Tomcat and Jetty
  17. Simplify UI with user feedback
  18. Details on GC types and on cpu per gc type (from user group)
  19. Heap and PermGen objects explorer using JDI. See links 1 and 2 for example (D. Hartford)
  20. In the list of http sessions, the city or country could be displayed for each session based on IP address of the client. A link to an online map can be given using latitude and longitude. A free database could be downloaded or an online service could be used for that.
  21. If Oracle 11g (and Diagnostic and tuning pack license ?), display V$SQL_MONITOR and if possible DBMS_SQLTUNE 1, 2
  22. If the mbean method always works on windows (including with openjdk) to get PID, then we can simplify PID.java and remove getpids.exe. And in java 9, the mbean method can be replaced by the new standard one: java.lang.ProcessHandle.current().getPid().
  23. Display of graphs with percentages of navigators, of OS, of countries/languages based on user-agent and main locale, with jrobin and percentage one above the others up to 100%, and idem with types of requests (get,post,ajax,gwt or perhaps select/update/insert/delete)
  24. JRobin locale patch: http://sourceforge.net/tracker/?func=detail&aid=3403733&group_id=82668&atid=566807
  25. Extract informations from hikaricp like from dbcp
  26. In the list of Quartz jobs, if a job is an InterruptableJob and is currently executing, display a red cross next to the progress bar (like Jenkins jobs) to be able to interrupt the job in QuartzAdapter and Quartz2Adapter.
  27. Think about deploying to the marketplace the sonar javamelody plugin as suggested by Ann's message and so publish in all Sonar's update centers.
  28. Think about displaying the http/sql/etc statistics for a custom period in hours instead of a custom period in days. This would need a storage of statistics in hours given a parameter perhaps and a removal after some time.
  29. Add another way to configure a parameter when it can't be put neither in code, web.xml, webapp's context.xml or system properties (for example, a secret in Jenkins, issue 770).
  30. More to come...

Not important wishes

  1. Extract informations from c3p0/bonecp such as max connections like from dbcp
  2. Add a button to kill a system process and its children in the process list?
  3. Custom processing in counters's events (issue 173)
  4. Having some monitoring is good but sometimes not enough or too late in the development cycle (and sending alerts are not better for developers). A parameter such as "max-sql-hits" could be added for dev environments, for continuous integration tests or for QA servers, in order to enable a hard rule: no more than X executions of SQL requests per service execution or per http request execution, otherwise throw an exception immediately like a blocking issue. A good practice would be X=25, or X=50 for example can be chosen to be "comprehensive" for some time.
  5. Display graphics of GC in some specific screen(s) when GC logs are enabled or on a limited time frame with data from GC MBean notifications. In the meantime, HPJMeter can be used.
  6. Munin/Nagios/Zabbix plugin to display some graphs in those tools
  7. Add a plugin interceptor to monitor sql requests in mybatis when no other sql monitoring, such as a datasource from JNDI, is used
  8. Create a WildFly Swarm fraction?
  9. Test the monitoring of sql requests with a datasource from jndi in Resin
  10. In the collector server, option to use javax.websocket instead of http like Sirona agent, but probably not worth it from a performance point of view (one request every 60s) and given the configuration and firewall rules needed.
  11. Social gaming between willing users, with experience gained over time, fan badges and heroes sets of powerful weapons and shields to share their experiences, bonus points when more than 1000 sql hits per http request, etc (done for 1.63, except social gaming).

Archives

  1. Add an action for threads dump as text format (done)
  2. In the collector server, refuse to add twice one instance of an application (for example, individually and then in a cluster), because it would not work (done)
  3. Add pdf/xml/json reports for the counter summary per class (done)
  4. Sampling of thread stack traces to detect cpu hotspots (similarly to VisuaVM sampler but with a lower rate and with no configuration). The packages java, javax, sun, com.sun should be excluded. (And for memory hotspots?). (done in 1.47, issue 149)
  5. In the collector server, do not display all the applications at the top if there are more than 10 of them, and display them with a show and collapse link. (done)
  6. Cannot remove in the GUI an application from the collector server when the application no longer exists or is no longer using javamelody. When trying to select it, the collector server is showing an error 500 with the message "Data unavailable for the application". (Meanwhile, it is possible to remove the application directly from the applications.properties file in the temp directory.) (done)
  7. Add a pdf report of the detail of a request (done)
  8. Stack-traces: Link to open a popup with the stack-trace (in addition to the tooltip) (canceled, there is an action "Dump threads as text" now)
  9. Test the compatibility or the non-compatibility with Quartz 2.0 (done, see issue 121)
  10. Test the monitoring of sql requests with a datasource from jndi in Glassfish 3 (done, see issue 138)
  11. Test the jndi report in Websphere (done)
  12. demo of JavaMelody in java pet store with step by step instruction to install in glassfish or Spring pet clinic in tomcat for example (done, online demo is back.)
  13. Cloud Watch metrics for an application in Amazon EC2, possibly by using Beans Talk. (done in 1.68.0)
  14. Statistics of JSF actions like for Struts actions (done)
  15. Possibly document the external API: lastValue and jmxValue ; and also xml and json format on some pages (done)
  16. Highlight sql keywords or format sql requests before display in the sql statistics (Highlighted done)
  17. Monitoring of nio buffers if Java 7 and of the new % system cpu if Java 7 and Oracle JDK (in other charts?). getProcessCpuLoad is probably useless given that there is already the "% cpu" for the process. (done)
  18. Add a view with the classloader hierarchy (canceled, it seems not possible to list all classloaders without an agent and it is not really interesting nowadays)
  19. Alerts based on thresholds, with mails to administrators (done in 1.57, see the documentation)
  20. CSV exports of tables (done in the rich desktop UI. Note that there are also XML and JSON exports possible in the web UI)
  21. Rich desktop UI, with swing and java web start (done, ReleaseNotes#1.42.0)
  22. Add the Nagios plugin by Shawn Bower in the user guide in addition to the External API, if it works well. (done)
  23. When monitoring-spring.xml is used (or monitoring-spring-aspectj.xml), add a page to display beans in the Spring context by adding a bean which implements ApplicationContextAware (done, 5cd7c5a)
  24. In the list of dependencies of the webapp, add a link to a new page to display for each dependency the name with a link to the dependency's url, Maven ID with groupId:artifactId:version, the name of the license with a link to its URL (like Jenkins). (done, e7607c1)
  25. If the "sql-transform-pattern" parameter is used, the sql requests may contain the '$' character, and then the execution plan (with Oracle) does not work on these requests (improved in 1.51, revision 3799)
  26. Check with a file if 2 instances use the same storage directory (and warn about data loss) (done for 1.71)
  27. Add a pdf report for the JNDI bindings (done in revision 3101)
  28. Add a Table Of Contents with links at the top of the main report. In order to not take much vertical space, it can be displayed hovering, or in a combo box, or in a popup... (done in 1.50, revision 3705)
  29. Create a plugin for Liferay v6.1 or later (done, doc)
  30. Customized reports for each version of the monitored application, to ease the comparison of statistics between versions: There could be an optional javamelody parameter giving the current application version (or based on META-INF/maven/.../pom.properties). When the developer changes the parameter's value, a properties file could be stored with the list of the application's versions including start and end dates. And so javamelody would be able to display the list of the application's versions with links to display the reports with customized periods. Otherwise, that list and the links to customized reports can be manually maintained in a wiki for example, after each deployment of the application. New 'comparison' reports may also be displayed to show comparison statistics/details between two, or across all, application versions. Potentially this could initially be limited to a selected statistic marker, and/or only as an aggregated general report (for usecase of showing an aggregated report of 'version 5 is 10% faster than version 4'). This can be extended to compare the statistics in the details of requests, with drill-downs. (done, except comparison reports)
  31. In the Jenkins Monitoring plugin, if Jenkins v1.502+, add a BuildStepListener as an extension point, to display build steps with mean execution and cpu times, in the details page of the statistics of a build. The name of the build steps should include the name of the job + " / " + Describable.getDescriptor().getDisplayName() or class.getSimpleName() + if that's the case, ant targets, maven goals or shell command. (done, except specifics of build steps: ant targets, maven goals, shell command).
  32. In JIRA/Confluence/Jenkins/Liferay for example, the user of the monitoring reports is often authenticated and has some http session: so a "Logout" action could be added in the menu on the right of the main report. (done for 1.52)
  33. In Jenkins, add the possibility to call "System actions" for each slave individually JENKINS-20935 (done for 1.49)
  34. In the monitored servers, report anonymous data to a central server. This would need to show openly that only anonymous data is collected (java version, os, #cores, heap size...) and that it can be disabled. This would enable several interesting things: Know after all how many active installs there are. Report anonymous open-data about users (% of melody versions, % of java versions...).
  35. Why maven waits forever to build in Eclipse when I have forgotten to change the proxy in my settings.xml between my work day and my work night ? and why can't I cancel the waiting build ? (I don't have to use a proxy at the moment)
  36. And why some maven plugins are sometimes years late? (obsolete, olamy took care of this)
  37. Publish JavaMelody in maven central repository (seems not doable without jrobin in central repo and without renaming package to googlecode) (done, it is in maven central now.)
  38. When a http or sql request is very very long without white-space, it may cause the statistics table to be much wider than the screen. The width of that column should be auto according to the content, but with wrapping if needed to fit into the screen. (done)
  39. Publish and release a Spring-boot-starter (done, PR #615)
  40. When the project will adopt JDK 9, the source code could be splitted at last into different packages (net.bull.javamelody as today for public api, internal.model for data classes, internal.web/internal.web.html/internal.web.pdf for controllers and reports). Backward compatibility of moved model classes is retained by overriding ObjectInputStream.resoveClass.
  41. In monitoring-spring.xml and monitoring-spring-aspectj.xml, it could be added an equivalent to new MonitoringSpringAdvisor(new AnnotationMatchingPointcut(Service.class)), new MonitoringSpringAdvisor(new AnnotationMatchingPointcut(Controller.class)), new MonitoringSpringAdvisor(new AnnotationMatchingPointcut(RestController.class)) for spring-mvc webapps, like in the spring-boot-starter. (done for 1.68)
  42. If hs_err_pid.log files are found in the working directory or in the temp directory or in -XX:Error, they could be displayed to inform about dates and details of JVM crashes. (done for 1.73).
  43. Add the 95th percentile in zoomed graphics (org.jrobin.data.DataProcessor.getPercentile) (done for 1.73).
  44. Like for the cpu, record allocated bytes by the current thread between beginning and end of requests/services, when possible (since 1.6_u25). (done for 1.73).
  45. Play framework, see stackoverflow (canceled)