Code cleanup and comment.

master
Rémi Cocula 8 years ago
parent 844b5de427
commit 1f9d11c5a5
  1. 5
      libresonic-main/src/main/java/org/libresonic/player/filter/MetricsFilter.java
  2. 79
      libresonic-main/src/main/java/org/libresonic/player/monitor/MetricsManager.java

@ -29,17 +29,12 @@ public class MetricsFilter implements Filter {
@Override @Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest)request; HttpServletRequest httpServletRequest = (HttpServletRequest)request;
String timerName = httpServletRequest.getRequestURI(); String timerName = httpServletRequest.getRequestURI();
try (MetricsManager.Timer t = MetricsManager.condition(timerName.contains("main.view")).timer(this,timerName)) { try (MetricsManager.Timer t = MetricsManager.condition(timerName.contains("main.view")).timer(this,timerName)) {
chain.doFilter(request, response); chain.doFilter(request, response);
} }
/* MetricsManager.buildTimer(MetricsFilter.class,timerName).condition(timerName.contains("main.view")).exec(() -> {
chain.doFilter(request,response);
}); */
} }
@Override @Override

@ -10,10 +10,11 @@ import java.util.concurrent.TimeUnit;
*/ */
public class MetricsManager { public class MetricsManager {
// Main metrics registry
private static final MetricRegistry metrics = new MetricRegistry(); private static final MetricRegistry metrics = new MetricRegistry();
// Potential metrics reporters
private static JmxReporter reporter; private static JmxReporter reporter;
private static final NullTimer nullTimerSingleton = new NullTimer(null);
private static ConditionFalseTimerBuilder conditionFalseTimerBuilderSingleton = new ConditionFalseTimerBuilder();
static { static {
reporter = JmxReporter.forRegistry(metrics) reporter = JmxReporter.forRegistry(metrics)
@ -23,14 +24,36 @@ public class MetricsManager {
reporter.start(); reporter.start();
} }
/**
* Creates a {@link Timer} whose name is based on a class name and a
* qualified name.
* @param clazz
* @param name
* @return
*/
public static Timer timer(Class clazz, String name) { public static Timer timer(Class clazz, String name) {
return new TimerBuilder().timer(clazz,name); return new TimerBuilder().timer(clazz,name);
} }
/**
* Creates a {@link Timer} whose name is based on an object's class name and a
* qualified name.
* @param ref
* @param name
* @return
*/
public static Timer timer(Object ref, String name) { public static Timer timer(Object ref, String name) {
return timer(ref.getClass(),name); return timer(ref.getClass(),name);
} }
/**
* Initiate a {@link TimerBuilder} using a condition.
* If the condition is false, a void {@link Timer} will finally be built thus
* no timer will be registered in the Metrics registry.
*
* @param ifTrue
* @return
*/
public static TimerBuilder condition(boolean ifTrue) { public static TimerBuilder condition(boolean ifTrue) {
if (ifTrue == false) { if (ifTrue == false) {
return conditionFalseTimerBuilderSingleton; return conditionFalseTimerBuilderSingleton;
@ -38,19 +61,11 @@ public class MetricsManager {
return new TimerBuilder(); return new TimerBuilder();
} }
/* public interface TimerExecutor { /**
void doWithTimer() throws Exception; * A class that builds a {@link Timer}
} */ */
public static class TimerBuilder { public static class TimerBuilder {
/* public TimerBuilder condition(boolean ifTrue) {
if (ifTrue == false) {
theTimer = nullTimerSingleton;
}
return this;
} */
public Timer timer(Class clazz, String name) { public Timer timer(Class clazz, String name) {
com.codahale.metrics.Timer t = metrics.timer(MetricRegistry.name(clazz,name)); com.codahale.metrics.Timer t = metrics.timer(MetricRegistry.name(clazz,name));
com.codahale.metrics.Timer.Context tContext = t.time(); com.codahale.metrics.Timer.Context tContext = t.time();
@ -61,30 +76,11 @@ public class MetricsManager {
return timer(ref.getClass(),name); return timer(ref.getClass(),name);
} }
/* public void exec(TimerExecutor executor) throws Exception {
if (theTimer == null) {
com.codahale.metrics.Timer t = metrics.timer(MetricRegistry.name(clazz, name));
com.codahale.metrics.Timer.Context tContext = t.time();
theTimer = new Timer(tContext);
}
executor.doWithTimer();
theTimer.close();
}
*/
}
private static class ConditionFalseTimerBuilder extends TimerBuilder {
@Override
public Timer timer(Class clazz, String name) {
return nullTimerSingleton;
}
} }
/** /**
* * A class that holds a Metrics timer context implementing {@link AutoCloseable}
* thus it can be used in a try-with-resources statement.
*/ */
public static class Timer implements AutoCloseable { public static class Timer implements AutoCloseable {
@ -101,6 +97,13 @@ public class MetricsManager {
} }
// -----------------------------------------------------------------
// Convenient singletons to avoid creating useless objects instances
// -----------------------------------------------------------------
private static final NullTimer nullTimerSingleton = new NullTimer(null);
private static final ConditionFalseTimerBuilder conditionFalseTimerBuilderSingleton = new ConditionFalseTimerBuilder();
private static class NullTimer extends Timer { private static class NullTimer extends Timer {
protected NullTimer(com.codahale.metrics.Timer.Context timerContext) { protected NullTimer(com.codahale.metrics.Timer.Context timerContext) {
@ -112,4 +115,12 @@ public class MetricsManager {
// Does nothing // Does nothing
} }
} }
private static class ConditionFalseTimerBuilder extends TimerBuilder {
@Override
public Timer timer(Class clazz, String name) {
return nullTimerSingleton;
}
}
} }

Loading…
Cancel
Save