You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by se...@apache.org on 2021/02/04 03:06:18 UTC
[openmeetings] 01/02: OPENMEETINGS-2567 Enable annotation based AOP
style attributes for Spring Managed beans.
This is an automated email from the ASF dual-hosted git repository.
sebawagner pushed a commit to branch feature/OPENMEETINGS-2567-investigate-performance-monitoring
in repository https://gitbox.apache.org/repos/asf/openmeetings.git
commit a4db277481e195307e080140e64c172a0679b428
Author: Sebastian Wagner <se...@apache.org>
AuthorDate: Thu Feb 4 14:34:28 2021 +1300
OPENMEETINGS-2567 Enable annotation based AOP style attributes for Spring Managed beans.
---
openmeetings-core/pom.xml | 9 ++++
.../openmeetings/core/remote/StreamProcessor.java | 2 +
.../core/util/logging/PrometheusAspect.java | 50 ++++++++++++++++++++++
.../openmeetings/core/util/logging/Timed.java | 31 ++++++++++++++
.../web/util/logging/TomcatGenericExports.java | 19 ++++++++
.../webapp/WEB-INF/classes/applicationContext.xml | 3 ++
pom.xml | 11 +++++
7 files changed, 125 insertions(+)
diff --git a/openmeetings-core/pom.xml b/openmeetings-core/pom.xml
index 217fa9e..8c59f0e 100644
--- a/openmeetings-core/pom.xml
+++ b/openmeetings-core/pom.xml
@@ -100,6 +100,15 @@
<version>${spring.version}</version>
</dependency>
<dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-aop</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.aspectj</groupId>
+ <artifactId>aspectjtools</artifactId>
+ <version>1.9.6</version>
+ </dependency>
+ <dependency>
<groupId>org.kurento</groupId>
<artifactId>kurento-client</artifactId>
</dependency>
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/StreamProcessor.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/StreamProcessor.java
index be483e0..0355abe 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/StreamProcessor.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/StreamProcessor.java
@@ -38,6 +38,7 @@ import org.apache.openmeetings.core.converter.IRecordingConverter;
import org.apache.openmeetings.core.converter.InterviewConverter;
import org.apache.openmeetings.core.converter.RecordingConverter;
import org.apache.openmeetings.core.util.WebSocketHelper;
+import org.apache.openmeetings.core.util.logging.Timed;
import org.apache.openmeetings.db.dao.record.RecordingDao;
import org.apache.openmeetings.db.entity.basic.Client;
import org.apache.openmeetings.db.entity.basic.Client.Activity;
@@ -83,6 +84,7 @@ public class StreamProcessor implements IStreamProcessor {
@Autowired
private InterviewConverter interviewConverter;
+ @Timed
void onMessage(Client c, final String cmdId, JSONObject msg) {
final String uid = msg.optString("uid");
KStream sender;
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/util/logging/PrometheusAspect.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/util/logging/PrometheusAspect.java
new file mode 100644
index 0000000..af4c97a
--- /dev/null
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/util/logging/PrometheusAspect.java
@@ -0,0 +1,50 @@
+/*
+
+ * 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.core.util.logging;
+
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+
+@Aspect
+@Component
+public class PrometheusAspect {
+
+ private static final Logger log = LoggerFactory.getLogger(PrometheusAspect.class);
+
+ @Around("@annotation(Timed)")
+ public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable {
+ final long start = System.currentTimeMillis();
+
+ final Object proceed = joinPoint.proceed();
+
+ final long executionTime = System.currentTimeMillis() - start;
+
+ log.warn(joinPoint.getSignature() + " ################################# executed in " + executionTime + "ms");
+ System.out.println(
+ joinPoint.getSignature() + " ################################# executed in " + executionTime + "ms");
+
+ return proceed;
+ }
+
+}
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/util/logging/Timed.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/util/logging/Timed.java
new file mode 100644
index 0000000..2d7e648
--- /dev/null
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/util/logging/Timed.java
@@ -0,0 +1,31 @@
+/*
+
+ * 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.core.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 Timed {
+
+}
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
index e910dc4..daf0d25 100644
--- 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
@@ -11,6 +11,25 @@ import javax.management.*;
import java.lang.management.ManagementFactory;
import java.util.*;
+/*
+
+ * 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.
+ */
/**
* Exports Tomcat metrics applicable to most most applications:
*
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 211f0e1..64acb8d 100644
--- a/openmeetings-web/src/main/webapp/WEB-INF/classes/applicationContext.xml
+++ b/openmeetings-web/src/main/webapp/WEB-INF/classes/applicationContext.xml
@@ -22,10 +22,12 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
+ xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
+ http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"
>
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
@@ -38,6 +40,7 @@
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />
<context:annotation-config />
+ <aop:aspectj-autoproxy/>
<context:component-scan base-package="org.apache.openmeetings" />
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
diff --git a/pom.xml b/pom.xml
index 3770f02..9da8f6c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -472,6 +472,17 @@
</exclusions>
</dependency>
<dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-aop</artifactId>
+ <version>${spring.version}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
<groupId>org.mnode.ical4j</groupId>
<artifactId>ical4j</artifactId>
<version>${ical4j.version}</version>