# HG changeset patch # User Mario Torre # Date 1494247897 -7200 # Node ID af1ff6ea8e2a45c655ce41ec67874f6e16b4b6f4 # Parent df7dc704632abc36fe51732f00a59bb53b860948 Some docs cleanups review-thread: http://icedtea.classpath.org/pipermail/thermostat/2017-May/022975.html reviewed-by: jkang diff -r df7dc704632a -r af1ff6ea8e2a HACKING --- a/HACKING Mon Mar 06 16:04:00 2017 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,181 +0,0 @@ -HACKING -======= - -This guide provides an introduction and some rules for developing -Thermostat. - -See also: http://icedtea.classpath.org/wiki/Thermostat/DevelopmentStyleGuide - - -Layout ------- - -Thermostat code is organized in a few different ways. - -The core functionality is split into `common`, `client`, and `agent` -modules (and their submodules). - -The rest is split functionally: `storage` contains storage-related -code, `launcher` is the main launcher and so on. To introduce a new -functional component of thermostat, put it in its own top-level -directory and make it a new module. - -Major new features should go into their own module(s). Each module is -an OSGi bundle. - -Plugins shipped with thermostat are put into their own separate -top-level modules in the source. Examples include `host-cpu` and -`vm-gc`. For the sake of consistency, name a vm-specific plugin with a -`vm-` prefix and a host-only plugin with a `host-` prefix. - -A module that gathers a particular data is generally split as follows: - -- `common`: shared code between the agent and the client -- `agent`: code that should only be executed on the agent -- `client`: code that should be executed client-side only -- `cli`: code that is meant for the command line only -- `swing`: code meant for the graphical runtime environment only -- `distribution`: a non-code module that bundles the entire plugin - into a single zip file. - -Use a single package as the module root package. Base it on the name -of the module. For a `vm-foo` module, use -`com.redhat.thermostat.vm.foo`. Avoid vague terms like `thermostat` -and `utils` in the package names. - -POM Files ---------- - -Define the version for any dependency in the root (or main) `pom.xml` -file. Define it as a property named `project-name.version`. Example: -`commons-cli.version`. - -If the OSGi version differs from the project version, define it as a -separate property `project-name.osgi-version`. Example: -`commons-codec.osgi-version`. - - -Code Style ----------- - -The standard license header goes on top of every file. It's enforced -using a maven plugin. Use `mvn license:format` to generate/update it. -The license template is defined in `src/license/header.txt`. - -Above all, be consistent with the style of code you are modifying. - -Formatting Style: -- Spaces instead of tabs -- Avoid trailing spaces - -Use this style: - - public class Foo { - public void foo(Bar bar, Baz baz) { - try { - if (possible) { - doFoo(bar); - } - } catch (FooException | BarExcetpion e) { - e.printStackTrace(); - } - } - } - - -UI Message Style ----------------- - -Messages displayed in progress handles should be short but mostly-complete -sentence fragments. Overly verbose messages clutter the UI, but overly curt -messages maybe not provide the user with enough information to distinguish -which task a progress notification belongs to. - -Additionally, messages should be properly capitalized, and should be -terminated with the Unicode horizontal ellipsis character ('\u2026') -immediately following the final character of the message itself - in other -words, there should be no space between the message and the ellipsis. - -This is a good example of a progress handle message: - -"Starting profiling\u2026" - -The following are bad examples of the same message: - -"Starting\u2026" (what task is starting?) -"Profiling\u2026" (what is profiling doing?) -"Starting profiling..." (these are three periods, not an ellipsis character) -"Starting profiling \u2026" (space before the ellipsis) -"starting profiling\u2026" (not capitalized correctly) - - -Tests ------ - -Every class `Foo` should have a unit test named `FooTest`. The test -should be in the same package. Test-specific hooks should be package -private in the original class. - -GUI code should be unit tested using FEST and Caciocavallo. - -For complex features, an integeration test should also be added if -possible. Integration tests go in the `integration-tests` module. - - -Documentation -------------- - -Add appropriate documentation, for both developers and users. - -Use the active voice for all user-facing documentation. - -Classes that are part of the public API should have some documentation -describing their use and linking to other relevant classes. - -Commands should have both summaries and descriptions. Write both the -summary and description in active and action-oriented style. For the -summary prefer direct and short forms: 'foo the bar' over 'foos the -bar by bazing the ...'. - -A command's summary is displayed as a short help message. Make it short. -Do not capitalize it, or end it with a period. - -A command's description is displayed as a long help message. Make it -fully describe the command, including its actions and side-effects. -Describe all options. Use full sentences, each ending with a period. - -Don't forget to update the man page (`distribution/docs/thermostat.1`) -when changing an existing command. - -Commits -------- - -All commits must build and pass all unit tests. - -Commits require review. Before pushing a commit, make sure it is -reviewed on the mailing list by at least one other developer and any -concerns have been resolved. - -Commit messages are normally of the form: - - Short summary of the fix - - A detailed description of fix with additional details, like steps to - reproduce the problem, explanation of any subtle changes, links to - docs or anything that might help when examining this changeset in the - future to figure out why a change was done. - - Also, try and keep commit message lines to under 80 characters. - - You can also link a bug using the PR notation. Something like "This - commit fixes PR666", which refers to a bug with the id 666 on - http://icedtea.classpath.org/bugzilla/ - - The last few lines are important. They list the reviewers and a link to - the mailing list thread (or the equivalent) where this patch was - reviewed. - - Reviewed-by: userid1, userid2, userid3 - Review-thread: http://link.to.mailing.list.discussion.example.com/ - - diff -r df7dc704632a -r af1ff6ea8e2a LICENSE --- a/LICENSE Mon Mar 06 16:04:00 2017 +0100 +++ b/LICENSE Mon May 08 14:51:37 2017 +0200 @@ -23,11 +23,3 @@ not obligated to do so. If you do not wish to do so, delete this exception statement from your version. --------------------------------------------------------------------------------- -Additional files and licenses --------------------------------------------------------------------------------- - -Thermostat uses Font Awesome by Dave Gandy (http://fontawesome.io) as primary -icon resource, distributed under the SIL OFL 1.1 (http://scripts.sil.org/OFL). -A copy of the OFL 1.1 license is also included and distributed with Thermostat. - diff -r df7dc704632a -r af1ff6ea8e2a OFL.txt --- a/OFL.txt Mon Mar 06 16:04:00 2017 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,93 +0,0 @@ -Font Awesome Copyright by Dave Gandy, http://fontawesome.io - -This Font Software is licensed under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: -http://scripts.sil.org/OFL - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. diff -r df7dc704632a -r af1ff6ea8e2a README --- a/README Mon Mar 06 16:04:00 2017 +0100 +++ b/README Mon May 08 14:51:37 2017 +0200 @@ -1,29 +1,12 @@ - -CONTENTS: --------------------------------------------------------------------------------- - -0. ABOUT -1. REQUIREMENTS -2. BUILDING THERMOSTAT -3. RUNNING THERMOSTAT -3.1 PASSING JVM SPECIFIC OPTIONS -3.2 GNOME KEYRING -4. EXTENDING THERMOSTAT -5. SYSTEM PROPERTIES -6. LICENSE -7. REFERENCES - - --------------------------------------------------------------------------------- -0. ABOUT - -Thermostat is a monitoring, profiling and serviceability tool for Java -applications. It allows users to examine, trace and profile various -attributes of a running JVM (and its environment) to understand how it +Thermostat is a micro-services based monitoring, profiling and serviceability +tool for Java applications. It allows users to examine, trace and profile +various attributes of a running JVM (and its environment) to understand how it is behaving. -Please use the discussion list for any questions, concerns or -comments. +Please use the discussion list for any questions, concerns or comments. + +User Guide: +- http://icedtea.classpath.org/wiki/Thermostat/UserGuide Additional resources: - Homepage: http://icedtea.classpath.org/thermostat/ @@ -31,235 +14,9 @@ - Discussion List: http://icedtea.classpath.org/mailman/listinfo/thermostat - Bug tracker: http://icedtea.classpath.org/bugzilla/ - --------------------------------------------------------------------------------- -1. REQUIREMENTS - -* OpenJDK 7 (or OpenJDK 8) - - Thermostat requires at least Java 7 to build and run. Thermostat has - been tested with OpenJDK 7 and 8. Other VMs or versions may or may - not work. Thermostat needs a full JDK to run. It will not work - correctly with just a JRE. - -* Maven (it will download all the java dependencies for you) -* Make, GCC + autoconf -* MongoDB server - - Thermostat requires mongodb (http://www.mongodb.org/) server >= 2.0.0. - - On Fedora, you can obtain it via: - - yum install mongodb-server - -* Either a /etc/os-release file or lsb_release -* Gnome Keyring Daemon development libraries plus pkg-configs. Either libsecret - based or a libgnome-keyring based solution is supported. -* GTK 2+ development libraries plus pkg-configs - - Gnome Keyring/GTK2+ development libraries are required at build time. - - You should check your distribution for the exact name of the libraries, on - Fedora based distributions you can obtain it via: - - dnf install libsecret-devel gtk2-devel - - or - - yum install libgnome-keyring-devel gtk2-devel - - on RHEL/CentOS 6.x via: - - yum install gnome-keyring-devel gtk2-devel - - On Debian (and probably Ubuntu): - - aptitude install libgnome-keyring-dev libgtk2.0-dev - --------------------------------------------------------------------------------- -2. BUILDING THERMOSTAT - -Thermostat consists of: - * CLI client - * Swing GUI client - * The thermostat agent - * The web service layer - -2.1. - Run "mvn clean install". All tests should pass and the build should - succeed. It requires a graphical environment for the ui tests. - - Thermostat also includes a Makefile wrapping the maven build. In most - cases, simply running "make" will accomplish the same as "mvn clean - install". Please see environment variables near beginning of - Makefile for some options that can be customized. - - You can skip the tests phase by running: - - mvn -Dmaven.test.skip=true clean install - - If maven is too chatty, you can try to pass the "-q" option: - - mvn -q -Dmaven.test.skip=true clean install - -2.2. - The resulting Thermostat system can now be found under the directory - distribution/target/image. - - If you want to install thermostat to a system location, use the - thermostat.home maven property to set that at build time: - - mvn -Dthermostat.home=/path/to/install/thermostat - - You will have to move the resulting build to the path manually. This property - sets up mostly distribution related files (for services) that need the full - path to Thermostat. It is not required to run thermostat normally. - --------------------------------------------------------------------------------- -3. RUNNING THERMOSTAT - - DISCLAIMER: These are simplified instructions as to how to set up and run - Thermostat on a local system. For production systems see - instructions in our user guide (see REFERENCES). - - cd into distribution/target/image directory just created - - Run GUI thermostat: - - Start thermostat local (this will run setup silently on first run): - bin/thermostat local - - Or run CLI thermostat: - - Run CLI-based setup with: - bin/thermostat setup -c - - Start the agent and the db: - bin/thermostat web-storage-service - - Start the shell client: - bin/thermostat shell - - Use the help command in order to find out about all available commands: - bin/thermostat help - -See also the user guide in the REFERENCES section of this document. - - -3.1. PASSING JVM SPECIFIC OPTIONS TO THERMOSTAT - -In some cases, it may be desirable to pass arguments to the virtual machine, -for example to increase memory or change the look and feel for the Swing Client. - -Thermostat follows a well established convention to enable this: options that -start with -J are not passed to the thermostat launcher, but instead to the -JVM itself. - -For example, this command launches thermostat with the Nimbus Look and Feel, -rather then the default one: - -bin/thermostat gui \ - -J-Dswing.defaultlaf=javax.swing.plaf.nimbus.NimbusLookAndFeel - - -3.2. GNOME KEYRING AND THERMOSTAT - -Thermostat includes support to store user credentials in the Gnome Keyring -daemon, if the user wishes. If this is not available at runtime, no credentials -will be stored. - --------------------------------------------------------------------------------- -4. EXTENDING THERMOSTAT - -Please see the HACKING file for more development information on thermostat -itself. - -If you are writing a plugin for thermostat, the README.api file contains a list -of public/support API of thermostat. - --------------------------------------------------------------------------------- -5. SYSTEM PROPERTIES - -Although Thermostat by default is configured to behave in the best possible -way, there is a number of system properties that allows tweaking the behaviour -of specific areas of the platform. - -Here follows the description for the release -referred by this README. Please, refer to -[3.1. PASSING JVM SPECIFIC OPTIONS TO THERMOSTAT] for an explanation -on how to pass system properties to Thermostat. - -IMPORTANT NOTE: Those properties should be considered internal and -may not be used or available in all the releases. Likewise, defaults may -change at any given time without notice. - -* Font Tweaks, Swing GUI only - - skip.system.fonts= - -By default, Thermostat tries to use the same fonts used by GTK on the -currently running Desktop. When this property is set to false, the process -is skipped. - -This property is only valid if the default look and feel is used, otherwise -is ignored. - -* Windows Translucency, Swing GUI only - - com.redhat.thermostat.popup.opaque= - -By default, Thermostat tries to use translucency popup menus to add a -subtle effect to its user interface. The user can request fully opaque -windows to be used instead, by setting this property to false. - -Note that not all desktop environment support transparency, so this -property may not have any effect. - - com.redhat.thermostat.popup.transparency= - -If transparent windows are used, this property influences the amount of -transparency of the windows. The valid range is 0.0 for fully transparent -and 1.0 for fully opaque, the default value is 0.90. - -* Mongo Storage Profiling, Mongo Storage only - - thermostat.storage.mongo.profile= - -Thermostat has some instrumentation code to perform analysis of the -backend databases. In the case of MongoDB, it is possible to run additional -analysis by using Mongo profiling features. The default is to run MongoDB -without profiling support, to turn profiling on this property should be set -to true. This option has only effect when Thermostat is directly responsible -to start the database backend, is ignored otherwise. - - thermostat.storage.mongo.profile.slowms= - -This property has only effect in conjunction with -"thermostat.storage.mongo.profile=true" and controls the threshold in -milliseconds to decide if a database operation is considered "slow". The -default is 100. - -* Queued Storage Thread Pool Size - - com.redhat.thermostat.storage.queue.poolSize= - -The above property is used to override the desired thread pool size. The size is -capped at size 100 (the default if no property is specified). This is because -Linux systems usually enforce a per-user process limit of 1024 (ulimit -u). - -The above upper bound can be lifted by setting the following property to true: - - com.redhat.thermostat.storage.queue.unbounded= - --------------------------------------------------------------------------------- -6. LICENSE +The project consist of multiple repositories with multiple projects, each +repository has specific READMEs with instructions. Thermostat itself is licensed under GPLv2 with Classpath Exception. Please see -the LICENSE file for more details about the licenses of Thermostat and other -projects used. - --------------------------------------------------------------------------------- -7. REFERENCES - - User Guide: - http://icedtea.classpath.org/wiki/Thermostat/UserGuide +the LICENSE file in each project directory for more details about the licenses +of Thermostat and other projects used. diff -r df7dc704632a -r af1ff6ea8e2a README.api --- a/README.api Mon Mar 06 16:04:00 2017 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,61 +0,0 @@ -Public API -========== - -The public supported API of thermostat consists of the following packages: - - - com.redhat.thermostat.agent - - com.redhat.thermostat.agent.command - - com.redhat.thermostat.agent.config - - com.redhat.thermostat.agent.utils - - com.redhat.thermostat.agent.utils.management - - com.redhat.thermostat.annotations - - com.redhat.thermostat.backend - - com.redhat.thermostat.client.cli - - com.redhat.thermostat.client.command - - com.redhat.thermostat.client.core - - com.redhat.thermostat.client.core.controllers - - com.redhat.thermostat.client.core.progress - - com.redhat.thermostat.client.core.views - - com.redhat.thermostat.client.swing - - com.redhat.thermostat.client.swing.components - - com.redhat.thermostat.client.swing.components.models - - com.redhat.thermostat.client.ui - - com.redhat.thermostat.common - - com.redhat.thermostat.common.cli - - com.redhat.thermostat.common.command - - com.redhat.thermostat.common.config - - com.redhat.thermostat.common.model - - com.redhat.thermostat.common.portability - - com.redhat.thermostat.common.ssl - - com.redhat.thermostat.common.tools - - com.redhat.thermostat.common.utils - - com.redhat.thermostat.launcher - - com.redhat.thermostat.plugin.validator - - com.redhat.thermostat.service.process - - com.redhat.thermostat.shared.config - - com.redhat.thermostat.shared.locale - - com.redhat.thermostat.storage.config - - com.redhat.thermostat.storage.core - - com.redhat.thermostat.storage.core.auth - - com.redhat.thermostat.storage.dao - - com.redhat.thermostat.storage.model - - com.redhat.thermostat.storage.monitor - - com.redhat.thermostat.storage.query - - com.redhat.thermostat.storage.testutils - - com.redhat.thermostat.utils.keyring - - - -Internal API ------------- - -A number of packages are public (either OSGi or not) but should be considered -internal. - - - c.r.t.main - - c.r.t.shared.perflog - - c.r.t.*.experimental (and subpackages) - - c.r.t.*.internal (and subpackages) - - c.r.t.storage.mongodb (and subpackages) - - c.r.t.web (and subpackages) - - c.r.t.*.noapi diff -r df7dc704632a -r af1ff6ea8e2a README.fontawesome --- a/README.fontawesome Mon Mar 06 16:04:00 2017 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,6 +0,0 @@ -Font awesome location: -./client/swing/src/main/resources/fontawesome-webfont.ttf - -Last update with version 4.5.0, downloaded on Tue, Janauary 12, from https://fortawesome.github.io/Font-Awesome - -Please, refer to FontAwesomeCheatsheet.pdf for the updated list of icons and IDs.