1 /*
2  * Copyright 2008-2019 by Emeric Vernat
3  *
4  *     This file is part of Java Melody.
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  *     http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  */

18 package net.bull.javamelody;
19
20 import java.util.Locale;
21
22 import net.bull.javamelody.internal.common.Parameters;
23
24 /**
25  * Liste des paramètres, tous optionnels.
26  * @author Emeric Vernat
27  */

28 public enum Parameter {
29     /**
30      * Résolution des courbes en secondes (60 par défaut).
31      * Une résolution entre 60 et 600 est recommandée (c'est-à-dire 1 à 10 minutes).
32      */

33     RESOLUTION_SECONDS("resolution-seconds"),
34
35     /**
36      * Nombre de jours avant qu'un fichier de graphique JRobin (extension .rrd) qui n'est plus utilisé,
37      * soit considéré comme obsolète et soit supprimé automatiquement, à minuit (90 par défaut, soit 3 mois).
38      */

39     OBSOLETE_GRAPHS_DAYS("obsolete-graphs-days"),
40
41     /**
42      * Nombre de jours avant qu'un fichier de statistiques (extension .ser.gz),
43      * soit considéré comme obsolète et soit supprimé automatiquement, à minuit (365 par défaut, soit 1 an).
44      */

45     OBSOLETE_STATS_DAYS("obsolete-stats-days"),
46
47     /**
48      * Maximum of disk usage by rrd files (20 MB by default).
49      */

50     MAX_RRD_DISK_USAGE_MB("max-rrd-disk-usage-mb"),
51
52     /**
53      * Période en secondes du sampling pour trouver les hotspots (null par défaut : pas de sampling).
54      * Une valeur de 10 est recommandée (c'est-à-dire 10 secondes) pour ne pas entraîner d'overhead,
55      * ce qui nécessitera plusieurs heures pour avoir des résultats significatifs.
56      * Cette période peut-être une valeur décimale comme 0.1 pour avoir des résultats plus rapidement,
57      * mais avec un plus grand overhead.
58      */

59     SAMPLING_SECONDS("sampling-seconds"),
60
61     /**
62      * Nom du répertoire de stockage (monitoring par défaut).
63      * Si le nom du répertoire commence par '/', on considère que c'est un chemin absolu,
64      * sinon on considère que c'est un chemin relatif par rapport au répertoire temporaire
65      * ('temp' dans TOMCAT_HOME pour tomcat).
66      */

67     STORAGE_DIRECTORY("storage-directory"),
68
69     /**
70      * Active le log des requêtes http au niveau INFO (false par défaut).
71      */

72     LOG("log"),
73
74     /**
75      * Seuil en millisecondes pour décompte en niveau warning (moyenne globale + 1 écart-type par défaut).
76      */

77     WARNING_THRESHOLD_MILLIS("warning-threshold-millis"),
78
79     /**
80      * Seuil en millisecondes pour décompte en niveau severe (moyenne globale + 2 * écart-type par défaut).
81      */

82     SEVERE_THRESHOLD_MILLIS("severe-threshold-millis"),
83
84     /**
85      * Expression régulière pour exclure certaines urls du monitoring (null par défaut).
86      * Voir {@link java.util.regex.Pattern http://java.sun.com/javase/6/docs/api/java/util/regex/Pattern.html}
87      */

88     URL_EXCLUDE_PATTERN("url-exclude-pattern"),
89
90     /**
91      * Expression régulière (null par défaut) pour transformer la description de la requête http
92      * et pour supprimer des parties variables (identifiant d'objet par exemple)
93      * afin de permettre l'agrégation sur ces requêtes.
94      */

95     HTTP_TRANSFORM_PATTERN("http-transform-pattern"),
96
97     /**
98      * Expression régulière (null par défaut) pour transformer la description de la requête sql
99      * (identifiants non bindés dans une clause in par exemple)
100      * afin de permettre l'agrégation sur ces requêtes.
101      */

102     SQL_TRANSFORM_PATTERN("sql-transform-pattern"),
103
104     /**
105      * Expression régulière (null par défaut) pour transformer la description d'une méthode ejb3.
106      */

107     EJB_TRANSFORM_PATTERN("ejb-transform-pattern"),
108
109     /**
110      * Expression régulière (null par défaut) pour transformer la description d'une requête jpa.
111      */

112     JPA_TRANSFORM_PATTERN("jpa-transform-pattern"),
113
114     /**
115      * Expression régulière (null par défaut) pour transformer la description d'une méthode spring.
116      */

117     SPRING_TRANSFORM_PATTERN("spring-transform-pattern"),
118
119     /**
120      * Expression régulière (null par défaut) pour transformer la description d'une méthode guice.
121      */

122     GUICE_TRANSFORM_PATTERN("guice-transform-pattern"),
123
124     /**
125      * Expression régulière (null par défaut) pour transformer la description d'une méthode de
126      * façade autre que ejb3, spring ou guice (ie par {@link MonitoringProxy}).
127      */

128     SERVICES_TRANSFORM_PATTERN("services-transform-pattern"),
129
130     /**
131      * Expression régulière (null par défaut) pour transformer la description d'une action Struts 2.
132      */

133     STRUTS_TRANSFORM_PATTERN("struts-transform-pattern"),
134
135     /**
136      * Expression régulière (null par défaut) pour transformer la description d'une action JSF.
137      */

138     JSF_TRANSFORM_PATTERN("jsf-transform-pattern"),
139
140     /**
141      * Expression régulière (null par défaut) pour transformer la description d'une erreur http.
142      */

143     ERROR_TRANSFORM_PATTERN("error-transform-pattern"),
144
145     /**
146      * Expression régulière (null par défaut) pour transformer la description d'un log.
147      */

148     LOG_TRANSFORM_PATTERN("log-transform-pattern"),
149
150     /**
151      * Expression régulière (null par défaut) pour transformer le nom d'un job.
152      */

153     JOB_TRANSFORM_PATTERN("job-transform-pattern"),
154
155     /**
156      * Expression régulière (null par défaut) pour transformer le nom d'une page jsp.
157      */

158     JSP_TRANSFORM_PATTERN("jsp-transform-pattern"),
159
160     /**
161      * Compteurs affichés: mettre "http,sql,error,log,ejb" pour afficher les ejb3
162      * ou "http,sql,error,log,spring" pour afficher les beans spring ("http,sql,error,log" par défaut).
163      */

164     DISPLAYED_COUNTERS("displayed-counters"),
165
166     /**
167      * Liste des noms de rapports personnalisés (null par défaut).<br/>
168      */

169     CUSTOM_REPORTS("custom-reports"),
170
171     /**
172      * Liste de packages exclus du sampling
173      * ("java,sun,com.sun,javax,org.apache,org.hibernate,oracle,org.postgresql,org.eclipse" par défaut).
174      */

175     SAMPLING_EXCLUDED_PACKAGES("sampling-excluded-packages"),
176
177     /**
178      * List of packages to include for sampling, can be used if sampling-excluded-packages is null
179      * (null by default).
180      */

181     SAMPLING_INCLUDED_PACKAGES("sampling-included-packages"),
182
183     /**
184      * Paramètre pour désactiver les graphiques jdbc, le compteur sql et le monitoring de base de
185      * données ("false" par défaut).
186      */

187     NO_DATABASE("no-database"),
188
189     /**
190      * Paramètre pour désactiver le listener sur le scheduler par défaut de Quartz ("false" par défaut).
191      */

192     QUARTZ_DEFAULT_LISTENER_DISABLED("quartz-default-listener-disabled"),
193
194     /**
195      * Paramètre pour désactiver la compression des flux http ("false" par défaut).
196      */

197     GZIP_COMPRESSION_DISABLED("gzip-compression-disabled"),
198
199     /**
200      * Active les actions systèmes telles que Ramasse-miettes, Invalidation sessions et Heap-dump (true par défaut).
201      */

202     SYSTEM_ACTIONS_ENABLED("system-actions-enabled"),
203
204     /**
205      * Active la protection contre CSRF (false par défaut).
206      */

207     CSRF_PROTECTION_ENABLED("csrf-protection-enabled"),
208
209     /**
210      * Valeur de l'entête http X-Frame-Options, par exemple, DENY, SAMEORIGIN, ALLOW-FROM http://example.com, ALLOWALL (SAMEORIGIN par défaut).
211      */

212     X_FRAME_OPTIONS("x-frame-options"),
213
214     /**
215      * Parameter to enable or disable the Content Security Policy header (true by default).
216      */

217     CONTENT_SECURITY_POLICY_ENABLED("content-security-policy-enabled"),
218
219     /**
220      * Expression régulière (null par défaut) pour restreindre l'accès au monitoring à certaines adresses IP.
221      */

222     ALLOWED_ADDR_PATTERN("allowed-addr-pattern"),
223
224     /**
225      * List of authorized users for BASIC auth, when you do no want to use a realm and "security-constraint" in web.xml.<br/>
226      * Format : user:password, one by line or separated by comma <br/>
227      * <pre>
228      * user1:pwd1, user2:pwd2
229      * user3:pwd3
230      * </pre>
231      */

232     AUTHORIZED_USERS("authorized-users"),
233
234     /**
235      * Désactive la vérification de l'authentification sur la page du monitoring dans le plugin Jenkins
236      * ou dans le plugin JIRA/Confluence/Bamboo, de manière à pouvoir utiliser le serveur de collecte
237      * centralisé (false par défaut). Le paramètre allowed-addr-pattern pourra être utilisé pour
238      * n'autoriser que le serveur de collecte pour l'obtention des données dans Jenkins/JIRA/Confluence/Bamboo.
239      */

240     PLUGIN_AUTHENTICATION_DISABLED("plugin-authentication-disabled"),
241
242     /**
243      * Désactive l'update-check (false par défaut).
244      */

245     UPDATE_CHECK_DISABLED("update-check-disabled"),
246
247     /**
248      * Désactive le monitoring (false par défaut).
249      */

250     DISABLED("disabled"),
251
252     /**
253      * Liste des datasources jdbc quand elles ne peuvent trouvées automatiquement dans JNDI (null par défaut).
254      */

255     DATASOURCES("datasources"),
256
257     /**
258      * Si Tomcat et si JNDI est utilisé pour les datasources, active le rewraping des
259      * datasources au lieu de faire du rebinding dans JNDI (false par défaut).
260      * Cela permet de monitorer les requêtes SQL dans le cas où les datasources sont récupérées une
261      * fois pour toute et que l'initialisation de JavaMelody ne peux être faite avant (hibernate par exemple).
262      * Cela est utilisé notamment dans le plugin Atlassian pour JIRA.
263      */

264     REWRAP_DATASOURCES("rewrap-datasources"),
265
266     /**
267      * Nom JNDI de la session mail pour l'envoi par mail de rapport de hebdomadaire (null par défaut).
268      */

269     MAIL_SESSION("mail-session"),
270
271     /**
272      * Liste des adresses mails séparées par des virgules des destinataires
273      * pour l'envoi par mail de rapport de hebdomadaire (null par défaut).
274      */

275     ADMIN_EMAILS("admin-emails"),
276
277     /**
278      * Used to specify prefix of the subject of the email notifications sent out by Javamelody.
279      * Supports one argument index {0} which will be replaced by application name at runtime.<br>
280      * For e.g. : Production environment JavaMelody Reports for {0} (Monitoring JavaMelody on {0} by default).
281      */

282     MAIL_SUBJECT_PREFIX("mail-subject-prefix"),
283
284     /**
285      * Liste des périodes d'envoi des mails séparées par des virgules
286      * pour l'envoi par mail de rapport de hebdomadaire.
287      * Les périodes doivent être "day""week" ou "month" ("week" par défaut).
288      */

289     MAIL_PERIODS("mail-periods"),
290
291     /**
292      * Format du transport entre un serveur de collecte et une application monitorée
293      * (serialized : sérialisation java par défaut et recommandée pour les performances, xml : possible).
294      */

295     TRANSPORT_FORMAT("transport-format"),
296
297     /**
298      * To fix the locale of the reports (default to null, ie locale is given by the language of the browser).<br/>
299      * Example values: "en_US""en""fr_FR""de_DE" or "pt_BR"
300      */

301     LOCALE("locale"),
302
303     /**
304      * URL du rapport de monitoring (/monitoring par défaut).
305      */

306     MONITORING_PATH("monitoring-path"),
307
308     /**
309      * Identifiant de suivi google analytics s'il y a lieu (désactivé par défaut).
310      */

311     ANALYTICS_ID("analytics-id"),
312
313     /**
314      * Expérimental, ne pas utiliser.
315      */

316     CONTEXT_FACTORY_ENABLED("context-factory-enabled"),
317
318     /**
319      * true | falsetrue will return localhost/127.0.0.1 for hostname/hostaddress, false will attempt dns lookup for hostname (defaultfalse).
320      */

321     DNS_LOOKUPS_DISABLED("dns-lookups-disabled"),
322
323     /**
324      * true | falsetrue will disable opening stack-traces of jdbc connections (defaultfalse).
325      */

326     CONNECTIONS_STACK_TRACES_DISABLED("connections-stack-traces-disabled"),
327
328     /**
329      * URL http du fichier jar javamelody-swing (null par défaut : le fichier sera téléchargé depuis https://github.com/javamelody/javamelody selon la version). <br/>
330      * Ce paramètre est surtout utile quand les utilisateurs n'ont pas accès à Internet pour télécharger sur github.
331      */

332     JAVAMELODY_SWING_URL("javamelody-swing-url"),
333
334     /**
335      * Name of a class to use for JavaMelody logs (defaultnull for detection of Logback, Log4J or java.util.logging). <br/>
336      * The class must implement the interface {@link net.bull.javamelody.JavaMelodyLogger},
337      * such as net.bull.javamelody.internal.common.Log4JLogger, net.bull.javamelody.internal.common.Log4J2Logger,
338      * net.bull.javamelody.internal.common.JavaLogger or net.bull.javamelody.internal.common.LogbackLogger.
339      */

340     LOGGER_CLASS("logger-class"),
341
342     /**
343      * Expose counters as JMX mbeans. Disabled by default.
344      */

345     JMX_EXPOSE_ENABLED("jmx-expose-enabled"),
346
347     /**
348      * Explicit name of the monitored application (in case the automatic name detection fails somehow).
349      */

350     APPLICATION_NAME("application-name"),
351
352     /**
353      * Explicit version of the monitored application (to override the version from Maven files for example).
354      */

355     APPLICATION_VERSION("application-version"),
356
357     /**
358      * Comma separated list of Maven repositories URLs (https://repo1.maven.org/maven2/ by default).
359      */

360     MAVEN_REPOSITORIES("maven-repositories"),
361
362     /**
363      * If Real User Monitoring enabled by injecting Boomerang javascript into html page ("false" by default).
364      */

365     RUM_ENABLED("rum-enabled"),
366
367     /**
368      * Address of the <a href='http://graphiteapp.org/'>Graphite</a> server to send metrics to,
369      * for example: 11.22.33.44:2003 (null by default).
370      */

371     GRAPHITE_ADDRESS("graphite-address"),
372
373     /**
374      * Address of the <a href='https://github.com/etsy/statsd'>StatsD</a> server to send metrics to,
375      * for example: 11.22.33.44:8125 (null by default).
376      */

377     STATSD_ADDRESS("statsd-address"),
378
379     /**
380      * Prefix of metrics that are sent to the <a href='https://github.com/etsy/statsd'>StatsD</a> server.
381      * Default value is "javamelody.context.host." where context and host gets replaced by the actual values.
382      */

383     STATSD_PREFIX("statsd-prefix"),
384
385     /**
386      * Namespace to use in <a href='https://aws.amazon.com/cloudwatch/'>AWS CloudWatch</a> to send metrics,
387      * for example "MyCompany/MyAppDomain" (null by default).
388      */

389     CLOUDWATCH_NAMESPACE("cloudwatch-namespace"),
390
391     /**
392      * Bucket name to use <a href='https://aws.amazon.com/s3/'>AWS S3</a> to send heap dump files (null by default).
393      */

394     HEAP_DUMP_S3_BUCKETNAME("heap-dump-s3-bucketname"),
395
396     /**
397      * URL of the <a href='https://www.influxdata.com/time-series-platform/'>InfluxDB</a> server to send metrics to,
398      * for example: http://11.22.33.44:8086/write?db=mydb (null by default).
399      */

400     INFLUXDB_URL("influxdb-url"),
401
402     /**
403      * API token for InfluxDB authentication, which can be used instead of basic authentication with username and password or token in the InfluxDB URL (null by default).
404      */

405     INFLUXDB_API_TOKEN("influxdb-api-token"),
406
407     /**
408      * API key of the <a href='https://www.datadoghq.com/'>Datadog</a> to send metrics,
409      * for example: 9775a026f1ca7d1c6c5af9d94d9595a4 (null by default).
410      */

411     DATADOG_API_KEY("datadog-api-key"),
412
413     /**
414      * <a href='https://www.datadog.com/'>Datadog</a> host for accessing API. 'api.datadoghq.com' is default.
415      */

416     DATADOG_API_HOST("datadog-api-host");
417
418     private final String code;
419
420     Parameter(String code) {
421         this.code = code;
422     }
423
424     /**
425      * @return code de l'enum tel qu'il doit être paramétré
426      */

427     public String getCode() {
428         return code;
429     }
430
431     /**
432      * @return valeur du paramètre
433      */

434     public String getValue() {
435         return Parameters.getParameterValue(this);
436     }
437
438     /**
439      * @return valeur du paramètre
440      */

441     public boolean getValueAsBoolean() { // NOPMD
442         return Boolean.parseBoolean(getValue());
443     }
444
445     /**
446      * Définit la valeur d'un paramètre en tant que propriété système.
447      * @param value Valeur
448      */

449     public void setValue(String value) {
450         assert value != null;
451         System.setProperty(Parameters.PARAMETER_SYSTEM_PREFIX + getCode(), value);
452     }
453
454     static Parameter valueOfIgnoreCase(String parameter) {
455         return valueOf(parameter.toUpperCase(Locale.ENGLISH).trim());
456     }
457 }
458