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 | false, true will return localhost/127.0.0.1 for hostname/hostaddress, false will attempt dns lookup for hostname (default: false).
320 */
321 DNS_LOOKUPS_DISABLED("dns-lookups-disabled"),
322
323 /**
324 * true | false, true will disable opening stack-traces of jdbc connections (default: false).
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 (default: null 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