From d436194d82cfc904431a8adaef1011a97f2c9aaa Mon Sep 17 00:00:00 2001
From: Daniel Gerhardt <code@dgerhardt.net>
Date: Thu, 1 Aug 2019 17:02:20 +0200
Subject: [PATCH] Remove Dropwizard/Stagemonitor metrics related code and deps

Methods annotated with @Timed now use Micrometers annotation. The @Gauge
annotation has been remove without replacement for now.

While configuration for the use of Micrometer's TimedAspect has been
prepared, it is not yet active because of compatibility issues with
compile-time weaving.
See https://github.com/micrometer-metrics/micrometer/issues/1149.
---
 pom.xml                                       | 11 ++++----
 .../java/de/thm/arsnova/config/AppConfig.java |  7 +++++-
 .../thm/arsnova/service/UserServiceImpl.java  |  4 ---
 .../websocket/ArsnovaSocketioServerImpl.java  | 14 +++++------
 .../core/metrics/MonitorGauges.java           | 25 -------------------
 src/main/resources/META-INF/aop.xml           |  4 +++
 6 files changed, 23 insertions(+), 42 deletions(-)
 delete mode 100644 src/main/java/org/stagemonitor/core/metrics/MonitorGauges.java

diff --git a/pom.xml b/pom.xml
index 0e58a253b..929867160 100644
--- a/pom.xml
+++ b/pom.xml
@@ -407,11 +407,6 @@
 			<artifactId>swagger-annotations</artifactId>
 			<version>1.5.22</version>
 		</dependency>
-		<dependency>
-			<groupId>com.codahale.metrics</groupId>
-			<artifactId>metrics-annotation</artifactId>
-			<version>3.0.2</version>
-		</dependency>
 		<dependency>
 			<groupId>org.checkerframework</groupId>
 			<artifactId>checker-qual</artifactId>
@@ -453,6 +448,12 @@
 					<source>1.8</source>
 					<target>1.8</target>
 					<aspectLibraries>
+						<!-- Disabled for now, see https://github.com/micrometer-metrics/micrometer/issues/1149.
+						<aspectLibrary>
+							<groupId>io.micrometer</groupId>
+							<artifactId>micrometer-core</artifactId>
+						</aspectLibrary>
+						-->
 						<aspectLibrary>
 							<groupId>org.springframework</groupId>
 							<artifactId>spring-aspects</artifactId>
diff --git a/src/main/java/de/thm/arsnova/config/AppConfig.java b/src/main/java/de/thm/arsnova/config/AppConfig.java
index ddce39e4d..664b4fa4c 100644
--- a/src/main/java/de/thm/arsnova/config/AppConfig.java
+++ b/src/main/java/de/thm/arsnova/config/AppConfig.java
@@ -37,7 +37,12 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties
 import org.springframework.cache.CacheManager;
 import org.springframework.cache.annotation.EnableCaching;
 import org.springframework.cache.concurrent.ConcurrentMapCacheManager;
-import org.springframework.context.annotation.*;
+import org.springframework.context.annotation.AdviceMode;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Profile;
+import org.springframework.context.annotation.PropertySource;
 import org.springframework.context.annotation.aspectj.EnableSpringConfigured;
 import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
 import org.springframework.core.env.Environment;
diff --git a/src/main/java/de/thm/arsnova/service/UserServiceImpl.java b/src/main/java/de/thm/arsnova/service/UserServiceImpl.java
index 48ed77f62..9c3996006 100644
--- a/src/main/java/de/thm/arsnova/service/UserServiceImpl.java
+++ b/src/main/java/de/thm/arsnova/service/UserServiceImpl.java
@@ -18,7 +18,6 @@
 
 package de.thm.arsnova.service;
 
-import com.codahale.metrics.annotation.Gauge;
 import java.io.IOException;
 import java.text.MessageFormat;
 import java.util.ArrayList;
@@ -66,7 +65,6 @@ import org.springframework.transaction.annotation.Isolation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.Validator;
 import org.springframework.web.util.UriUtils;
-import org.stagemonitor.core.metrics.MonitorGauges;
 
 import de.thm.arsnova.config.properties.AuthenticationProviderProperties;
 import de.thm.arsnova.config.properties.SecurityProperties;
@@ -87,7 +85,6 @@ import de.thm.arsnova.web.exceptions.UnauthorizedException;
  * Performs all user related operations.
  */
 @Service
-@MonitorGauges
 public class UserServiceImpl extends DefaultEntityServiceImpl<UserProfile> implements UserService {
 
 	private static final int LOGIN_TRY_RESET_DELAY_MS = 30 * 1000;
@@ -324,7 +321,6 @@ public class UserServiceImpl extends DefaultEntityServiceImpl<UserProfile> imple
 	}
 
 	@Override
-	@Gauge
 	public int loggedInUsers() {
 		return userIdToRoomId.size();
 	}
