Skip to content

Commit

Permalink
Only use OpenTelemetry SDK and refactor tests
Browse files Browse the repository at this point in the history
  • Loading branch information
bdhoine committed Dec 6, 2024
1 parent 39a1411 commit 20eec45
Show file tree
Hide file tree
Showing 19 changed files with 159 additions and 239 deletions.

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,6 @@ public interface OpenTelemetryConfig {
String[] loggerNames();

boolean traceComponents();

boolean exportMetrics();
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
@Version("1.0.0")
@Version("1.1.0")
package be.orbinson.aem.opentelemetry.services.api;

import org.osgi.annotation.versioning.Version;
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package be.orbinson.aem.opentelemetry.core;
package be.orbinson.aem.opentelemetry.core.context;

import io.opentelemetry.context.propagation.TextMapGetter;
import io.opentelemetry.context.propagation.TextMapSetter;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package be.orbinson.aem.opentelemetry.core.filters;

import be.orbinson.aem.opentelemetry.core.ContextPropagator;
import be.orbinson.aem.opentelemetry.core.context.ContextPropagator;
import be.orbinson.aem.opentelemetry.services.api.OpenTelemetryConfig;
import be.orbinson.aem.opentelemetry.services.api.OpenTelemetryFactory;
import io.opentelemetry.api.OpenTelemetry;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package be.orbinson.aem.opentelemetry.core.services;
package be.orbinson.aem.opentelemetry.core.logs;

import io.opentelemetry.api.common.AttributeKey;
import io.opentelemetry.context.Context;
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package be.orbinson.aem.opentelemetry.core.metrics;

import be.orbinson.aem.opentelemetry.services.api.OpenTelemetryConfig;
import be.orbinson.aem.opentelemetry.services.api.OpenTelemetryFactory;
import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.api.metrics.ObservableDoubleMeasurement;
import org.apache.sling.distribution.agent.spi.DistributionAgent;
import org.apache.sling.distribution.queue.spi.DistributionQueue;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Component
public class DistributionQueueSizeGauage {

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

@Reference
OpenTelemetryFactory openTelemetryFactory;

@Reference
OpenTelemetryConfig openTelemetryConfig;

@Reference
DistributionAgent distributionAgent;

@Activate
public void activate() {
if (openTelemetryConfig.exportMetrics()) {
OpenTelemetry openTelemetry = openTelemetryFactory.get();

openTelemetry.getMeter(openTelemetryConfig.instrumentationScopeName())
.gaugeBuilder("distribution.queue.size")
.setDescription("The size of the distribution queue")
.setUnit("items")
.buildWithCallback(this::callback);
}
}

public void callback(ObservableDoubleMeasurement measurement) {
int size = 0;
if (distributionAgent != null) {
DistributionQueue distributionQueue = distributionAgent.getQueue("main");
if (distributionQueue != null) {
size = distributionQueue.getStatus().getItemsCount();
} else {
LOG.warn("Distribution queue 'main' is not available");
}
} else {
LOG.warn("Distribution agent is not available");
}
measurement.record(size);
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
@Component
@Designate(ocd = OpenTelemetryConfigImpl.Config.class)
public class OpenTelemetryConfigImpl implements OpenTelemetryConfig {

@ObjectClassDefinition(name = "OpenTelemetry Configuration")
@interface Config {
@AttributeDefinition(description = "Enable telemetry")
Expand All @@ -29,6 +29,9 @@ public class OpenTelemetryConfigImpl implements OpenTelemetryConfig {

@AttributeDefinition(description = "Trace components as a separate span")
boolean traceComponents() default false;

@AttributeDefinition(description = "Export metrics")
boolean exportMetrics() default false;

@AttributeDefinition(description = "Use the global opentelemetry instead of creating one with the SDK")
boolean useGlobalOpenTelemetry() default false;
Expand All @@ -39,6 +42,7 @@ public class OpenTelemetryConfigImpl implements OpenTelemetryConfig {
private String instrumentationScopeName;
private String[] loggerNames;
private boolean traceComponents;
private boolean exportMetrics;
private boolean useGlobalOpenTelemetry;

@Activate
Expand All @@ -48,6 +52,7 @@ protected void activate(Config config) {
this.instrumentationScopeName = config.instrumentationScopeName();
this.loggerNames = config.loggerNames();
this.traceComponents = config.traceComponents();
this.exportMetrics = config.exportMetrics();
this.useGlobalOpenTelemetry = config.useGlobalOpenTelemetry();
}

Expand Down Expand Up @@ -76,6 +81,11 @@ public boolean traceComponents() {
return traceComponents;
}

@Override
public boolean exportMetrics() {
return exportMetrics;
}

@Override
public boolean useGlobalOpenTelemetry() {
return useGlobalOpenTelemetry;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package be.orbinson.aem.opentelemetry.core;
package be.orbinson.aem.opentelemetry.core.context;

import be.orbinson.aem.opentelemetry.core.ContextPropagator;
import io.wcm.testing.mock.aem.junit5.AemContext;
import io.wcm.testing.mock.aem.junit5.AemContextExtension;
import org.apache.sling.testing.mock.sling.servlet.MockSlingHttpServletRequest;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,59 +1,46 @@
package be.orbinson.aem.opentelemetry.core.filters;

import be.orbinson.aem.opentelemetry.core.filters.OpenTelemetryComponentFilter;
import be.orbinson.aem.opentelemetry.core.services.impl.OpenTelemetryConfigImpl;
import be.orbinson.aem.opentelemetry.core.services.impl.OpenTelemetryFactoryImpl;
import io.wcm.testing.mock.aem.junit5.AemContext;
import io.wcm.testing.mock.aem.junit5.AemContextExtension;
import be.orbinson.aem.util.OpenTelemetryTest;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.servlets.ServletResolver;
import org.apache.sling.testing.mock.sling.servlet.MockSlingHttpServletRequest;
import org.apache.sling.testing.mock.sling.servlet.MockSlingHttpServletResponse;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;

import javax.servlet.FilterChain;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import java.io.IOException;

import static org.mockito.Mockito.*;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoInteractions;
import static org.mockito.Mockito.when;

class OpenTelemetryComponentFilterTest extends OpenTelemetryTest {

@ExtendWith({AemContextExtension.class, MockitoExtension.class})
class OpenTelemetryComponentFilterTest {
@Mock
private FilterChain filterChain;

private OpenTelemetryComponentFilter filter;

private final AemContext context = new AemContext();

@Mock
private ServletResolver servletResolver;

// Disable exporting
@BeforeAll
static void beforeAll() {
System.setProperty("otel.metrics.exporter", "none");
System.setProperty("otel.traces.exporter", "none");
System.setProperty("otel.logs.exporter", "none");
}

@BeforeEach
void setUp() {
servletResolver = context.registerService(ServletResolver.class, servletResolver);
}

@Test
void defaultConfig() throws ServletException, IOException {
context.registerInjectActivateService(new OpenTelemetryConfigImpl());
context.registerInjectActivateService(new OpenTelemetryFactoryImpl());
registerInjectActivateOpenTelemetryService();
filter = context.registerInjectActivateService(new OpenTelemetryComponentFilter());

SlingHttpServletRequest request = spy(new MockSlingHttpServletRequest(
Expand All @@ -69,11 +56,10 @@ void defaultConfig() throws ServletException, IOException {

@Test
void enabledWithoutComponents() throws ServletException, IOException {
context.registerInjectActivateService(new OpenTelemetryConfigImpl(),
registerInjectActivateOpenTelemetryService(
"enabled", true,
"endpoint", "http://collector:4318"
);
context.registerInjectActivateService(new OpenTelemetryFactoryImpl());
filter = context.registerInjectActivateService(new OpenTelemetryComponentFilter());

SlingHttpServletRequest request = spy(new MockSlingHttpServletRequest(
Expand All @@ -89,7 +75,7 @@ void enabledWithoutComponents() throws ServletException, IOException {

@Test
void configEnabled() throws ServletException, IOException {
context.registerInjectActivateService(new OpenTelemetryConfigImpl(),
registerInjectActivateOpenTelemetryService(
"enabled", true,
"traceComponents", true
);
Expand Down
Loading

0 comments on commit 20eec45

Please sign in to comment.