Skip to content

Commit

Permalink
spring-projectsGH-1444: Observablility Documentation, Polish
Browse files Browse the repository at this point in the history
Refactor for latest snapshots; add documentation generation.
Use NOOP registry and supplier for context.

Also fix class tangles.

Resolves spring-projects#1507

Disable auto doc generation and polish manually.
  • Loading branch information
garyrussell committed Oct 3, 2022
1 parent 52e49cb commit 8e3c24c
Show file tree
Hide file tree
Showing 16 changed files with 222 additions and 127 deletions.
41 changes: 38 additions & 3 deletions build.gradle
@@ -1,5 +1,6 @@
buildscript {
ext.kotlinVersion = '1.7.0'
ext.isCI = System.getenv('GITHUB_ACTION') || System.getenv('bamboo_buildKey')
repositories {
mavenCentral()
gradlePluginPortal()
Expand Down Expand Up @@ -55,8 +56,9 @@ ext {
log4jVersion = '2.18.0'
logbackVersion = '1.2.3'
lz4Version = '1.8.0'
micrometerVersion = '1.10.0-M6'
micrometerTracingVersion = '1.0.0-M8'
micrometerDocsVersion = '1.0.0-SNAPSHOT'
micrometerVersion = '1.10.0-SNAPSHOT'
micrometerTracingVersion = '1.0.0-SNAPSHOT'
mockitoVersion = '4.8.0'
rabbitmqStreamVersion = '0.8.0'
rabbitmqVersion = project.hasProperty('rabbitmqVersion') ? project.rabbitmqVersion : '5.16.0'
Expand Down Expand Up @@ -221,7 +223,7 @@ subprojects { subproject ->
}

task updateCopyrights {
onlyIf { !System.getenv('GITHUB_ACTION') && !System.getenv('bamboo_buildKey') }
onlyIf { !isCI }
inputs.files(modifiedFiles.filter { f -> f.path.contains(subproject.name) })
outputs.dir('build/classes')

Expand Down Expand Up @@ -374,6 +376,10 @@ project('spring-amqp') {
project('spring-rabbit') {
description = 'Spring RabbitMQ Support'

configurations {
adoc
}

dependencies {

api project(':spring-amqp')
Expand Down Expand Up @@ -411,8 +417,37 @@ project('spring-rabbit') {
testRuntimeOnly 'com.fasterxml.jackson.module:jackson-module-kotlin'
testRuntimeOnly ("junit:junit:$junit4Version") {
exclude group: 'org.hamcrest', module: 'hamcrest-core'

adoc "io.micrometer:micrometer-docs-generator-spans:$micrometerDocsVersion"
adoc "io.micrometer:micrometer-docs-generator-metrics:$micrometerDocsVersion"

}

def inputDir = file('src/main/java/org/springframework/amqp/rabbit/support/micrometer').absolutePath
def outputDir = rootProject.file('src/reference/asciidoc').absolutePath

task generateObservabilityMetricsDocs(type: JavaExec) {
onlyIf { !isCI }
mainClass = 'io.micrometer.docs.metrics.DocsFromSources'
inputs.dir(inputDir)
outputs.dir(outputDir)
classpath configurations.adoc
args inputDir, '.*', outputDir
}

task generateObservabilitySpansDocs(type: JavaExec) {
onlyIf { !isCI }
mainClass = 'io.micrometer.docs.spans.DocsFromSources'
inputs.dir(inputDir)
outputs.dir(outputDir)
classpath configurations.adoc
args inputDir, '.*', outputDir
}

// javadoc {
// finalizedBy generateObservabilityMetricsDocs, generateObservabilitySpansDocs
// }

}

compileTestKotlin {
Expand Down
Expand Up @@ -25,6 +25,7 @@
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;

import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;

import org.springframework.amqp.core.Queue;
Expand Down Expand Up @@ -99,6 +100,7 @@ void nativeMsg(@Autowired RabbitTemplate template) throws InterruptedException {
}

@Test
@Disabled("Temporary until SF uses Micrometer snaps")
void queueOverAmqp() throws Exception {
Client client = new Client("http://guest:guest@localhost:" + managementPort() + "/api");
QueueInfo queue = client.getQueue("/", "stream.created.over.amqp");
Expand Down
Expand Up @@ -43,7 +43,7 @@ public abstract class RabbitAccessor implements InitializingBean {

private volatile boolean transactional;

private ObservationRegistry observationRegistry;
private ObservationRegistry observationRegistry = ObservationRegistry.NOOP;

public boolean isChannelTransacted() {
return this.transactional;
Expand Down Expand Up @@ -119,7 +119,7 @@ protected RuntimeException convertRabbitAccessException(Exception ex) {
}

protected void obtainObservationRegistry(@Nullable ApplicationContext appContext) {
if (this.observationRegistry == null && appContext != null) {
if (appContext != null) {
ObjectProvider<ObservationRegistry> registry =
appContext.getBeanProvider(ObservationRegistry.class);
this.observationRegistry = registry.getIfUnique();
Expand Down
Expand Up @@ -35,6 +35,7 @@
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Supplier;

import org.springframework.amqp.AmqpConnectException;
import org.springframework.amqp.AmqpException;
Expand Down Expand Up @@ -74,9 +75,9 @@
import org.springframework.amqp.rabbit.support.MessagePropertiesConverter;
import org.springframework.amqp.rabbit.support.RabbitExceptionTranslator;
import org.springframework.amqp.rabbit.support.ValueExpression;
import org.springframework.amqp.rabbit.support.micrometer.DefaultRabbitTemplateObservationConvention;
import org.springframework.amqp.rabbit.support.micrometer.RabbitMessageSenderContext;
import org.springframework.amqp.rabbit.support.micrometer.RabbitTemplateObservation;
import org.springframework.amqp.rabbit.support.micrometer.RabbitTemplateObservation.DefaultRabbitTemplateObservationConvention;
import org.springframework.amqp.rabbit.support.micrometer.RabbitTemplateObservationConvention;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.amqp.support.converter.SimpleMessageConverter;
Expand Down Expand Up @@ -2428,21 +2429,16 @@ public void doSend(Channel channel, String exchangeArg, String routingKeyArg, Me

protected void observeTheSend(Channel channel, Message message, boolean mandatory, String exch, String rKey) {

if (!this.observationRegistryObtained) {
if (!this.observationRegistryObtained && this.observationEnabled) {
obtainObservationRegistry(this.applicationContext);
this.observationRegistryObtained = true;
}
Observation observation;
ObservationRegistry registry = getObservationRegistry();
if (!this.observationEnabled || registry == null) {
observation = Observation.NOOP;
}
else {
observation = RabbitTemplateObservation.TEMPLATE_OBSERVATION.observation(this.observationConvention,
DefaultRabbitTemplateObservationConvention.INSTANCE,
Observation observation = RabbitTemplateObservation.TEMPLATE_OBSERVATION.observation(this.observationConvention,
DefaultRabbitTemplateObservationConvention.INSTANCE,
(Supplier<RabbitMessageSenderContext>) () ->
new RabbitMessageSenderContext(message, this.beanName, exch + "/" + rKey), registry);

}
observation.observe(() -> sendToRabbit(channel, exch, rKey, mandatory, message));
}

Expand Down
Expand Up @@ -28,6 +28,7 @@
import java.util.Set;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.Executor;
import java.util.function.Supplier;
import java.util.stream.Collectors;

import org.aopalliance.aop.Advice;
Expand Down Expand Up @@ -63,8 +64,8 @@
import org.springframework.amqp.rabbit.support.DefaultMessagePropertiesConverter;
import org.springframework.amqp.rabbit.support.ListenerExecutionFailedException;
import org.springframework.amqp.rabbit.support.MessagePropertiesConverter;
import org.springframework.amqp.rabbit.support.micrometer.DefaultRabbitListenerObservationConvention;
import org.springframework.amqp.rabbit.support.micrometer.RabbitListenerObservation;
import org.springframework.amqp.rabbit.support.micrometer.RabbitListenerObservation.DefaultRabbitListenerObservationConvention;
import org.springframework.amqp.rabbit.support.micrometer.RabbitListenerObservationConvention;
import org.springframework.amqp.rabbit.support.micrometer.RabbitMessageReceiverContext;
import org.springframework.amqp.support.ConditionalExceptionLogger;
Expand Down Expand Up @@ -1435,7 +1436,9 @@ public void start() {
}
}
}
obtainObservationRegistry(this.applicationContext);
if (this.observationEnabled) {
obtainObservationRegistry(this.applicationContext);
}
try {
logger.debug("Starting Rabbit listener container.");
configureAdminIfNeeded();
Expand Down Expand Up @@ -1536,15 +1539,11 @@ protected void invokeErrorHandler(Throwable ex) {
protected void executeListener(Channel channel, Object data) {
Observation observation;
ObservationRegistry registry = getObservationRegistry();
if (!this.observationEnabled || data instanceof List || registry == null) {
observation = Observation.NOOP;
}
else {
Message message = (Message) data;
observation = RabbitListenerObservation.LISTENER_OBSERVATION.observation(this.observationConvention,
DefaultRabbitListenerObservationConvention.INSTANCE,
Message message = (Message) data;
observation = RabbitListenerObservation.LISTENER_OBSERVATION.observation(this.observationConvention,
DefaultRabbitListenerObservationConvention.INSTANCE,
(Supplier<RabbitMessageReceiverContext>) () ->
new RabbitMessageReceiverContext(message, getListenerId()), registry);
}
observation.observe(() -> executeListenerAndHandleException(channel, data));
}

Expand Down

This file was deleted.

This file was deleted.

Expand Up @@ -16,10 +16,11 @@

package org.springframework.amqp.rabbit.support.micrometer;

import io.micrometer.common.KeyValues;
import io.micrometer.common.docs.KeyName;
import io.micrometer.observation.Observation.Context;
import io.micrometer.observation.ObservationConvention;
import io.micrometer.observation.docs.DocumentedObservation;
import io.micrometer.observation.docs.ObservationDocumentation;

/**
* Spring Rabbit Observation for listeners.
Expand All @@ -28,7 +29,7 @@
* @since 3.0
*
*/
public enum RabbitListenerObservation implements DocumentedObservation {
public enum RabbitListenerObservation implements ObservationDocumentation {

/**
* Observation for Rabbit listeners.
Expand Down Expand Up @@ -72,4 +73,28 @@ public String asString() {

}

/**
* Default {@link RabbitListenerObservationConvention} for Rabbit listener key values.
*/
public static class DefaultRabbitListenerObservationConvention implements RabbitListenerObservationConvention {

/**
* A singleton instance of the convention.
*/
public static final DefaultRabbitListenerObservationConvention INSTANCE =
new DefaultRabbitListenerObservationConvention();

@Override
public KeyValues getLowCardinalityKeyValues(RabbitMessageReceiverContext context) {
return KeyValues.of(RabbitListenerObservation.ListenerLowCardinalityTags.LISTENER_ID.asString(),
context.getListenerId());
}

@Override
public String getContextualName(RabbitMessageReceiverContext context) {
return context.getSource() + " receive";
}

}

}

0 comments on commit 8e3c24c

Please sign in to comment.