diff --git a/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerImpl.java b/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerImpl.java
index 4717df44f..d74a42f50 100644
--- a/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerImpl.java
+++ b/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerImpl.java
@@ -18,7 +18,6 @@
 
 package de.thm.arsnova.websocket;
 
-import com.codahale.metrics.annotation.Timed;
 import com.corundumstudio.socketio.AckRequest;
 import com.corundumstudio.socketio.Configuration;
 import com.corundumstudio.socketio.SocketConfig;
@@ -29,6 +28,7 @@ import com.corundumstudio.socketio.listener.DataListener;
 import com.corundumstudio.socketio.listener.DisconnectListener;
 import com.corundumstudio.socketio.protocol.Packet;
 import com.corundumstudio.socketio.protocol.PacketType;
+import io.micrometer.core.annotation.Timed;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.IOException;
@@ -153,7 +153,7 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer {
 
 		server.addEventListener("setFeedback", Feedback.class, new DataListener<Feedback>() {
 			@Override
-			@Timed(name = "setFeedbackEvent.onData")
+			@Timed("setFeedbackEvent.onData")
 			public void onData(final SocketIOClient client, final Feedback data, final AckRequest ackSender) {
 				final String userId = userService.getUserIdToSocketId(client.getSessionId());
 				if (userId == null) {
@@ -177,7 +177,7 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer {
 
 		server.addEventListener("setSession", Room.class, new DataListener<Room>() {
 			@Override
-			@Timed(name = "setSessionEvent.onData")
+			@Timed("setSessionEvent.onData")
 			public void onData(final SocketIOClient client, final Room room, final AckRequest ackSender) {
 				final String userId = userService.getUserIdToSocketId(client.getSessionId());
 				if (null == userId) {
@@ -211,7 +211,7 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer {
 				Comment.class,
 				new DataListener<Comment>() {
 					@Override
-					@Timed(name = "readInterposedQuestionEvent.onData")
+					@Timed("readInterposedQuestionEvent.onData")
 					public void onData(
 							final SocketIOClient client,
 							final Comment comment,
@@ -244,7 +244,7 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer {
 				ScoreOptions.class,
 				new DataListener<ScoreOptions>() {
 					@Override
-					@Timed(name = "setLearningProgressOptionsEvent.onData")
+					@Timed("setLearningProgressOptionsEvent.onData")
 					public void onData(
 							final SocketIOClient client, final ScoreOptions scoreOptions, final AckRequest ack) {
 						throw new UnsupportedOperationException("Not implemented.");
@@ -254,7 +254,7 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer {
 
 		server.addConnectListener(new ConnectListener() {
 			@Override
-			@Timed
+			@Timed("onConnect")
 			public void onConnect(final SocketIOClient client) {
 
 			}
@@ -262,7 +262,7 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer {
 
 		server.addDisconnectListener(new DisconnectListener() {
 			@Override
-			@Timed
+			@Timed("onDisconnect")
 			public void onDisconnect(final SocketIOClient client) {
 				if (
 						userService == null
diff --git a/src/main/java/org/stagemonitor/core/metrics/MonitorGauges.java b/src/main/java/org/stagemonitor/core/metrics/MonitorGauges.java
deleted file mode 100644
index 4e1da49e4..000000000
--- a/src/main/java/org/stagemonitor/core/metrics/MonitorGauges.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package org.stagemonitor.core.metrics;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * When a type is marked with this annotation, the creation of gauges with
- * {@link com.codahale.metrics.annotation.Gauge} is activated for that type.
- *
- * <pre><code>
- *     \@MonitorGauges
- *     public class Queue {
- *         \@Gauge(name = "queueSize")
- *         public int getQueueSize() {
- *             return queue.size;
- *         }
- *     }
- * </code></pre>
- */
-@Target(ElementType.TYPE)
-@Retention(RetentionPolicy.RUNTIME)
-public @interface MonitorGauges {
-}
diff --git a/src/main/resources/META-INF/aop.xml b/src/main/resources/META-INF/aop.xml
index fe4871b30..9887fa3ff 100644
--- a/src/main/resources/META-INF/aop.xml
+++ b/src/main/resources/META-INF/aop.xml
@@ -9,5 +9,9 @@
 		<aspect name="de.thm.arsnova.web.RangeAspect"/>
 		<aspect name="de.thm.arsnova.web.InternalEntityAspect"/>
 		<aspect name="de.thm.arsnova.websocket.WebsocketAuthenticationAspect"/>
+		<!-- Micrometer does not have a aop.xml config for its aspects. -->
+		<!-- Disabled for now, see https://github.com/micrometer-metrics/micrometer/issues/1149.
+		<aspect name="io.micrometer.core.aop.TimedAspect"/>
+		-->
 	</aspects>
 </aspectj>
-- 
GitLab