Skip to content

Commit

Permalink
Add request level metrics for issue #395
Browse files Browse the repository at this point in the history
  • Loading branch information
PhantomYdn committed Mar 14, 2020
1 parent 81b90fe commit 5c058ad
Show file tree
Hide file tree
Showing 9 changed files with 192 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,7 @@ private void onDbCreated(ODatabaseDocumentTx db, IOrientDbSettings settings) {
mountPackage("org.orienteer.core.resource");
mountResource("logo.png", new SharedResourceReference(imageLogoPath));
mountResource("icon.png", new SharedResourceReference(imageIconPath));
mountResource("favicon.ico", new SharedResourceReference(imageIconPath));
getMarkupSettings().setStripWicketTags(true);
getResourceSettings().setThrowExceptionOnMissingResource(false);
getApplicationListeners().add(new ModuledDataInstallator());
Expand Down
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ orientdb.guest.password=reader
orientdb.admin.username=admin
orientdb.admin.password=admin
orienteer.image.logo=/org/orienteer/core/web/logo.png
orienteer.image.icon=/org/orienteer/core/web/logo.png
orienteer.image.icon=/org/orienteer/core/web/favicon.ico
orienteer.authenticatelazy=true

orienteer.version=${project.version}
Expand Down
1 change: 1 addition & 0 deletions orienteer-metrics/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,7 @@
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
<!-- ORIENTEER TESTS for TESTING -->
<dependency>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import org.orienteer.core.OrienteerWebApplication;

/**
* {@link IInitializer} for 'tours' module
* {@link IInitializer} for 'metrics' module
*/
public class Initializer implements IInitializer
{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
package org.orienteer.metrics;

import java.util.HashMap;
import java.util.Map;

import org.apache.wicket.ISessionListener;
import org.apache.wicket.Session;
import org.apache.wicket.request.http.WebRequest;
import org.orienteer.core.OrienteerWebApplication;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import io.prometheus.client.CollectorRegistry;
import io.prometheus.client.Counter;
import io.prometheus.client.Gauge;
import io.prometheus.client.Histogram;

/**
* {@link ISessionListener} to monitor creation and unbounding of sessions
*/
public class OMetricSessionListener implements ISessionListener {

private static final Logger LOG = LoggerFactory.getLogger(OMetricSessionListener.class);

private static OMetricSessionListener listener;


private static final Counter GAUGE_CREATED_SESSIONS = Counter.build()
.namespace("wicket")
.subsystem("session")
.name("created")
.help("Sessions created")
.create();

private static final Counter GAUGE_UNBOUND_SESSIONS = Counter.build()
.namespace("wicket")
.subsystem("session")
.name("unbound")
.help("Sessions unbound")
.create();


private OMetricSessionListener() {
CollectorRegistry.defaultRegistry.register(GAUGE_CREATED_SESSIONS);
CollectorRegistry.defaultRegistry.register(GAUGE_UNBOUND_SESSIONS);
}

@Override
public void onCreated(Session session) {
GAUGE_CREATED_SESSIONS.inc();
}

@Override
public void onUnbound(String sessionId) {
GAUGE_UNBOUND_SESSIONS.inc();
}

protected void onDestroy() {
CollectorRegistry.defaultRegistry.unregister(GAUGE_CREATED_SESSIONS);
CollectorRegistry.defaultRegistry.unregister(GAUGE_UNBOUND_SESSIONS);
}

public static synchronized void install(OrienteerWebApplication app) {
if(listener!=null) deinstall(app);
listener = new OMetricSessionListener();
app.getSessionListeners().add(listener);
}

public static synchronized void deinstall(OrienteerWebApplication app) {
if(listener!=null) {
listener.onDestroy();
app.getSessionListeners().remove(listener);
listener = null;
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,16 @@ public ODocument onInstall(OrienteerWebApplication app, ODatabaseDocument db) {
public void onInitialize(OrienteerWebApplication app, ODatabaseDocument db) {
super.onInitialize(app, db);
DefaultExports.initialize();
OMetricsRequestCycleListener.install(app);
OMetricSessionListener.install(app);
app.mountPackage(OMetricsModule.class.getPackage().getName());
}

@Override
public void onDestroy(OrienteerWebApplication app, ODatabaseDocument db) {
app.unmountPackage(OMetricsModule.class.getPackage().getName());
OMetricSessionListener.deinstall(app);
OMetricsRequestCycleListener.deinstall(app);
CollectorRegistry.defaultRegistry.clear();
super.onDestroy(app, db);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
package org.orienteer.metrics;


import org.apache.wicket.MetaDataKey;
import org.apache.wicket.request.IRequestHandler;
import org.apache.wicket.request.cycle.IRequestCycleListener;
import org.apache.wicket.request.cycle.RequestCycle;
import org.apache.wicket.request.http.WebRequest;
import org.apache.wicket.request.http.WebResponse;
import org.orienteer.core.OrienteerWebApplication;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import io.prometheus.client.CollectorRegistry;
import io.prometheus.client.Counter;
import io.prometheus.client.Histogram;

/**
* {@link IRequestCycleListener} to monitor requests
*/
public class OMetricsRequestCycleListener implements IRequestCycleListener {

private static final Logger LOG = LoggerFactory.getLogger(OMetricsRequestCycleListener.class);

private static OMetricsRequestCycleListener listener;


private static final MetaDataKey<Histogram.Timer> REQUESTS_HISTOGRAM_KEY = new MetaDataKey<Histogram.Timer>() {};

private static final Counter COUNTER_EXCEPTIONS = Counter.build()
.namespace("wicket")
.name("exceptions_count")
.help("Total number of exceptions")
.labelNames("ajax")
.create();

private static final Counter COUNTER_EXECUTIONS = Counter.build()
.namespace("wicket")
.name("executions")
.help("Total number request handlers executions")
.labelNames("ajax", "handler")
.create();

private static final Histogram HISTOGRAM_REQUESTS = Histogram.build()
.namespace("wicket")
.name("requests")
.help("Request times and counts histogram")
.labelNames("ajax")
.create();

private OMetricsRequestCycleListener() {
CollectorRegistry.defaultRegistry.register(COUNTER_EXCEPTIONS);
//Just to init by 0 sub counters
COUNTER_EXCEPTIONS.labels(Boolean.TRUE.toString()).inc(0);
COUNTER_EXCEPTIONS.labels(Boolean.FALSE.toString()).inc(0);
CollectorRegistry.defaultRegistry.register(COUNTER_EXECUTIONS);
CollectorRegistry.defaultRegistry.register(HISTOGRAM_REQUESTS);
}

@Override
public void onBeginRequest(RequestCycle cycle) {
Histogram.Timer requestTimer = HISTOGRAM_REQUESTS
.labels(Boolean.toString(((WebRequest)cycle.getRequest()).isAjax()))
.startTimer();
cycle.setMetaData(REQUESTS_HISTOGRAM_KEY, requestTimer);
}

@Override
public void onEndRequest(RequestCycle cycle) {
Histogram.Timer requestTimer = cycle.getMetaData(REQUESTS_HISTOGRAM_KEY);
requestTimer.observeDuration();
}

@Override
public IRequestHandler onException(RequestCycle cycle, Exception ex) {
COUNTER_EXCEPTIONS.labels(Boolean.toString(((WebRequest)cycle.getRequest()).isAjax())).inc();
return null;
}

@Override
public void onRequestHandlerExecuted(RequestCycle cycle, IRequestHandler handler) {
COUNTER_EXECUTIONS.labels(Boolean.toString(((WebRequest)cycle.getRequest()).isAjax()),
handler.getClass().getSimpleName()).inc();
}

protected void onDestroy() {
CollectorRegistry.defaultRegistry.unregister(COUNTER_EXECUTIONS);
CollectorRegistry.defaultRegistry.unregister(COUNTER_EXCEPTIONS);
CollectorRegistry.defaultRegistry.unregister(HISTOGRAM_REQUESTS);
}


public static synchronized void install(OrienteerWebApplication app) {
if(listener!=null) deinstall(app);
listener = new OMetricsRequestCycleListener();
app.getRequestCycleListeners().add(listener);
}

public static synchronized void deinstall(OrienteerWebApplication app) {
if(listener!=null) {
listener.onDestroy();
app.getRequestCycleListeners().remove(listener);
listener = null;
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ protected ResourceResponse newResourceResponse(Attributes attributes) {
response.setLastModified(Time.now());
// response.setStatusCode(HttpServlet);
response.setContentType(TextFormat.CONTENT_TYPE_004);
response.disableCaching();
if (response.dataNeedsToBeWritten(attributes)) {

PageParameters params = attributes.getParameters();
Expand Down

0 comments on commit 5c058ad

Please sign in to comment.