Skip to content

Commit be32409

Browse files
authored
[disk-buffering] Add debug mode for verbose logging. (#1455)
1 parent c7ec823 commit be32409

26 files changed

+203
-30
lines changed

disk-buffering/src/main/java/io/opentelemetry/contrib/disk/buffering/LogRecordFromDiskExporter.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import io.opentelemetry.contrib.disk.buffering.internal.exporter.FromDiskExporter;
99
import io.opentelemetry.contrib.disk.buffering.internal.exporter.FromDiskExporterImpl;
1010
import io.opentelemetry.contrib.disk.buffering.internal.serialization.deserializers.SignalDeserializer;
11+
import io.opentelemetry.contrib.disk.buffering.internal.utils.SignalTypes;
1112
import io.opentelemetry.sdk.logs.data.LogRecordData;
1213
import io.opentelemetry.sdk.logs.export.LogRecordExporter;
1314
import java.io.IOException;
@@ -21,10 +22,11 @@ public static LogRecordFromDiskExporter create(
2122
LogRecordExporter exporter, StorageConfiguration config) throws IOException {
2223
FromDiskExporterImpl<LogRecordData> delegate =
2324
FromDiskExporterImpl.<LogRecordData>builder()
24-
.setFolderName("logs")
25+
.setFolderName(SignalTypes.logs.name())
2526
.setStorageConfiguration(config)
2627
.setDeserializer(SignalDeserializer.ofLogs())
2728
.setExportFunction(exporter::export)
29+
.setDebugEnabled(config.isDebugEnabled())
2830
.build();
2931
return new LogRecordFromDiskExporter(delegate);
3032
}

disk-buffering/src/main/java/io/opentelemetry/contrib/disk/buffering/LogRecordToDiskExporter.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import io.opentelemetry.contrib.disk.buffering.internal.exporter.ToDiskExporter;
99
import io.opentelemetry.contrib.disk.buffering.internal.serialization.serializers.SignalSerializer;
10+
import io.opentelemetry.contrib.disk.buffering.internal.utils.SignalTypes;
1011
import io.opentelemetry.sdk.common.CompletableResultCode;
1112
import io.opentelemetry.sdk.logs.data.LogRecordData;
1213
import io.opentelemetry.sdk.logs.export.LogRecordExporter;
@@ -32,7 +33,7 @@ public static LogRecordToDiskExporter create(
3233
LogRecordExporter delegate, StorageConfiguration config) throws IOException {
3334
ToDiskExporter<LogRecordData> toDisk =
3435
ToDiskExporter.<LogRecordData>builder()
35-
.setFolderName("logs")
36+
.setFolderName(SignalTypes.logs.name())
3637
.setStorageConfiguration(config)
3738
.setSerializer(SignalSerializer.ofLogs())
3839
.setExportFunction(delegate::export)

disk-buffering/src/main/java/io/opentelemetry/contrib/disk/buffering/MetricFromDiskExporter.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import io.opentelemetry.contrib.disk.buffering.internal.exporter.FromDiskExporter;
99
import io.opentelemetry.contrib.disk.buffering.internal.exporter.FromDiskExporterImpl;
1010
import io.opentelemetry.contrib.disk.buffering.internal.serialization.deserializers.SignalDeserializer;
11+
import io.opentelemetry.contrib.disk.buffering.internal.utils.SignalTypes;
1112
import io.opentelemetry.sdk.metrics.data.MetricData;
1213
import io.opentelemetry.sdk.metrics.export.MetricExporter;
1314
import java.io.IOException;
@@ -21,10 +22,11 @@ public static MetricFromDiskExporter create(MetricExporter exporter, StorageConf
2122
throws IOException {
2223
FromDiskExporterImpl<MetricData> delegate =
2324
FromDiskExporterImpl.<MetricData>builder()
24-
.setFolderName("metrics")
25+
.setFolderName(SignalTypes.metrics.name())
2526
.setStorageConfiguration(config)
2627
.setDeserializer(SignalDeserializer.ofMetrics())
2728
.setExportFunction(exporter::export)
29+
.setDebugEnabled(config.isDebugEnabled())
2830
.build();
2931
return new MetricFromDiskExporter(delegate);
3032
}

disk-buffering/src/main/java/io/opentelemetry/contrib/disk/buffering/MetricToDiskExporter.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import io.opentelemetry.contrib.disk.buffering.internal.exporter.ToDiskExporter;
99
import io.opentelemetry.contrib.disk.buffering.internal.serialization.serializers.SignalSerializer;
10+
import io.opentelemetry.contrib.disk.buffering.internal.utils.SignalTypes;
1011
import io.opentelemetry.sdk.common.CompletableResultCode;
1112
import io.opentelemetry.sdk.metrics.InstrumentType;
1213
import io.opentelemetry.sdk.metrics.data.AggregationTemporality;
@@ -42,7 +43,7 @@ public static MetricToDiskExporter create(
4243
throws IOException {
4344
ToDiskExporter<MetricData> toDisk =
4445
ToDiskExporter.<MetricData>builder()
45-
.setFolderName("metrics")
46+
.setFolderName(SignalTypes.metrics.name())
4647
.setStorageConfiguration(config)
4748
.setSerializer(SignalSerializer.ofMetrics())
4849
.setExportFunction(delegate::export)

disk-buffering/src/main/java/io/opentelemetry/contrib/disk/buffering/SpanFromDiskExporter.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import io.opentelemetry.contrib.disk.buffering.internal.exporter.FromDiskExporter;
99
import io.opentelemetry.contrib.disk.buffering.internal.exporter.FromDiskExporterImpl;
1010
import io.opentelemetry.contrib.disk.buffering.internal.serialization.deserializers.SignalDeserializer;
11+
import io.opentelemetry.contrib.disk.buffering.internal.utils.SignalTypes;
1112
import io.opentelemetry.sdk.trace.data.SpanData;
1213
import io.opentelemetry.sdk.trace.export.SpanExporter;
1314
import java.io.IOException;
@@ -21,10 +22,11 @@ public static SpanFromDiskExporter create(SpanExporter exporter, StorageConfigur
2122
throws IOException {
2223
FromDiskExporterImpl<SpanData> delegate =
2324
FromDiskExporterImpl.<SpanData>builder()
24-
.setFolderName("spans")
25+
.setFolderName(SignalTypes.spans.name())
2526
.setStorageConfiguration(config)
2627
.setDeserializer(SignalDeserializer.ofSpans())
2728
.setExportFunction(exporter::export)
29+
.setDebugEnabled(config.isDebugEnabled())
2830
.build();
2931
return new SpanFromDiskExporter(delegate);
3032
}

disk-buffering/src/main/java/io/opentelemetry/contrib/disk/buffering/SpanToDiskExporter.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import io.opentelemetry.contrib.disk.buffering.internal.exporter.ToDiskExporter;
99
import io.opentelemetry.contrib.disk.buffering.internal.serialization.serializers.SignalSerializer;
10+
import io.opentelemetry.contrib.disk.buffering.internal.utils.SignalTypes;
1011
import io.opentelemetry.sdk.common.CompletableResultCode;
1112
import io.opentelemetry.sdk.trace.data.SpanData;
1213
import io.opentelemetry.sdk.trace.export.SpanExporter;
@@ -33,7 +34,7 @@ public static SpanToDiskExporter create(SpanExporter delegate, StorageConfigurat
3334
throws IOException {
3435
ToDiskExporter<SpanData> toDisk =
3536
ToDiskExporter.<SpanData>builder()
36-
.setFolderName("spans")
37+
.setFolderName(SignalTypes.spans.name())
3738
.setStorageConfiguration(config)
3839
.setSerializer(SignalSerializer.ofSpans())
3940
.setExportFunction(delegate::export)

disk-buffering/src/main/java/io/opentelemetry/contrib/disk/buffering/StorageConfiguration.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ public abstract class StorageConfiguration {
1818
/** The root storage location for buffered telemetry. */
1919
public abstract File getRootDir();
2020

21+
/** Returns true if the storage has been configured with debug verbosity enabled. */
22+
public abstract boolean isDebugEnabled();
23+
2124
/** The max amount of time a file can receive new data. */
2225
public abstract long getMaxFileAgeForWriteMillis();
2326

@@ -62,6 +65,7 @@ public static Builder builder() {
6265
.setMaxFileAgeForWriteMillis(TimeUnit.SECONDS.toMillis(30))
6366
.setMinFileAgeForReadMillis(TimeUnit.SECONDS.toMillis(33))
6467
.setMaxFileAgeForReadMillis(TimeUnit.HOURS.toMillis(18))
68+
.setDebugEnabled(false)
6569
.setTemporaryFileProvider(fileProvider);
6670
}
6771

@@ -81,6 +85,8 @@ public abstract static class Builder {
8185

8286
public abstract Builder setRootDir(File rootDir);
8387

88+
public abstract Builder setDebugEnabled(boolean debugEnabled);
89+
8490
public abstract StorageConfiguration build();
8591
}
8692
}

disk-buffering/src/main/java/io/opentelemetry/contrib/disk/buffering/internal/exporter/FromDiskExporterBuilder.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ public class FromDiskExporterBuilder<T> {
2525
private Function<Collection<T>, CompletableResultCode> exportFunction =
2626
x -> CompletableResultCode.ofFailure();
2727

28+
private boolean debugEnabled = false;
29+
2830
@NotNull
2931
private static <T> SignalDeserializer<T> noopDeserializer() {
3032
return x -> emptyList();
@@ -63,8 +65,19 @@ public FromDiskExporterBuilder<T> setExportFunction(
6365
return this;
6466
}
6567

68+
@CanIgnoreReturnValue
69+
public FromDiskExporterBuilder<T> enableDebug() {
70+
return setDebugEnabled(true);
71+
}
72+
73+
@CanIgnoreReturnValue
74+
public FromDiskExporterBuilder<T> setDebugEnabled(boolean debugEnabled) {
75+
this.debugEnabled = debugEnabled;
76+
return this;
77+
}
78+
6679
public FromDiskExporterImpl<T> build() throws IOException {
6780
Storage storage = storageBuilder.build();
68-
return new FromDiskExporterImpl<>(serializer, exportFunction, storage);
81+
return new FromDiskExporterImpl<>(serializer, exportFunction, storage, debugEnabled);
6982
}
7083
}

disk-buffering/src/main/java/io/opentelemetry/contrib/disk/buffering/internal/exporter/FromDiskExporterImpl.java

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,31 +8,35 @@
88
import io.opentelemetry.contrib.disk.buffering.internal.serialization.deserializers.SignalDeserializer;
99
import io.opentelemetry.contrib.disk.buffering.internal.storage.Storage;
1010
import io.opentelemetry.contrib.disk.buffering.internal.storage.responses.ReadableResult;
11+
import io.opentelemetry.contrib.disk.buffering.internal.utils.DebugLogger;
1112
import io.opentelemetry.sdk.common.CompletableResultCode;
1213
import java.io.IOException;
1314
import java.util.Collection;
15+
import java.util.List;
1416
import java.util.concurrent.TimeUnit;
1517
import java.util.function.Function;
16-
import java.util.logging.Level;
1718
import java.util.logging.Logger;
1819

1920
/**
2021
* Signal-type generic class that can read telemetry previously buffered on disk and send it to
2122
* another delegated exporter.
2223
*/
2324
public final class FromDiskExporterImpl<EXPORT_DATA> implements FromDiskExporter {
25+
private final DebugLogger logger;
2426
private final Storage storage;
2527
private final SignalDeserializer<EXPORT_DATA> deserializer;
2628
private final Function<Collection<EXPORT_DATA>, CompletableResultCode> exportFunction;
27-
private static final Logger logger = Logger.getLogger(FromDiskExporterImpl.class.getName());
2829

2930
FromDiskExporterImpl(
3031
SignalDeserializer<EXPORT_DATA> deserializer,
3132
Function<Collection<EXPORT_DATA>, CompletableResultCode> exportFunction,
32-
Storage storage) {
33+
Storage storage,
34+
boolean debugEnabled) {
3335
this.deserializer = deserializer;
3436
this.exportFunction = exportFunction;
3537
this.storage = storage;
38+
this.logger =
39+
DebugLogger.wrap(Logger.getLogger(FromDiskExporterImpl.class.getName()), debugEnabled);
3640
}
3741

3842
public static <T> FromDiskExporterBuilder<T> builder() {
@@ -44,19 +48,26 @@ public static <T> FromDiskExporterBuilder<T> builder() {
4448
*
4549
* @param timeout The amount of time to wait for the wrapped exporter to finish.
4650
* @param unit The unit of the time provided.
47-
* @return true if there was data available and it was successfully exported within the timeout
51+
* @return true if there was data available, and it was successfully exported within the timeout
4852
* provided. false otherwise.
4953
* @throws IOException If an unexpected error happens.
5054
*/
5155
@Override
5256
public boolean exportStoredBatch(long timeout, TimeUnit unit) throws IOException {
53-
logger.log(Level.INFO, "Attempting to export batch from disk.");
57+
logger.log("Attempting to export " + deserializer.signalType() + " batch from disk.");
5458
ReadableResult result =
5559
storage.readAndProcess(
5660
bytes -> {
57-
logger.log(Level.INFO, "About to export stored batch.");
58-
CompletableResultCode join =
59-
exportFunction.apply(deserializer.deserialize(bytes)).join(timeout, unit);
61+
logger.log(
62+
"Read "
63+
+ bytes.length
64+
+ " "
65+
+ deserializer.signalType()
66+
+ " bytes from storage.");
67+
List<EXPORT_DATA> telemetry = deserializer.deserialize(bytes);
68+
logger.log(
69+
"Now exporting batch of " + telemetry.size() + " " + deserializer.signalType());
70+
CompletableResultCode join = exportFunction.apply(telemetry).join(timeout, unit);
6071
return join.isSuccess();
6172
});
6273
return result == ReadableResult.SUCCEEDED;

disk-buffering/src/main/java/io/opentelemetry/contrib/disk/buffering/internal/exporter/ToDiskExporter.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import io.opentelemetry.contrib.disk.buffering.internal.serialization.serializers.SignalSerializer;
99
import io.opentelemetry.contrib.disk.buffering.internal.storage.Storage;
10+
import io.opentelemetry.contrib.disk.buffering.internal.utils.DebugLogger;
1011
import io.opentelemetry.sdk.common.CompletableResultCode;
1112
import java.io.IOException;
1213
import java.util.Collection;
@@ -16,36 +17,38 @@
1617

1718
public class ToDiskExporter<EXPORT_DATA> {
1819

19-
private static final Logger logger = Logger.getLogger(ToDiskExporter.class.getName());
20+
private final DebugLogger logger;
2021
private final Storage storage;
2122
private final SignalSerializer<EXPORT_DATA> serializer;
2223
private final Function<Collection<EXPORT_DATA>, CompletableResultCode> exportFunction;
2324

2425
ToDiskExporter(
2526
SignalSerializer<EXPORT_DATA> serializer,
2627
Function<Collection<EXPORT_DATA>, CompletableResultCode> exportFunction,
27-
Storage storage) {
28+
Storage storage,
29+
boolean debugEnabled) {
2830
this.serializer = serializer;
2931
this.exportFunction = exportFunction;
3032
this.storage = storage;
33+
this.logger = DebugLogger.wrap(Logger.getLogger(ToDiskExporter.class.getName()), debugEnabled);
3134
}
3235

3336
public static <T> ToDiskExporterBuilder<T> builder() {
3437
return new ToDiskExporterBuilder<>();
3538
}
3639

3740
public CompletableResultCode export(Collection<EXPORT_DATA> data) {
38-
logger.log(Level.FINER, "Intercepting exporter batch.");
41+
logger.log("Intercepting exporter batch.", Level.FINER);
3942
try {
4043
if (storage.write(serializer.serialize(data))) {
4144
return CompletableResultCode.ofSuccess();
4245
}
43-
logger.log(Level.INFO, "Could not store batch in disk. Exporting it right away.");
46+
logger.log("Could not store batch in disk. Exporting it right away.");
4447
return exportFunction.apply(data);
4548
} catch (IOException e) {
4649
logger.log(
47-
Level.WARNING,
4850
"An unexpected error happened while attempting to write the data in disk. Exporting it right away.",
51+
Level.WARNING,
4952
e);
5053
return exportFunction.apply(data);
5154
}

0 commit comments

Comments
 (0)