Skip to content

Commit

Permalink
Merge pull request #142 from xenit-eu/XM2C-79
Browse files Browse the repository at this point in the history
XM2C-79 Add TomcatMetrics
  • Loading branch information
thijslemmens authored Jan 13, 2023
2 parents f399db1 + cf967fb commit f34a2b2
Show file tree
Hide file tree
Showing 6 changed files with 90 additions and 2 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,10 @@ Version template:
-->

# Alfred Telemetry Changelog
## [0.9.3] - 2023-01-13
### Added
* Added TomcatMetrics [#142]

## [0.9.2] - 2022-12-23

### Fixed
Expand Down
3 changes: 2 additions & 1 deletion alfred-telemetry-platform/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,8 @@ dependencies {
alfrescoProvided("io.github.mweirauch:micrometer-jvm-extras:${jvmExtrasVersion}") {
exclude group: "org.slf4j", module: "*"
}

alfrescoProvided 'javax.servlet:javax.servlet-api'
compileOnly 'org.apache.tomcat:tomcat-catalina:7.0.92'
alfrescoProvided "io.micrometer:micrometer-registry-graphite:${micrometerVersion}"
alfrescoProvided "io.micrometer:micrometer-registry-jmx:${micrometerVersion}"
alfrescoProvided "io.micrometer:micrometer-registry-prometheus:${micrometerVersion}"
Expand Down
30 changes: 30 additions & 0 deletions alfred-telemetry-platform/docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,36 @@ alfred.telemetry.export.prometheus.max-requests=1
```

# Supported metrics
## Tomcat metrics
The Tomcat metrics bindings will provide several tomcat metrics.

**Control Property**: `alfred.telemetry.binder.tomcat.enabled`
Metrics provided

| Name |
|:-------------------------------------|
| tomcat.cache.access |
| tomcat.cache.hit |
| tomcat.connections.config.max |
| tomcat.connections.current |
| tomcat.connections.keepalive.current |
| tomcat.global.error |
| tomcat.global.received |
| tomcat.global.request |
| tomcat.global.request.max |
| tomcat.global.sent |
| tomcat.servlet.error |
| tomcat.servlet.request |
| tomcat.servlet.request.max |
| tomcat.threads.busy |
| tomcat.threads.config.max |
| tomcat.sessions.active.current |
| tomcat.sessions.active.max |
| tomcat.sessions.alive.max |
| tomcat.sessions.created |
| tomcat.sessions.expired |
| tomcat.sessions.rejected |
| tomcat.threads.current |

## Jvm metrics
The JVM metrics bindings will provide several jvm metrics.
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package eu.xenit.alfred.telemetry.binder;

import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.instrument.binder.tomcat.TomcatMetrics;
import org.alfresco.error.AlfrescoRuntimeException;
import org.apache.catalina.Manager;
import org.apache.catalina.core.ApplicationContext;
import org.apache.catalina.core.StandardContext;
import org.springframework.web.context.ServletContextAware;

import javax.annotation.Nonnull;
import javax.servlet.ServletContext;
import java.lang.reflect.Field;
import java.util.ArrayList;

public class AlfrescoTomcatMetrics implements NamedMeterBinder, ServletContextAware {


private ServletContext servletContext;
private Manager manager;

@Override
public void bindTo(@Nonnull MeterRegistry registry) {
new TomcatMetrics(getManager(), new ArrayList<>()).bindTo(registry);
}

@Override
public String getName() {
return "tomcat";
}

private Manager getManager() {
if (manager == null) {
try {
Field applicationContextField = servletContext.getClass().getDeclaredField("context");
applicationContextField.setAccessible(true);
ApplicationContext appContextObj = (ApplicationContext) applicationContextField.get(servletContext);
Field standardContextField = appContextObj.getClass().getDeclaredField("context");
standardContextField.setAccessible(true);
StandardContext standardContextObj = (StandardContext) standardContextField.get(appContextObj);
manager = standardContextObj.getManager();
} catch (ReflectiveOperationException e) {
throw new AlfrescoRuntimeException(e.getMessage());
}
}
return manager;
}

public void setServletContext(ServletContext context) {
this.servletContext = context;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
<property name="properties" ref="global-properties"/>
<property name="enabled" value="${alfred.telemetry.binder.enabled}"/>
</bean>
<bean class="eu.xenit.alfred.telemetry.binder.AlfrescoTomcatMetrics"/>

<bean class="eu.xenit.alfred.telemetry.binder.JvmMetrics"/>
<bean class="eu.xenit.alfred.telemetry.binder.FilesMetrics"/>
Expand Down
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ def copyPropertyValueIfExists(sourcePropertyName, targetPropertyName) {

allprojects {
group = 'eu.xenit.alfred.telemetry'
version = '0.9.2'
version = '0.9.3'

apply plugin: 'java'
apply plugin: 'jacoco'
Expand Down

0 comments on commit f34a2b2

Please sign in to comment.