You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2023/12/21 05:06:01 UTC
(openmeetings) 25/29: [OPENMEETINGS-2756] modules are restructured to remove 'test-jar'; Prometheus is updated to 1.0.0
This is an automated email from the ASF dual-hosted git repository.
solomax pushed a commit to branch jakarta-spring-6
in repository https://gitbox.apache.org/repos/asf/openmeetings.git
commit d49cf591b54ec93669573d576ed40be8679f5cc3
Author: Maxim Solodovnik <so...@apache.org>
AuthorDate: Sun Oct 8 20:08:13 2023 +0700
[OPENMEETINGS-2756] modules are restructured to remove 'test-jar'; Prometheus is updated to 1.0.0
---
openmeetings-core/pom.xml | 21 +-
openmeetings-core/src/test/java/module-info.test | 66 -----
openmeetings-db/pom.xml | 8 -
openmeetings-db/src/test/java/module-info.test | 87 ------
openmeetings-install/pom.xml | 7 -
.../src/test/java/module-info.test | 57 ----
openmeetings-mediaserver/pom.xml | 12 +-
.../src/test/java/module-info.test | 51 ----
openmeetings-screenshare/pom.xml | 1 -
openmeetings-server/pom.xml | 1 +
.../pom.xml | 34 +--
.../src/main/java/module-info.java | 14 +-
.../apache/openmeetings/test/NonJenkinsTest.java | 0
openmeetings-util/pom.xml | 18 +-
openmeetings-util/src/main/java/module-info.java | 4 +-
.../util/logging/PrometheusAspect.java | 14 +-
.../openmeetings/util/logging/PrometheusUtil.java | 37 ---
.../util/logging/TimedApplication.java | 1 -
.../openmeetings/util/logging/TimedDatabase.java | 1 -
openmeetings-util/src/test/java/module-info.test | 56 ----
openmeetings-web/pom.xml | 16 +-
openmeetings-web/src/main/java/module-info.java | 5 +-
.../util/logging/OpenMeetingsMetricsServlet.java | 19 +-
.../web/util/logging/TomcatGenericExports.java | 324 ---------------------
.../openmeetings/web/util/logging/TomcatStats.java | 314 ++++++++++++++++++++
.../webapp/WEB-INF/classes/applicationContext.xml | 2 +-
openmeetings-web/src/main/webapp/WEB-INF/web.xml | 50 +---
openmeetings-web/src/test/java/module-info.test | 92 ------
openmeetings-webservice/pom.xml | 12 +-
.../src/test/java/module-info.test | 58 ----
pom.xml | 82 ++++--
31 files changed, 435 insertions(+), 1029 deletions(-)
diff --git a/openmeetings-core/pom.xml b/openmeetings-core/pom.xml
index 54a96621f..2339024c3 100644
--- a/openmeetings-core/pom.xml
+++ b/openmeetings-core/pom.xml
@@ -34,7 +34,7 @@
</properties>
<build>
<plugins>
- <!--plugin>
+ <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<executions>
@@ -51,18 +51,6 @@
<goals>
<goal>javadoc-no-fork</goal>
</goals>
- <phase>generate-resources</phase>
- </execution>
- </executions>
- </plugin-->
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-jar-plugin</artifactId>
- <executions>
- <execution>
- <goals>
- <goal>test-jar</goal>
- </goals>
</execution>
</executions>
</plugin>
@@ -118,12 +106,5 @@
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
</dependency>
- <dependency>
- <groupId>org.apache.openmeetings</groupId>
- <artifactId>openmeetings-util</artifactId>
- <version>${project.version}</version>
- <type>test-jar</type>
- <scope>test</scope>
- </dependency>
</dependencies>
</project>
diff --git a/openmeetings-core/src/test/java/module-info.test b/openmeetings-core/src/test/java/module-info.test
deleted file mode 100644
index fb0ceeb30..000000000
--- a/openmeetings-core/src/test/java/module-info.test
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") + you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-open module org.apache.openmeetings.core {
- // This one should be in-sync with module-info.java
- exports org.apache.openmeetings.core.converter;
- exports org.apache.openmeetings.core.data.file;
- exports org.apache.openmeetings.core.ldap;
- exports org.apache.openmeetings.core.mail;
- exports org.apache.openmeetings.core.notifier;
- exports org.apache.openmeetings.core.rss;
- exports org.apache.openmeetings.core.sip;
- exports org.apache.openmeetings.core.util;
-
- requires com.github.openjson;
-
- requires jakarta.annotation;
- requires jakarta.inject;
- requires jakarta.mail;
-
- requires org.apache.commons.io;
- requires org.apache.commons.lang3;
-
- requires org.apache.tika.core;
- requires org.apache.tika.parser.image;
-
- requires org.apache.openmeetings.db;
- requires org.apache.openmeetings.util;
-
- requires org.apache.wicket.core;
- requires org.apache.wicket.websocket.core;
- requires org.apache.wicket.util;
-
- requires java.xml;
-
- requires xstream;
-
- requires jodconverter.core;
- requires jodconverter.local;
- requires org.apache.directory.ldap.api.all;
- requires asterisk.java;
- requires jain.sip.ri;
-
- requires spring.context;
-
- requires org.slf4j;
-
- //tests
- requires org.junit.jupiter.api;
-}
diff --git a/openmeetings-db/pom.xml b/openmeetings-db/pom.xml
index 3ba12399c..ed2df7a38 100644
--- a/openmeetings-db/pom.xml
+++ b/openmeetings-db/pom.xml
@@ -112,13 +112,6 @@
<groupId>com.google.code.findbugs</groupId>
<artifactId>jsr305</artifactId>
</dependency>
- <dependency>
- <groupId>org.apache.openmeetings</groupId>
- <artifactId>openmeetings-util</artifactId>
- <version>${project.version}</version>
- <type>test-jar</type>
- <scope>test</scope>
- </dependency>
</dependencies>
<build>
<plugins>
@@ -139,7 +132,6 @@
<goals>
<goal>javadoc-no-fork</goal>
</goals>
- <phase>generate-resources</phase>
</execution>
</executions>
</plugin-->
diff --git a/openmeetings-db/src/test/java/module-info.test b/openmeetings-db/src/test/java/module-info.test
deleted file mode 100644
index fd9ed1196..000000000
--- a/openmeetings-db/src/test/java/module-info.test
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") + you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-open module org.apache.openmeetings.db {
- // This one should be in-sync with module-info.java
- exports org.apache.openmeetings;
- exports org.apache.openmeetings.db.bind;
- exports org.apache.openmeetings.db.bind.adapter;
- exports org.apache.openmeetings.db.dao;
- exports org.apache.openmeetings.db.dao.basic;
- exports org.apache.openmeetings.db.dao.calendar;
- exports org.apache.openmeetings.db.dao.file;
- exports org.apache.openmeetings.db.dao.label;
- exports org.apache.openmeetings.db.dao.log;
- exports org.apache.openmeetings.db.dao.record;
- exports org.apache.openmeetings.db.dao.room;
- exports org.apache.openmeetings.db.dao.server;
- exports org.apache.openmeetings.db.dao.user;
- exports org.apache.openmeetings.db.dto.basic;
- exports org.apache.openmeetings.db.dto.calendar;
- exports org.apache.openmeetings.db.dto.file;
- exports org.apache.openmeetings.db.dto.record;
- exports org.apache.openmeetings.db.dto.room;
- exports org.apache.openmeetings.db.dto.user;
- exports org.apache.openmeetings.db.entity;
- exports org.apache.openmeetings.db.entity.basic;
- exports org.apache.openmeetings.db.entity.calendar;
- exports org.apache.openmeetings.db.entity.file;
- exports org.apache.openmeetings.db.entity.label;
- exports org.apache.openmeetings.db.entity.log;
- exports org.apache.openmeetings.db.entity.record;
- exports org.apache.openmeetings.db.entity.room;
- exports org.apache.openmeetings.db.entity.server;
- exports org.apache.openmeetings.db.entity.user;
- exports org.apache.openmeetings.db.manager;
- exports org.apache.openmeetings.db.mapper;
- exports org.apache.openmeetings.db.util;
- exports org.apache.openmeetings.db.util.ws;
-
- requires com.github.openjson;
-
- requires org.apache.commons.lang3;
- requires org.apache.commons.text;
-
- requires org.apache.openjpa;
-
- requires org.apache.openmeetings.util;
-
- requires org.apache.wicket.core;
- requires org.apache.wicket.extensions;
- requires org.apache.wicket.request;
- requires org.apache.wicket.util;
- requires org.apache.wicket.websocket.core;
-
- requires spring.beans;
- requires spring.web;
- requires spring.core;
- requires spring.tx;
- requires spring.context;
-
- requires jakarta.annotation;
- requires jakarta.inject;
- requires jakarta.persistence;
- requires jakarta.servlet;
- requires jakarta.xml.bind;
-
- requires org.dom4j;
- requires org.slf4j;
-
- //tests
- requires org.junit.jupiter.api;
-}
diff --git a/openmeetings-install/pom.xml b/openmeetings-install/pom.xml
index 3e37d0ed7..4b563bab0 100644
--- a/openmeetings-install/pom.xml
+++ b/openmeetings-install/pom.xml
@@ -53,12 +53,5 @@
<groupId>commons-cli</groupId>
<artifactId>commons-cli</artifactId>
</dependency>
- <dependency>
- <groupId>org.apache.openmeetings</groupId>
- <artifactId>openmeetings-util</artifactId>
- <version>${project.version}</version>
- <type>test-jar</type>
- <scope>test</scope>
- </dependency>
</dependencies>
</project>
diff --git a/openmeetings-install/src/test/java/module-info.test b/openmeetings-install/src/test/java/module-info.test
deleted file mode 100644
index 7841b5f3c..000000000
--- a/openmeetings-install/src/test/java/module-info.test
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") + you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-open module org.apache.openmeetings.install {
- // This one should be in-sync with module-info.java
- exports org.apache.openmeetings.backup;
- exports org.apache.openmeetings.cli;
- exports org.apache.openmeetings.installation;
-
- requires com.github.openjson;
-
- requires org.apache.commons.io;
- requires org.apache.commons.lang3;
-
- requires org.apache.openjpa;
-
- requires org.apache.openmeetings.core;
- requires org.apache.openmeetings.db;
- requires org.apache.openmeetings.util;
-
- requires org.apache.wicket.core;
- requires org.apache.wicket.request;
- requires org.apache.wicket.util;
-
- requires jakarta.inject;
- requires jakarta.xml.bind;
-
- requires spring.context;
- requires spring.context.support;
- requires spring.web;
-
- requires java.desktop;
- requires commons.cli;
- requires quartz;
- requires xstream;
-
- requires org.slf4j;
-
- //tests
- requires org.junit.jupiter.api;
-}
diff --git a/openmeetings-mediaserver/pom.xml b/openmeetings-mediaserver/pom.xml
index a38173417..1a2758a1d 100644
--- a/openmeetings-mediaserver/pom.xml
+++ b/openmeetings-mediaserver/pom.xml
@@ -49,17 +49,10 @@
<groupId>org.kurento</groupId>
<artifactId>kurento-client</artifactId>
</dependency>
- <dependency>
- <groupId>org.apache.openmeetings</groupId>
- <artifactId>openmeetings-util</artifactId>
- <version>${project.version}</version>
- <type>test-jar</type>
- <scope>test</scope>
- </dependency>
</dependencies>
<build>
<plugins>
- <!--plugin>
+ <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<executions>
@@ -76,10 +69,9 @@
<goals>
<goal>javadoc-no-fork</goal>
</goals>
- <phase>generate-resources</phase>
</execution>
</executions>
- </plugin-->
+ </plugin>
</plugins>
</build>
</project>
diff --git a/openmeetings-mediaserver/src/test/java/module-info.test b/openmeetings-mediaserver/src/test/java/module-info.test
deleted file mode 100644
index 3234ebb9b..000000000
--- a/openmeetings-mediaserver/src/test/java/module-info.test
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") + you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-open module org.apache.openmeetings.mediaserver {
- // This one should be in-sync with module-info.java
- exports org.apache.openmeetings.mediaserver;
-
- requires com.github.openjson;
-
- requires org.apache.commons.lang3;
-
- requires org.apache.openmeetings.core;
- requires org.apache.openmeetings.db;
- requires org.apache.openmeetings.util;
-
- requires org.apache.wicket.ioc;
- requires org.apache.wicket.util;
-
- requires jakarta.annotation;
- requires jakarta.inject;
-
- requires spring.beans;
- requires spring.context;
- requires spring.core;
-
- requires kurento.client;
- requires kurento.jsonrpc.client;
- requires kurento.commons;
- requires com.google.gson;
-
- requires org.slf4j;
-
- //tests
- requires org.junit.jupiter.api;
-}
diff --git a/openmeetings-screenshare/pom.xml b/openmeetings-screenshare/pom.xml
index 05b9e9035..a36ccdac5 100644
--- a/openmeetings-screenshare/pom.xml
+++ b/openmeetings-screenshare/pom.xml
@@ -214,4 +214,3 @@
</plugins>
</build>
</project>
-
diff --git a/openmeetings-server/pom.xml b/openmeetings-server/pom.xml
index 696978a04..e56f3c043 100644
--- a/openmeetings-server/pom.xml
+++ b/openmeetings-server/pom.xml
@@ -40,6 +40,7 @@
<om.webapp>webapps/openmeetings</om.webapp>
<root.webapp>webapps/ROOT</root.webapp>
<server-file.dir>web-server</server-file.dir>
+ <automatic-module-name>org.apache.openmeetings.server</automatic-module-name>
</properties>
<url>https://openmeetings.apache.org</url>
<scm>
diff --git a/openmeetings-install/pom.xml b/openmeetings-tests/pom.xml
similarity index 60%
copy from openmeetings-install/pom.xml
copy to openmeetings-tests/pom.xml
index 3e37d0ed7..0deadc56a 100644
--- a/openmeetings-install/pom.xml
+++ b/openmeetings-tests/pom.xml
@@ -25,40 +25,18 @@
<version>8.0.0-SNAPSHOT</version>
<relativePath>..</relativePath>
</parent>
- <artifactId>openmeetings-install</artifactId>
+ <artifactId>openmeetings-tests</artifactId>
<packaging>jar</packaging>
- <name>Openmeetings Install</name>
- <description>Module for OpenMeetings command line admin and classes necessary for installer.</description>
+ <name>Openmeetings Tests</name>
+ <description>Module for common test classes</description>
<properties>
<site.basedir>${project.parent.basedir}</site.basedir>
</properties>
<dependencies>
<dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-context-support</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-core</artifactId>
- </dependency>
- <dependency>
- <groupId>org.quartz-scheduler</groupId>
- <artifactId>quartz</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.openmeetings</groupId>
- <artifactId>openmeetings-core</artifactId>
- </dependency>
- <dependency>
- <groupId>commons-cli</groupId>
- <artifactId>commons-cli</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.openmeetings</groupId>
- <artifactId>openmeetings-util</artifactId>
- <version>${project.version}</version>
- <type>test-jar</type>
- <scope>test</scope>
+ <groupId>org.junit.jupiter</groupId>
+ <artifactId>junit-jupiter-api</artifactId>
+ <scope>compile</scope>
</dependency>
</dependencies>
</project>
diff --git a/openmeetings-util/src/main/java/org/apache/openmeetings/util/logging/TimedDatabase.java b/openmeetings-tests/src/main/java/module-info.java
similarity index 72%
copy from openmeetings-util/src/main/java/org/apache/openmeetings/util/logging/TimedDatabase.java
copy to openmeetings-tests/src/main/java/module-info.java
index 028029551..60d0547a5 100644
--- a/openmeetings-util/src/main/java/org/apache/openmeetings/util/logging/TimedDatabase.java
+++ b/openmeetings-tests/src/main/java/module-info.java
@@ -1,5 +1,4 @@
/*
-
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@@ -17,15 +16,8 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.openmeetings.util.logging;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-@Retention(RetentionPolicy.RUNTIME)
-@Target(ElementType.METHOD)
-public @interface TimedDatabase {
+module org.apache.openmeetings.tests {
+ exports org.apache.openmeetings.test;
+ requires org.junit.jupiter.api;
}
diff --git a/openmeetings-util/src/test/java/org/apache/openmeetings/test/NonJenkinsTest.java b/openmeetings-tests/src/main/java/org/apache/openmeetings/test/NonJenkinsTest.java
similarity index 100%
rename from openmeetings-util/src/test/java/org/apache/openmeetings/test/NonJenkinsTest.java
rename to openmeetings-tests/src/main/java/org/apache/openmeetings/test/NonJenkinsTest.java
diff --git a/openmeetings-util/pom.xml b/openmeetings-util/pom.xml
index b4388d9a5..8f99a8388 100644
--- a/openmeetings-util/pom.xml
+++ b/openmeetings-util/pom.xml
@@ -38,17 +38,6 @@
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
</plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-jar-plugin</artifactId>
- <executions>
- <execution>
- <goals>
- <goal>test-jar</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
</plugins>
<resources>
<resource>
@@ -132,7 +121,12 @@
</dependency>
<dependency>
<groupId>io.prometheus</groupId>
- <artifactId>simpleclient_servlet_jakarta</artifactId>
+ <artifactId>prometheus-metrics-core</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.openmeetings</groupId>
+ <artifactId>openmeetings-tests</artifactId>
</dependency>
</dependencies>
</project>
diff --git a/openmeetings-util/src/main/java/module-info.java b/openmeetings-util/src/main/java/module-info.java
index 72e073b16..12b8d3ca4 100644
--- a/openmeetings-util/src/main/java/module-info.java
+++ b/openmeetings-util/src/main/java/module-info.java
@@ -45,7 +45,9 @@ module org.apache.openmeetings.util {
requires org.mnode.ical4j.core;
requires org.aspectj.tools;
requires org.dom4j;
- requires simpleclient;
requires ch.qos.logback.classic;
requires ch.qos.logback.core;
+
+ requires prometheus.metrics.core;
+ requires prometheus.metrics.model;
}
diff --git a/openmeetings-util/src/main/java/org/apache/openmeetings/util/logging/PrometheusAspect.java b/openmeetings-util/src/main/java/org/apache/openmeetings/util/logging/PrometheusAspect.java
index 396f5ae50..258f0e3e1 100644
--- a/openmeetings-util/src/main/java/org/apache/openmeetings/util/logging/PrometheusAspect.java
+++ b/openmeetings-util/src/main/java/org/apache/openmeetings/util/logging/PrometheusAspect.java
@@ -24,21 +24,27 @@ import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
-import io.prometheus.client.Histogram;
+import io.prometheus.metrics.core.metrics.Histogram;
+import io.prometheus.metrics.model.snapshots.Unit;
@Aspect
@Component
public class PrometheusAspect {
+ private static final Histogram histogram = Histogram.builder()
+ .help("OpenMeetings Application Metrics")
+ .name("org_openmeetings_metrics")
+ .labelNames("class", "method", "type", "message")
+ .register();
private Object logExecutionTime(ProceedingJoinPoint joinPoint, String logType) throws Throwable {
String className = joinPoint.getSignature().getDeclaringType().getSimpleName();
String methodName = joinPoint.getSignature().getName();
- Histogram.Timer timer = PrometheusUtil.getHistogram() //
- .labels(className, methodName, logType, "default").startTimer();
+ long start = System.nanoTime();
try {
return joinPoint.proceed();
} finally {
- timer.observeDuration();
+ histogram.labelValues(className, methodName, logType, "default")
+ .observe(Unit.nanosToSeconds(System.nanoTime() - start));
}
}
diff --git a/openmeetings-util/src/main/java/org/apache/openmeetings/util/logging/PrometheusUtil.java b/openmeetings-util/src/main/java/org/apache/openmeetings/util/logging/PrometheusUtil.java
deleted file mode 100644
index 0f1cfd3f0..000000000
--- a/openmeetings-util/src/main/java/org/apache/openmeetings/util/logging/PrometheusUtil.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
-
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") + you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.util.logging;
-
-import io.prometheus.client.Histogram;
-
-public class PrometheusUtil {
- private static final Histogram histogram = Histogram.build()
- .help("OpenMeetings Application Metrics")
- .name("org_openmeetings_metrics")
- .labelNames("class", "method", "type", "message")
- .register();
-
- private PrometheusUtil() {
- }
-
- public static Histogram getHistogram() {
- return histogram;
- }
-}
diff --git a/openmeetings-util/src/main/java/org/apache/openmeetings/util/logging/TimedApplication.java b/openmeetings-util/src/main/java/org/apache/openmeetings/util/logging/TimedApplication.java
index 09c25ea7a..b5d23fae2 100644
--- a/openmeetings-util/src/main/java/org/apache/openmeetings/util/logging/TimedApplication.java
+++ b/openmeetings-util/src/main/java/org/apache/openmeetings/util/logging/TimedApplication.java
@@ -27,5 +27,4 @@ import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface TimedApplication {
-
}
diff --git a/openmeetings-util/src/main/java/org/apache/openmeetings/util/logging/TimedDatabase.java b/openmeetings-util/src/main/java/org/apache/openmeetings/util/logging/TimedDatabase.java
index 028029551..cdbe750b8 100644
--- a/openmeetings-util/src/main/java/org/apache/openmeetings/util/logging/TimedDatabase.java
+++ b/openmeetings-util/src/main/java/org/apache/openmeetings/util/logging/TimedDatabase.java
@@ -27,5 +27,4 @@ import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface TimedDatabase {
-
}
diff --git a/openmeetings-util/src/test/java/module-info.test b/openmeetings-util/src/test/java/module-info.test
deleted file mode 100644
index 3ea1b258b..000000000
--- a/openmeetings-util/src/test/java/module-info.test
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") + you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-open module org.apache.openmeetings.util {
- // This one should be in-sync with module-info.java
- exports org.apache.openmeetings.util;
- exports org.apache.openmeetings.util.crypt;
- exports org.apache.openmeetings.util.mail;
- exports org.apache.openmeetings.util.process;
- exports org.apache.openmeetings.util.ws;
- exports org.apache.openmeetings.util.logging;
-
- requires jakarta.activation;
- requires jakarta.servlet;
-
- requires com.github.openjson;
-
- requires org.apache.commons.codec;
- requires org.apache.commons.lang3;
-
- requires org.apache.tika.core;
-
- requires org.apache.wicket.util;
- requires org.apache.wicket.core;
- requires org.apache.wicket.extensions;
-
- requires org.slf4j;
- requires spring.context;
-
- requires org.bouncycastle.provider;
- requires org.mnode.ical4j.core;
- requires org.aspectj.tools;
- requires org.dom4j;
- requires simpleclient;
- requires ch.qos.logback.classic;
- requires ch.qos.logback.core;
-
- //tests
- requires transitive org.junit.jupiter.engine;
- requires transitive org.junit.jupiter.api;
-}
diff --git a/openmeetings-web/pom.xml b/openmeetings-web/pom.xml
index 5cc6c4d42..48dceb1ab 100644
--- a/openmeetings-web/pom.xml
+++ b/openmeetings-web/pom.xml
@@ -476,17 +476,7 @@
<!-- Test dependencies -->
<dependency>
<groupId>org.apache.openmeetings</groupId>
- <artifactId>openmeetings-util</artifactId>
- <version>${project.version}</version>
- <type>test-jar</type>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.openmeetings</groupId>
- <artifactId>openmeetings-core</artifactId>
- <version>${project.version}</version>
- <type>test-jar</type>
- <scope>test</scope>
+ <artifactId>openmeetings-tests</artifactId>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
@@ -521,5 +511,9 @@
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
</dependency>
+ <dependency>
+ <groupId>io.prometheus</groupId>
+ <artifactId>prometheus-metrics-exporter-servlet-jakarta</artifactId>
+ </dependency>
</dependencies>
</project>
diff --git a/openmeetings-web/src/main/java/module-info.java b/openmeetings-web/src/main/java/module-info.java
index e793d828e..78eefd4db 100644
--- a/openmeetings-web/src/main/java/module-info.java
+++ b/openmeetings-web/src/main/java/module-info.java
@@ -74,7 +74,6 @@ module org.apache.openmeetings.web {
requires com.hazelcast.core;
requires org.danekja.jdk.serializable.functional;
- requires simpleclient.servlet.jakarta;
requires xstream;
requires spring.beans;
@@ -83,4 +82,8 @@ module org.apache.openmeetings.web {
requires spring.web;
requires org.slf4j;
+
+ requires prometheus.metrics.core;
+ requires prometheus.metrics.model;
+ requires prometheus.metrics.exporter.servlet.jakarta;
}
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/logging/OpenMeetingsMetricsServlet.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/logging/OpenMeetingsMetricsServlet.java
index f068ddbbc..f45e2040a 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/logging/OpenMeetingsMetricsServlet.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/logging/OpenMeetingsMetricsServlet.java
@@ -18,14 +18,27 @@
*/
package org.apache.openmeetings.web.util.logging;
-import io.prometheus.client.servlet.jakarta.exporter.MetricsServlet;
+import java.io.IOException;
-public class OpenMeetingsMetricsServlet extends MetricsServlet {
+import org.springframework.stereotype.Service;
+
+import io.prometheus.metrics.exporter.servlet.jakarta.PrometheusMetricsServlet;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+
+@Service
+public class OpenMeetingsMetricsServlet extends PrometheusMetricsServlet {
private static final long serialVersionUID = 1L;
+ private final TomcatStats stats;
public OpenMeetingsMetricsServlet() {
super();
- new TomcatGenericExports(false).register();
+ stats = new TomcatStats(false);
}
+ @Override
+ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
+ stats.refresh();
+ super.doGet(request, response);
+ }
}
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/logging/TomcatGenericExports.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/logging/TomcatGenericExports.java
deleted file mode 100644
index 5403b53b2..000000000
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/logging/TomcatGenericExports.java
+++ /dev/null
@@ -1,324 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") + you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.util.logging;
-
-import java.io.InputStream;
-import java.lang.management.ManagementFactory;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Properties;
-import java.util.Set;
-
-import javax.management.Attribute;
-import javax.management.AttributeList;
-import javax.management.MBeanServer;
-import javax.management.ObjectInstance;
-import javax.management.ObjectName;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import io.prometheus.client.Collector;
-import io.prometheus.client.CounterMetricFamily;
-import io.prometheus.client.GaugeMetricFamily;
-
-/**
- * Exports Tomcat metrics applicable to most most applications:
- *
- * - http session metrics - request processor metrics - thread pool metrics
- *
- * Example usage:
- *
- * <pre>
- * {@code
- * new TomcatGenericExports(false).register();
- * }
- * </pre>
- *
- * Example metrics being exported:
- *
- * <pre>
- * tomcat_info{version="7.0.61.0",build="Apr 29 2015 14:58:03 UTC",} 1.0
- * tomcat_session_active_total{context="/foo",host="default",} 877.0
- * tomcat_session_rejected_total{context="/foo",host="default",} 0.0
- * tomcat_session_created_total{context="/foo",host="default",} 24428.0
- * tomcat_session_expired_total{context="/foo",host="default",} 23832.0
- * tomcat_session_alivetime_seconds_avg{context="/foo",host="default",} 633.0
- * tomcat_session_alivetime_seconds_max{context="/foo",host="default",} 9883.0
- * tomcat_requestprocessor_received_bytes{name="http-bio-0.0.0.0-8080",} 0.0
- * tomcat_requestprocessor_sent_bytes{name="http-bio-0.0.0.0-8080",} 5056098.0
- * tomcat_requestprocessor_time_seconds{name="http-bio-0.0.0.0-8080",} 127386.0
- * tomcat_requestprocessor_error_count{name="http-bio-0.0.0.0-8080",} 0.0
- * tomcat_requestprocessor_request_count{name="http-bio-0.0.0.0-8080",} 33709.0
- * tomcat_threads_total{pool="http-bio-0.0.0.0-8080",} 10.0
- * tomcat_threads_active_total{pool="http-bio-0.0.0.0-8080",} 2.0
- * tomcat_threads_active_max{pool="http-bio-0.0.0.0-8080",} 200.0
- * </pre>
- */
-public class TomcatGenericExports extends Collector {
- private static final Logger log = LoggerFactory.getLogger(TomcatGenericExports.class);
- private static final String LABEL_NAME = "name";
- private String jmxDomain = "Catalina";
-
- public TomcatGenericExports(boolean embedded) {
- if (embedded) {
- jmxDomain = "Tomcat";
- }
- }
-
- private void addRequestProcessorMetrics(List<MetricFamilySamples> mfs) {
- try {
- final MBeanServer server = ManagementFactory.getPlatformMBeanServer();
- ObjectName filterName = new ObjectName(jmxDomain + ":type=GlobalRequestProcessor,name=*");
- Set<ObjectInstance> mBeans = server.queryMBeans(filterName, null);
-
- if (!mBeans.isEmpty()) {
- List<String> labelNameList = List.of(LABEL_NAME);
-
- GaugeMetricFamily requestProcessorBytesReceivedGauge = new GaugeMetricFamily(
- "tomcat_requestprocessor_received_bytes", "Number of bytes received by this request processor",
- labelNameList);
-
- GaugeMetricFamily requestProcessorBytesSentGauge = new GaugeMetricFamily(
- "tomcat_requestprocessor_sent_bytes", "Number of bytes sent by this request processor",
- labelNameList);
-
- GaugeMetricFamily requestProcessorProcessingTimeGauge = new GaugeMetricFamily(
- "tomcat_requestprocessor_time_seconds", "The total time spend by this request processor",
- labelNameList);
-
- CounterMetricFamily requestProcessorErrorCounter = new CounterMetricFamily(
- "tomcat_requestprocessor_error_count",
- "The number of error request served by this request processor", labelNameList);
-
- CounterMetricFamily requestProcessorRequestCounter = new CounterMetricFamily(
- "tomcat_requestprocessor_request_count",
- "The number of request served by this request processor", labelNameList);
-
- for (final ObjectInstance mBean : mBeans) {
- List<String> labelValueList = Collections
- .singletonList(mBean.getObjectName().getKeyProperty("name").replaceAll("[\"\\\\]", ""));
-
- requestProcessorBytesReceivedGauge.addMetric(labelValueList,
- ((Long) server.getAttribute(mBean.getObjectName(), "bytesReceived")).doubleValue());
-
- requestProcessorBytesSentGauge.addMetric(labelValueList,
- ((Long) server.getAttribute(mBean.getObjectName(), "bytesSent")).doubleValue());
-
- requestProcessorProcessingTimeGauge.addMetric(labelValueList,
- ((Long) server.getAttribute(mBean.getObjectName(), "processingTime")).doubleValue()
- / 1000.0);
-
- requestProcessorErrorCounter.addMetric(labelValueList,
- ((Integer) server.getAttribute(mBean.getObjectName(), "errorCount")).doubleValue());
-
- requestProcessorRequestCounter.addMetric(labelValueList,
- ((Integer) server.getAttribute(mBean.getObjectName(), "requestCount")).doubleValue());
- }
-
- mfs.add(requestProcessorBytesReceivedGauge);
- mfs.add(requestProcessorBytesSentGauge);
- mfs.add(requestProcessorProcessingTimeGauge);
- mfs.add(requestProcessorRequestCounter);
- mfs.add(requestProcessorErrorCounter);
- }
- } catch (Exception e) {
- log.error("Error retrieving metric.", e);
- }
- }
-
- private void addSessionMetrics(List<MetricFamilySamples> mfs) {
- try {
- final MBeanServer server = ManagementFactory.getPlatformMBeanServer();
- ObjectName filterName = new ObjectName(jmxDomain + ":type=Manager,context=*,host=*");
- Set<ObjectInstance> mBeans = server.queryMBeans(filterName, null);
-
- if (!mBeans.isEmpty()) {
- List<String> labelNameList = List.of("host", "context");
-
- GaugeMetricFamily activeSessionCountGauge = new GaugeMetricFamily("tomcat_session_active_total",
- "Number of active sessions", labelNameList);
-
- GaugeMetricFamily rejectedSessionCountGauge = new GaugeMetricFamily("tomcat_session_rejected_total",
- "Number of sessions rejected due to maxActive being reached", labelNameList);
-
- GaugeMetricFamily createdSessionCountGauge = new GaugeMetricFamily("tomcat_session_created_total",
- "Number of sessions created", labelNameList);
-
- GaugeMetricFamily expiredSessionCountGauge = new GaugeMetricFamily("tomcat_session_expired_total",
- "Number of sessions that expired", labelNameList);
-
- GaugeMetricFamily sessionAvgAliveTimeGauge = new GaugeMetricFamily(
- "tomcat_session_alivetime_seconds_avg", "Average time an expired session had been alive",
- labelNameList);
-
- GaugeMetricFamily sessionMaxAliveTimeGauge = new GaugeMetricFamily(
- "tomcat_session_alivetime_seconds_max", "Maximum time an expired session had been alive",
- labelNameList);
-
- GaugeMetricFamily contextStateGauge = new GaugeMetricFamily("tomcat_context_state_started",
- "Indication if the lifecycle state of this context is STARTED", labelNameList);
-
- for (final ObjectInstance mBean : mBeans) {
- List<String> labelValueList = List.of(mBean.getObjectName().getKeyProperty("host"),
- mBean.getObjectName().getKeyProperty("context"));
-
- activeSessionCountGauge.addMetric(labelValueList,
- ((Integer) server.getAttribute(mBean.getObjectName(), "activeSessions")).doubleValue());
-
- rejectedSessionCountGauge.addMetric(labelValueList,
- ((Integer) server.getAttribute(mBean.getObjectName(), "rejectedSessions")).doubleValue());
-
- createdSessionCountGauge.addMetric(labelValueList,
- ((Long) server.getAttribute(mBean.getObjectName(), "sessionCounter")).doubleValue());
-
- expiredSessionCountGauge.addMetric(labelValueList,
- ((Long) server.getAttribute(mBean.getObjectName(), "expiredSessions")).doubleValue());
-
- sessionAvgAliveTimeGauge.addMetric(labelValueList,
- ((Integer) server.getAttribute(mBean.getObjectName(), "sessionAverageAliveTime"))
- .doubleValue());
-
- sessionMaxAliveTimeGauge.addMetric(labelValueList,
- ((Integer) server.getAttribute(mBean.getObjectName(), "sessionMaxAliveTime"))
- .doubleValue());
-
- if (server.getAttribute(mBean.getObjectName(), "stateName").equals("STARTED")) {
- contextStateGauge.addMetric(labelValueList, 1.0);
- } else {
- contextStateGauge.addMetric(labelValueList, 0.0);
- }
- }
-
- mfs.add(activeSessionCountGauge);
- mfs.add(rejectedSessionCountGauge);
- mfs.add(createdSessionCountGauge);
- mfs.add(expiredSessionCountGauge);
- mfs.add(sessionAvgAliveTimeGauge);
- mfs.add(sessionMaxAliveTimeGauge);
- mfs.add(contextStateGauge);
- }
- } catch (Exception e) {
- log.error("Error retrieving metric.", e);
- }
- }
-
- private void addThreadPoolMetrics(List<MetricFamilySamples> mfs) {
- try {
- final MBeanServer server = ManagementFactory.getPlatformMBeanServer();
- ObjectName filterName = new ObjectName(jmxDomain + ":type=ThreadPool,name=*");
- Set<ObjectInstance> mBeans = server.queryMBeans(filterName, null);
-
- if (!mBeans.isEmpty()) {
- List<String> labelList = List.of(LABEL_NAME);
-
- GaugeMetricFamily threadPoolCurrentCountGauge = new GaugeMetricFamily("tomcat_threads_total",
- "Number threads in this pool.", labelList);
-
- GaugeMetricFamily threadPoolActiveCountGauge = new GaugeMetricFamily("tomcat_threads_active_total",
- "Number of active threads in this pool.", labelList);
-
- GaugeMetricFamily threadPoolMaxThreadsGauge = new GaugeMetricFamily("tomcat_threads_max",
- "Maximum number of threads allowed in this pool.", labelList);
-
- GaugeMetricFamily threadPoolConnectionCountGauge = new GaugeMetricFamily(
- "tomcat_connections_active_total", "Number of connections served by this pool.", labelList);
-
- GaugeMetricFamily threadPoolMaxConnectionGauge = new GaugeMetricFamily("tomcat_connections_active_max",
- "Maximum number of concurrent connections served by this pool.", labelList);
-
- String[] genericAttributes = new String[] { "currentThreadCount", "currentThreadsBusy", "maxThreads",
- "connectionCount", "maxConnections" };
-
- for (final ObjectInstance mBean : mBeans) {
- List<String> labelValueList = Collections
- .singletonList(mBean.getObjectName().getKeyProperty("name").replaceAll("[\"\\\\]", ""));
- AttributeList attributeList = server.getAttributes(mBean.getObjectName(), genericAttributes);
- for (Attribute attribute : attributeList.asList()) {
- switch (attribute.getName()) {
- case "currentThreadCount":
- threadPoolCurrentCountGauge.addMetric(labelValueList,
- ((Integer) attribute.getValue()).doubleValue());
- break;
- case "currentThreadsBusy":
- threadPoolActiveCountGauge.addMetric(labelValueList,
- ((Integer) attribute.getValue()).doubleValue());
- break;
- case "maxThreads":
- threadPoolMaxThreadsGauge.addMetric(labelValueList,
- ((Integer) attribute.getValue()).doubleValue());
- break;
- case "connectionCount":
- threadPoolConnectionCountGauge.addMetric(labelValueList,
- ((Long) attribute.getValue()).doubleValue());
- break;
- case "maxConnections":
- threadPoolMaxConnectionGauge.addMetric(labelValueList,
- ((Integer) attribute.getValue()).doubleValue());
- break;
- default:
- log.warn("Unexpected attribute {}", attribute);
- break;
- }
- }
- }
-
- addNonEmptyMetricFamily(mfs, threadPoolCurrentCountGauge);
- addNonEmptyMetricFamily(mfs, threadPoolActiveCountGauge);
- addNonEmptyMetricFamily(mfs, threadPoolMaxThreadsGauge);
- addNonEmptyMetricFamily(mfs, threadPoolConnectionCountGauge);
- addNonEmptyMetricFamily(mfs, threadPoolMaxConnectionGauge);
- }
- } catch (Exception e) {
- log.error("Error retrieving metric: {}", e.getMessage());
- }
- }
-
- private void addVersionInfo(List<MetricFamilySamples> mfs) {
- GaugeMetricFamily tomcatInfo = new GaugeMetricFamily("tomcat_info", "tomcat version info",
- List.of("version", "build"));
- try (InputStream is = getClass().getResourceAsStream("/org/apache/catalina/util/ServerInfo.properties")) {
- Properties props = new Properties();
- props.load(is);
- //server info can be get as props.getProperty("server.info");
- tomcatInfo.addMetric(List.of(props.getProperty("server.number"), props.getProperty("server.built")), 1);
- } catch (Exception t) {
- log.warn("Unable to read Tomcat version: ", t);
- }
- mfs.add(tomcatInfo);
- }
-
- private void addNonEmptyMetricFamily(List<MetricFamilySamples> mfs, GaugeMetricFamily metricFamily) {
- if (!metricFamily.samples.isEmpty()) {
- mfs.add(metricFamily);
- }
- }
-
- @Override
- public List<MetricFamilySamples> collect() {
- List<MetricFamilySamples> mfs = new ArrayList<>();
- addSessionMetrics(mfs);
- addThreadPoolMetrics(mfs);
- addRequestProcessorMetrics(mfs);
- addVersionInfo(mfs);
- return mfs;
-
- }
-}
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/logging/TomcatStats.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/logging/TomcatStats.java
new file mode 100644
index 000000000..cd1f9842d
--- /dev/null
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/logging/TomcatStats.java
@@ -0,0 +1,314 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") + you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.util.logging;
+
+import java.io.InputStream;
+import java.lang.management.ManagementFactory;
+import java.util.Properties;
+import java.util.Set;
+
+import javax.management.Attribute;
+import javax.management.AttributeList;
+import javax.management.AttributeNotFoundException;
+import javax.management.InstanceNotFoundException;
+import javax.management.MBeanException;
+import javax.management.MBeanServer;
+import javax.management.ObjectInstance;
+import javax.management.ObjectName;
+import javax.management.ReflectionException;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import io.prometheus.metrics.core.metrics.Gauge;
+
+/**
+ * Exports Tomcat metrics applicable to most applications:
+ *
+ * - http session metrics - request processor metrics - thread pool metrics
+ *
+ * Example usage:
+ *
+ * <pre>
+ * {@code
+ * TomcatStats stats = new TomcatStats(false);
+ * stats.refresh();
+ * }
+ * </pre>
+ *
+ * Example metrics being exported:
+ *
+ * <pre>
+ * tomcat_info{version="7.0.61.0",build="Apr 29 2015 14:58:03 UTC",} 1.0
+ * tomcat_session_active{context="/foo",host="default",} 877.0
+ * tomcat_session_rejected{context="/foo",host="default",} 0.0
+ * tomcat_session_constructed{context="/foo",host="default",} 24428.0
+ * tomcat_session_expired{context="/foo",host="default",} 23832.0
+ * tomcat_session_alivetime_seconds_avg{context="/foo",host="default",} 633.0
+ * tomcat_session_alivetime_seconds_max{context="/foo",host="default",} 9883.0
+ * tomcat_requestprocessor_received_bytes{name="http-bio-0.0.0.0-8080",} 0.0
+ * tomcat_requestprocessor_sent_bytes{name="http-bio-0.0.0.0-8080",} 5056098.0
+ * tomcat_requestprocessor_time_seconds{name="http-bio-0.0.0.0-8080",} 127386.0
+ * tomcat_requestprocessor_error_count{name="http-bio-0.0.0.0-8080",} 0.0
+ * tomcat_requestprocessor_request_count{name="http-bio-0.0.0.0-8080",} 33709.0
+ * tomcat_threads{pool="http-bio-0.0.0.0-8080",} 10.0
+ * tomcat_threads_active{pool="http-bio-0.0.0.0-8080",} 2.0
+ * tomcat_threads_active_max{pool="http-bio-0.0.0.0-8080",} 200.0
+ * </pre>
+ */
+
+public class TomcatStats {
+ private static final Logger log = LoggerFactory.getLogger(TomcatStats.class);
+
+ private static final String[] LBL_NAMES = new String[]{"name"};
+ private static final Gauge rqBytesReceived = Gauge.builder()
+ .name("tomcat_requestprocessor_received_bytes")
+ .help("Number of bytes received by this request processor")
+ .labelNames(LBL_NAMES)
+ .register();
+ private static final Gauge rqBytesSent = Gauge.builder()
+ .name("tomcat_requestprocessor_sent_bytes")
+ .help("Number of bytes sent by this request processor")
+ .labelNames(LBL_NAMES)
+ .register();
+ private static final Gauge rqTime = Gauge.builder()
+ .name("tomcat_requestprocessor_time_seconds")
+ .help("The total time spend by this request processor")
+ .labelNames(LBL_NAMES)
+ .register();
+ private static final Gauge rqErrors = Gauge.builder()
+ .name("tomcat_requestprocessor_error_count")
+ .help("The number of error request served by this request processor")
+ .labelNames(LBL_NAMES)
+ .register();
+ private static final Gauge rqRequests = Gauge.builder()
+ .name("tomcat_requestprocessor_request_count")
+ .help("The number of request served by this request processor")
+ .labelNames(LBL_NAMES)
+ .register();
+
+ private static final Gauge threads = Gauge.builder()
+ .name("tomcat_threads")
+ .help("Number threads in this pool.")
+ .labelNames(LBL_NAMES)
+ .register();
+ private static final Gauge threadsActive = Gauge.builder()
+ .name("tomcat_threads_active")
+ .help("Number of active threads in this pool.")
+ .labelNames(LBL_NAMES)
+ .register();
+ private static final Gauge threadsMax = Gauge.builder()
+ .name("tomcat_threads_max")
+ .help("Maximum number of threads allowed in this pool.")
+ .labelNames(LBL_NAMES)
+ .register();
+ private static final Gauge connsActive = Gauge.builder()
+ .name("tomcat_connections_active")
+ .help("Number of connections served by this pool.")
+ .labelNames(LBL_NAMES)
+ .register();
+ private static final Gauge connsActiveMax = Gauge.builder()
+ .name("tomcat_connections_active_max")
+ .help("Maximum number of concurrent connections served by this pool.")
+ .labelNames(LBL_NAMES)
+ .register();
+
+ private static final String[] SESSION_LBL_NAMES = new String[]{"host", "context"};
+ private static final Gauge sessionActive = Gauge.builder()
+ .name("tomcat_session_active")
+ .help("Number of active sessions")
+ .labelNames(SESSION_LBL_NAMES)
+ .register();
+ private static final Gauge sessionRejected = Gauge.builder()
+ .name("tomcat_session_rejected")
+ .help("Number of sessions rejected due to maxActive being reached")
+ .labelNames(SESSION_LBL_NAMES)
+ .register();
+ private static final Gauge sessionCreated = Gauge.builder()
+ .name("tomcat_session_constructed")
+ .help("Number of sessions created")
+ .labelNames(SESSION_LBL_NAMES)
+ .register();
+ private static final Gauge sessionExpired = Gauge.builder()
+ .name("tomcat_session_expired")
+ .help("Number of sessions that expired")
+ .labelNames(SESSION_LBL_NAMES)
+ .register();
+ private static final Gauge sessionAvgAlive = Gauge.builder()
+ .name("tomcat_session_alivetime_seconds_avg")
+ .help("Average time an expired session had been alive")
+ .labelNames(SESSION_LBL_NAMES)
+ .register();
+ private static final Gauge sessionMaxAlive = Gauge.builder()
+ .name("tomcat_session_alivetime_seconds_max")
+ .help("Maximum time an expired session had been alive")
+ .labelNames(SESSION_LBL_NAMES)
+ .register();
+ private static final Gauge ctxState = Gauge.builder()
+ .name("tomcat_context_state_started")
+ .help("Indication if the lifecycle state of this context is STARTED")
+ .labelNames(SESSION_LBL_NAMES)
+ .register();
+
+ private static final Gauge version = Gauge.builder()
+ .name("tomcat_details")
+ .help("tomcat version info")
+ .labelNames("version", "build")
+ .register();
+
+ private final String jmxDomain;
+
+ public TomcatStats(boolean embedded) {
+ jmxDomain = embedded ? "Tomcat" : "Catalina";
+ }
+
+ private double getAttr(Attribute attribute) {
+ return ((Number)attribute.getValue()).doubleValue();
+ }
+
+ private double getAttr(final MBeanServer server, final ObjectInstance mBean, String attr) throws InstanceNotFoundException, AttributeNotFoundException, ReflectionException, MBeanException {
+ return ((Number)server.getAttribute(mBean.getObjectName(), attr)).doubleValue();
+ }
+
+ private void updateRequestProcessorMetrics() {
+ try {
+ final MBeanServer server = ManagementFactory.getPlatformMBeanServer();
+ ObjectName filterName = new ObjectName(jmxDomain + ":type=GlobalRequestProcessor,name=*");
+ Set<ObjectInstance> mBeans = server.queryMBeans(filterName, null);
+
+ for (final ObjectInstance mBean : mBeans) {
+ String labels = mBean.getObjectName().getKeyProperty("name").replaceAll("[\"\\\\]", "");
+
+ rqBytesReceived.labelValues(labels)
+ .set(getAttr(server, mBean, "bytesReceived"));
+
+ rqBytesSent.labelValues(labels)
+ .set(getAttr(server, mBean, "bytesSent"));
+
+ rqTime.labelValues(labels)
+ .set(getAttr(server, mBean, "processingTime") / 1000.0);
+
+ rqErrors.labelValues(labels)
+ .set(getAttr(server, mBean, "errorCount"));
+
+ rqRequests.labelValues(labels)
+ .set(getAttr(server, mBean, "requestCount"));
+ }
+ } catch (Exception e) {
+ log.error("Error retrieving RequestProcessor metric.", e);
+ }
+ }
+
+ private void updateSessionMetrics() {
+ try {
+ final MBeanServer server = ManagementFactory.getPlatformMBeanServer();
+ ObjectName filterName = new ObjectName(jmxDomain + ":type=Manager,context=*,host=*");
+ Set<ObjectInstance> mBeans = server.queryMBeans(filterName, null);
+
+ for (final ObjectInstance mBean : mBeans) {
+ String[] labelValues = new String[] {
+ mBean.getObjectName().getKeyProperty("host")
+ , mBean.getObjectName().getKeyProperty("context")};
+
+ sessionActive.labelValues(labelValues)
+ .set(getAttr(server, mBean, "activeSessions"));
+
+ sessionRejected.labelValues(labelValues)
+ .set(getAttr(server, mBean, "rejectedSessions"));
+
+ sessionCreated.labelValues(labelValues)
+ .set(getAttr(server, mBean, "sessionCounter"));
+
+ sessionExpired.labelValues(labelValues)
+ .set(getAttr(server, mBean, "expiredSessions"));
+
+ sessionAvgAlive.labelValues(labelValues)
+ .set(getAttr(server, mBean, "sessionAverageAliveTime"));
+
+ sessionMaxAlive.labelValues(labelValues)
+ .set(getAttr(server, mBean, "sessionMaxAliveTime"));
+
+ ctxState.labelValues(labelValues)
+ .set("STARTED".equals(server.getAttribute(mBean.getObjectName(), "stateName")) ? 1. : 0.);
+ }
+ } catch (Exception e) {
+ log.error("Error retrieving Session metric.", e);
+ }
+ }
+
+ private void updateThreadPoolMetrics() {
+ try {
+ final MBeanServer server = ManagementFactory.getPlatformMBeanServer();
+ ObjectName filterName = new ObjectName(jmxDomain + ":type=ThreadPool,name=*");
+ Set<ObjectInstance> mBeans = server.queryMBeans(filterName, null);
+
+ if (!mBeans.isEmpty()) {
+ String[] genericAttributes = new String[] { "currentThreadCount", "currentThreadsBusy", "maxThreads",
+ "connectionCount", "maxConnections" };
+
+ for (final ObjectInstance mBean : mBeans) {
+ String label = mBean.getObjectName().getKeyProperty("name").replaceAll("[\"\\\\]", "");
+ AttributeList attributeList = server.getAttributes(mBean.getObjectName(), genericAttributes);
+ for (Attribute attribute : attributeList.asList()) {
+ switch (attribute.getName()) {
+ case "currentThreadCount":
+ threads.labelValues(label).set(getAttr(attribute));
+ break;
+ case "currentThreadsBusy":
+ threadsActive.labelValues(label).set(getAttr(attribute));
+ break;
+ case "maxThreads":
+ threadsMax.labelValues(label).set(getAttr(attribute));
+ break;
+ case "connectionCount":
+ connsActive.labelValues(label).set(getAttr(attribute));
+ break;
+ case "maxConnections":
+ connsActiveMax.labelValues(label).set(getAttr(attribute));
+ break;
+ default:
+ log.warn("Unexpected attribute {}", attribute);
+ break;
+ }
+ }
+ }
+ }
+ } catch (Exception e) {
+ log.error("Error retrieving ThreadPool metric: {}", e.getMessage());
+ }
+ }
+
+ private void updateVersionInfo() {
+ try (InputStream is = getClass().getResourceAsStream("/org/apache/catalina/util/ServerInfo.properties")) {
+ Properties props = new Properties();
+ props.load(is);
+ //server info can be get as props.getProperty("server.info");
+ version.labelValues(props.getProperty("server.number"), props.getProperty("server.built")).set(1.);
+ } catch (Exception t) {
+ log.warn("Unable to read Tomcat version: ", t);
+ }
+ }
+
+ public void refresh() {
+ updateRequestProcessorMetrics();
+ updateSessionMetrics();
+ updateThreadPoolMetrics();
+ updateVersionInfo();
+ }
+}
diff --git a/openmeetings-web/src/main/webapp/WEB-INF/classes/applicationContext.xml b/openmeetings-web/src/main/webapp/WEB-INF/classes/applicationContext.xml
index a069c52cd..d3503511c 100644
--- a/openmeetings-web/src/main/webapp/WEB-INF/classes/applicationContext.xml
+++ b/openmeetings-web/src/main/webapp/WEB-INF/classes/applicationContext.xml
@@ -41,7 +41,7 @@
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />
<!-- Start annotation Prometheus metrics
<aop:aspectj-autoproxy/>
- End annotation -->
+ End annotation -->
<context:annotation-config />
<context:component-scan base-package="org.apache.openmeetings" />
diff --git a/openmeetings-web/src/main/webapp/WEB-INF/web.xml b/openmeetings-web/src/main/webapp/WEB-INF/web.xml
index 7dbe3091b..769f299b4 100644
--- a/openmeetings-web/src/main/webapp/WEB-INF/web.xml
+++ b/openmeetings-web/src/main/webapp/WEB-INF/web.xml
@@ -57,34 +57,6 @@
</init-param>
</filter>
- <!-- Start Prometheus Filter HTTP Servlet metrics
- <filter>
- <filter-name>prometheusFilter</filter-name>
- <filter-class>io.prometheus.client.servlet.jakarta.filter.MetricsFilter</filter-class>
- <init-param>
- <param-name>metric-name</param-name>
- <param-value>webapp_metrics_filter</param-value>
- </init-param>
- <init-param>
- <param-name>help</param-name>
- <param-value>This is the help for your metrics filter</param-value>
- </init-param>
- <init-param>
- <param-name>buckets</param-name>
- <param-value>0.005,0.01,0.025,0.05,0.075,0.1,0.25,0.5,0.75,1,2.5,5,7.5,10</param-value>
- </init-param>
- <init-param>
- <param-name>path-components</param-name>
- <param-value>0</param-value>
- </init-param>
- </filter>
-
- <filter-mapping>
- <filter-name>prometheusFilter</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- End Prometheus -->
-
<filter-mapping>
<filter-name>OpenmeetingsApplication</filter-name>
<url-pattern>/*</url-pattern>
@@ -94,6 +66,17 @@
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
+ <!-- Start Prometheus export metrics HTTP
+ <servlet>
+ <servlet-name>metrics</servlet-name>
+ <servlet-class>org.apache.openmeetings.web.util.logging.OpenMeetingsMetricsServlet</servlet-class>
+ </servlet>
+ <servlet-mapping>
+ <servlet-name>metrics</servlet-name>
+ <url-pattern>/services/metrics/</url-pattern>
+ </servlet-mapping>
+ End Prometheus -->
+
<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
@@ -109,17 +92,6 @@
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
- <!-- Start Prometheus export metrics HTTP
- <servlet>
- <servlet-name>metrics</servlet-name>
- <servlet-class>org.apache.openmeetings.web.util.logging.OpenMeetingsMetricsServlet</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>metrics</servlet-name>
- <url-pattern>/services/metrics/</url-pattern>
- </servlet-mapping>
- End Prometheus -->
-
<mime-mapping>
<extension>inc</extension>
<mime-type>text/plain</mime-type>
diff --git a/openmeetings-web/src/test/java/module-info.test b/openmeetings-web/src/test/java/module-info.test
deleted file mode 100644
index 428ba6791..000000000
--- a/openmeetings-web/src/test/java/module-info.test
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") + you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-open module org.apache.openmeetings.web {
- // This one should be in-sync with module-info.java
- requires org.apache.openmeetings.core;
- requires org.apache.openmeetings.db;
- requires org.apache.openmeetings.install;
- requires org.apache.openmeetings.mediaserver;
- requires org.apache.openmeetings.service;
- requires org.apache.openmeetings.util;
- requires org.apache.openmeetings.webservice;
-
- requires com.github.openjson;
-
- requires totp;
-
- requires org.apache.commons.io;
- requires org.apache.commons.fileupload2.core;
- requires org.apache.commons.fileupload2.jakarta;
- requires org.apache.commons.lang3;
-
- requires org.apache.openjpa;
-
- requires org.apache.httpcomponents.httpclient;
-
- requires org.apache.wicket.auth.roles;
- requires org.apache.wicket.core;
- requires org.apache.wicket.devutils;
- requires org.apache.wicket.extensions;
- requires org.apache.wicket.ioc;
- requires org.apache.wicket.request;
- requires org.apache.wicket.spring;
- requires org.apache.wicket.util;
- requires org.apache.wicket.websocket.core;
-
- requires wicketstuff.dashboard.core;
- requires wicketstuff.datastore.hazelcast;
- requires wicketstuff.select2;
- requires wicketstuff.urlfragment;
- requires jqplot;
- requires jqplot4java;
- requires wicket.bootstrap.extensions;
- requires wicket.bootstrap.core;
- requires wicket.bootstrap.themes;
- requires wicket.webjars;
- requires wicket.jquery.ui;
- requires wicket.jquery.ui.calendar;
- requires wicket.jquery.ui.core;
- requires wicket.jquery.ui.plugins;
-
- requires jakarta.annotation;
- requires jakarta.inject;
- requires jakarta.servlet;
- requires jakarta.websocket.client;
- requires jakarta.ws.rs;
-
- requires java.net.http;
- requires java.management;
- requires java.sql;
-
- requires com.hazelcast.core;
- requires org.danekja.jdk.serializable.functional;
- requires simpleclient.servlet.jakarta;
- requires xstream;
-
- requires spring.beans;
- requires spring.context;
- requires spring.orm;
- requires spring.web;
-
- requires org.slf4j;
-
- //tests
- requires org.junit.jupiter.api;
-}
diff --git a/openmeetings-webservice/pom.xml b/openmeetings-webservice/pom.xml
index acb255775..34409e16d 100644
--- a/openmeetings-webservice/pom.xml
+++ b/openmeetings-webservice/pom.xml
@@ -34,7 +34,7 @@
</properties>
<build>
<plugins>
- <!--plugin>
+ <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<executions>
@@ -51,10 +51,9 @@
<goals>
<goal>javadoc-no-fork</goal>
</goals>
- <phase>generate-resources</phase>
</execution>
</executions>
- </plugin-->
+ </plugin>
<plugin>
<groupId>io.openapitools.swagger</groupId>
<artifactId>swagger-maven-plugin</artifactId>
@@ -196,12 +195,5 @@
<groupId>io.swagger.core.v3</groupId>
<artifactId>swagger-annotations</artifactId>
</dependency>
- <dependency>
- <groupId>org.apache.openmeetings</groupId>
- <artifactId>openmeetings-util</artifactId>
- <version>${project.version}</version>
- <type>test-jar</type>
- <scope>test</scope>
- </dependency>
</dependencies>
</project>
diff --git a/openmeetings-webservice/src/test/java/module-info.test b/openmeetings-webservice/src/test/java/module-info.test
deleted file mode 100644
index d1c1fe2b3..000000000
--- a/openmeetings-webservice/src/test/java/module-info.test
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") + you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-open module org.apache.openmeetings.webservice {
- // This one should be in-sync with module-info.java
- exports org.apache.openmeetings.webservice.util;
-
- requires org.apache.openmeetings.core;
- requires org.apache.openmeetings.db;
- requires org.apache.openmeetings.service;
- requires org.apache.openmeetings.util;
-
- requires com.github.openjson;
- requires org.apache.commons.lang3;
-
- requires jakarta.annotation;
- requires jakarta.inject;
- requires jakarta.jws;
- requires jakarta.servlet;
- requires jakarta.xml.ws;
- requires jakarta.ws.rs;
-
- requires org.apache.cxf.core;
- requires org.apache.cxf.frontend.jaxrs;
-
- requires org.apache.pdfbox;
-
- requires org.apache.wicket.core;
- requires org.apache.wicket.extensions;
- requires org.apache.wicket.util;
-
- requires io.swagger.v3.oas.annotations;
- requires java.desktop;
-
- requires spring.beans;
- requires spring.context;
-
- requires org.slf4j;
-
- //tests
- requires org.junit.jupiter.api;
-}
diff --git a/pom.xml b/pom.xml
index 814637c1d..cb2a51203 100644
--- a/pom.xml
+++ b/pom.xml
@@ -91,7 +91,7 @@
<tomcat.version>10.1.17</tomcat.version>
<ical4j.version>4.0.0-rc1</ical4j.version>
<cxf.version>4.0.3</cxf.version>
- <io.prometheus.version>0.16.0</io.prometheus.version>
+ <io.prometheus.version>1.0.0</io.prometheus.version>
<aspectjtools.version>1.9.21</aspectjtools.version>
<simple-xml.version>2.7.1</simple-xml.version>
<jettison.version>1.5.4</jettison.version>
@@ -452,6 +452,12 @@
<artifactId>openmeetings-webservice</artifactId>
<version>${project.version}</version>
</dependency>
+ <dependency>
+ <groupId>org.apache.openmeetings</groupId>
+ <artifactId>openmeetings-tests</artifactId>
+ <version>${project.version}</version>
+ <scope>test</scope>
+ </dependency>
<dependency>
<groupId>org.apache.openmeetings</groupId>
<artifactId>openmeetings-util</artifactId>
@@ -570,7 +576,12 @@
</dependency>
<dependency>
<groupId>io.prometheus</groupId>
- <artifactId>simpleclient_servlet_jakarta</artifactId>
+ <artifactId>prometheus-metrics-core</artifactId>
+ <version>${io.prometheus.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>io.prometheus</groupId>
+ <artifactId>prometheus-metrics-exporter-servlet-jakarta</artifactId>
<version>${io.prometheus.version}</version>
</dependency>
<dependency>
@@ -1159,6 +1170,36 @@
</execution>
</executions>
</plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-source-plugin</artifactId>
+ <configuration>
+ <skip>${om.quick.build}</skip>
+ </configuration>
+ <executions>
+ <execution>
+ <id>attach-sources</id>
+ <goals>
+ <goal>jar</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <configuration>
+ <skip>${om.quick.build}</skip>
+ </configuration>
+ <executions>
+ <execution>
+ <id>attach-javadocs</id>
+ <goals>
+ <goal>jar</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
</plugins>
<pluginManagement>
<plugins>
@@ -1169,7 +1210,6 @@
<doclint>none</doclint>
<additionalOptions>-html5</additionalOptions>
<source>${jdk.version}</source>
- <javadocVersion>${jdk.version}</javadocVersion>
<notimestamp>true</notimestamp>
<links>
<link>https://openmeetings.apache.org/openmeetings-db/apidocs/</link>
@@ -1274,9 +1314,13 @@
<excludes>
<exclude/>
</excludes>
+ <argLine>@{argLine} --add-modules java.se --add-exports java.base/jdk.internal.ref=ALL-UNNAMED
+ --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.nio=ALL-UNNAMED
+ --add-opens java.base/sun.nio.ch=ALL-UNNAMED --add-opens java.management/sun.management=ALL-UNNAMED
+ --add-opens jdk.management/com.sun.management.internal=ALL-UNNAMED
+ --add-opens java.base/java.util=ALL-UNNAMED --add-opens=java.base/sun.security.util=ALL-UNNAMED
+ --add-opens=java.base/sun.security.x509=ALL-UNNAMED</argLine>
<useModulePath>false</useModulePath>
- <!--argLine>-Xint ${argLine}</argLine-->
- <argLine>@{argLine} --add-modules java.se --add-exports java.base/jdk.internal.ref=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.nio=ALL-UNNAMED --add-opens java.base/sun.nio.ch=ALL-UNNAMED --add-opens java.management/sun.management=ALL-UNNAMED --add-opens jdk.management/com.sun.management.internal=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens=java.base/sun.security.util=ALL-UNNAMED --add-opens=java.base/sun.security.x509=A [...]
</configuration>
</plugin>
<plugin>
@@ -1709,6 +1753,7 @@
<activeByDefault>true</activeByDefault>
</activation>
<modules>
+ <module>openmeetings-tests</module>
<module>openmeetings-util</module>
<module>openmeetings-db</module>
<module>openmeetings-core</module>
@@ -1740,33 +1785,6 @@
</properties>
<build>
<plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-source-plugin</artifactId>
- <executions>
- <execution>
- <id>attach-sources</id>
- <goals>
- <goal>jar</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-javadoc-plugin</artifactId>
- <configuration>
- <skip>false</skip>
- </configuration>
- <executions>
- <execution>
- <id>attach-javadocs</id>
- <goals>
- <goal>jar</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
<plugin>
<groupId>net.nicoulaj.maven.plugins</groupId>
<artifactId>checksum-maven-plugin</artifactId>