Skip to content
Merged
Changes from 1 commit
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
257f167
feat(rum): Add initial config and API
PerfectSlayer Jul 3, 2025
5e734e3
feat(rum): Iterating on initial config and API
PerfectSlayer Jul 4, 2025
dde7164
fix(rum): Fix config print
PerfectSlayer Jul 4, 2025
bb22e1a
fix(rum): Remove content type support as only "text/html" is supported
PerfectSlayer Jul 4, 2025
1bf99a1
feat(rum): Add smoke tests
PerfectSlayer Jul 4, 2025
8814d86
feat(rum): Add smoke tests
PerfectSlayer Jul 4, 2025
a1f0a77
feat(rum): Add smoke tests
PerfectSlayer Jul 4, 2025
f941b4a
feat(rum): Add smoke tests
PerfectSlayer Jul 4, 2025
fe2006c
Add RUM injection for servlet 3
amarziali Jul 4, 2025
2ac167a
fix rum injection smoke test
amarziali Jul 4, 2025
c389b77
fix javadoc
amarziali Jul 4, 2025
01f6aae
Add benchmark
amarziali Jul 4, 2025
486ee57
avoid linkage issues with earlier servlet specs
amarziali Jul 4, 2025
2a55b69
feat(rum): Improve smoke test to add more cases
PerfectSlayer Jul 4, 2025
ce2c141
feat(rum): Add remote config and fix json encoding
PerfectSlayer Jul 4, 2025
9d43968
feat(rum): Add more smoke tests
PerfectSlayer Jul 4, 2025
a809044
fix(rum): Fix config
PerfectSlayer Jul 4, 2025
a0bae01
fix(rum): Fix smoke tests
PerfectSlayer Jul 4, 2025
42e3e6b
feat(rum): Add more smoke tests
PerfectSlayer Jul 4, 2025
4f0b646
feat(rum): Simplify config to remove dynamic init
PerfectSlayer Jul 7, 2025
1c49a79
Use runnable for callback
amarziali Jul 4, 2025
24c817e
improve pipe perfs
amarziali Jul 4, 2025
4beb3a8
feat(rum): Add injector and config unit tests
PerfectSlayer Jul 7, 2025
23f65fb
Add rum injection for jakarta servlet
amarziali Jul 7, 2025
dc3beab
codenarc
amarziali Jul 7, 2025
78ce365
Merge branch 'master' into project/rum-injection
PerfectSlayer Jul 7, 2025
58c8ef3
fix(rum): Fix smoke test merge
PerfectSlayer Jul 7, 2025
71a0923
exclude spring virtual filter chain
amarziali Jul 7, 2025
af937dc
fix(rum): Fix SDK snippet
PerfectSlayer Jul 7, 2025
79db3ce
final fixes
amarziali Jul 7, 2025
6672db9
fix more tests
amarziali Jul 7, 2025
fc23ee8
fix(rum): Fix privacy level encoding
PerfectSlayer Jul 7, 2025
b1ea903
Apply suggestions
amarziali Jul 8, 2025
6fb58b4
feat(rum): Improve config related to PR review feedback
PerfectSlayer Jul 8, 2025
1e6faf9
Improve and fix circular buffer
amarziali Jul 8, 2025
a4d960d
review
amarziali Jul 8, 2025
d4e5f6f
bad commit
amarziali Jul 8, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
avoid linkage issues with earlier servlet specs
  • Loading branch information
amarziali committed Jul 4, 2025
commit 486ee57a404676a54de372d69c9690754c7fdbba
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package datadog.trace.instrumentation.servlet3;

import datadog.trace.bootstrap.instrumentation.buffer.InjectingPipeOutputStream;
import datadog.trace.util.MethodHandles;
import java.io.IOException;
import java.io.OutputStream;
import java.lang.invoke.MethodHandle;
import java.util.function.Consumer;
import javax.servlet.ServletOutputStream;
import javax.servlet.WriteListener;
Expand All @@ -11,6 +13,18 @@ public class WrappedServletOutputStream extends ServletOutputStream {
private final OutputStream filtered;
private final ServletOutputStream delegate;

private static final MethodHandle IS_READY_MH = getMh("isReady");
private static final MethodHandle SET_WRITELISTENER_MH = getMh("setWriteListener");

private static final MethodHandle getMh(final String name) {
try {
return new MethodHandles(ServletOutputStream.class.getClassLoader())
.method(ServletOutputStream.class, name);
} catch (Throwable ignored) {
return null;
}
}

public WrappedServletOutputStream(
ServletOutputStream delegate,
byte[] marker,
Expand Down Expand Up @@ -45,13 +59,27 @@ public void close() throws IOException {
filtered.close();
}

@Override
public boolean isReady() {
return delegate.isReady();
if (IS_READY_MH == null) {
return false;
}
try {
return (boolean) IS_READY_MH.invoke(delegate);
} catch (Throwable e) {
// how to sneaky throw?
Comment thread
amarziali marked this conversation as resolved.
Outdated
throw new RuntimeException(e);
}
}

@Override
public void setWriteListener(WriteListener writeListener) {
delegate.setWriteListener(writeListener);
if (SET_WRITELISTENER_MH == null) {
return;
}
try {
SET_WRITELISTENER_MH.invoke(delegate, writeListener);
} catch (Throwable e) {
// how to sneaky throw?
Comment thread
amarziali marked this conversation as resolved.
Outdated
throw new RuntimeException(e);
}
}
}