Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
8 changes: 4 additions & 4 deletions rxjava1-1.1/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,10 @@ dependencies {

jar {
manifest {
attributes 'Implementation-Title': 'com.newrelic.instrumentation.rxjava1-1.1'
attributes 'Implementation-Vendor': 'New Relic'
attributes 'Implementation-Vendor-Id': 'com.newrelic'
attributes 'Implementation-Version': 1.0
attributes 'Implementation-Title': 'com.newrelic.instrumentation.labs.rxjava1-1.1'
attributes 'Implementation-Vendor': 'New Relic Labs'
attributes 'Implementation-Vendor-Id': 'com.newrelic.labs'
attributes 'Implementation-Version': 1.1
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.nr.rxjava1;
package com.newrelic.instrumentation.labs.rxjava1;

import rx.Observable.Operator;
import rx.Subscriber;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.nr.rxjava1;
package com.newrelic.instrumentation.labs.rxjava1;

import com.newrelic.agent.bridge.AgentBridge;
import com.newrelic.api.agent.NewRelic;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import com.newrelic.api.agent.weaver.MatchType;
import com.newrelic.api.agent.weaver.Weave;
import com.newrelic.api.agent.weaver.Weaver;
import com.nr.rxjava1.NROperator;
import com.newrelic.instrumentation.labs.rxjava1.NROperator;

import rx.Observable.Operator;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import com.newrelic.api.agent.weaver.Weave;
import com.newrelic.api.agent.weaver.Weaver;
import com.nr.rxjava1.NROperator;
import com.newrelic.instrumentation.labs.rxjava1.NROperator;

import rx.Observable;
import rx.Scheduler;
Expand Down
8 changes: 4 additions & 4 deletions rxjava1-1.2/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,10 @@ dependencies {

jar {
manifest {
attributes 'Implementation-Title': 'com.newrelic.instrumentation.rxjava1-1.2'
attributes 'Implementation-Vendor': 'New Relic'
attributes 'Implementation-Vendor-Id': 'com.newrelic'
attributes 'Implementation-Version': 1.0
attributes 'Implementation-Title': 'com.newrelic.instrumentation.labs.rxjava1-1.2'
attributes 'Implementation-Vendor': 'New Relic Labs'
attributes 'Implementation-Vendor-Id': 'com.newrelic.labs'
attributes 'Implementation-Version': 1.1
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.nr.rxjava1_2;
package com.newrelic.instrumentation.labs.rxjava1_2;

import rx.Completable.Operator;
import rx.CompletableSubscriber;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.nr.rxjava1_2;
package com.newrelic.instrumentation.labs.rxjava1_2;

import com.newrelic.agent.bridge.AgentBridge;
import com.newrelic.api.agent.NewRelic;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.nr.rxjava1_2;
package com.newrelic.instrumentation.labs.rxjava1_2;

import rx.Observable.Operator;
import rx.Subscriber;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.nr.rxjava1_2;
package com.newrelic.instrumentation.labs.rxjava1_2;

import com.newrelic.agent.bridge.AgentBridge;
import com.newrelic.api.agent.NewRelic;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import com.newrelic.api.agent.weaver.Weave;
import com.newrelic.api.agent.weaver.Weaver;
import com.nr.rxjava1_2.NRCompletableOperator;
import com.newrelic.instrumentation.labs.rxjava1_2.NRCompletableOperator;

import rx.Completable.Operator;

Expand Down
2 changes: 1 addition & 1 deletion rxjava1-1.2/src/main/java/rx/Single_Instrumentation.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import com.newrelic.api.agent.weaver.Weave;
import com.newrelic.api.agent.weaver.Weaver;
import com.nr.rxjava1_2.NRSingleOperator;
import com.newrelic.instrumentation.labs.rxjava1_2.NRSingleOperator;

import rx.Observable.Operator;

Expand Down
9 changes: 5 additions & 4 deletions rxjava1-finder/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,11 @@ dependencies {

jar {
manifest {
attributes 'Implementation-Title': 'com.newrelic.instrumentation.rxjava1-finder'
attributes 'Implementation-Vendor': 'New Relic'
attributes 'Implementation-Vendor-Id': 'com.newrelic'
attributes 'Implementation-Version': 1.0
attributes 'Implementation-Title': 'com.newrelic.instrumentation.labs.rxjava1-finder'
attributes 'Implementation-Vendor': 'New Relic Labs'
attributes 'Implementation-Vendor-Id': 'com.newrelic.labs'
attributes 'Implementation-Version': 1.1
attributes 'Agent-Class': 'com.newrelic.agent.instrumentation.labs.rxjava1.RxJava1PreMain'
}
}

Expand Down
30 changes: 30 additions & 0 deletions rxjava2-2.0.7/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@

// Build.gradle generated for instrumentation module rxjava2-2.0

apply plugin: 'java'

dependencies {
implementation 'io.reactivex.rxjava2:rxjava:2.0.7'
implementation 'org.reactivestreams:reactive-streams:1.0.3'


// New Relic Java Agent dependencies
implementation fileTree(include: ['*.jar'], dir: '../libs')

testImplementation 'junit:junit:4.12'

}

jar {
manifest {
attributes 'Implementation-Title': 'com.newrelic.instrumentation.labs.rxjava2-2.0.7'
attributes 'Implementation-Vendor': 'New Relic Labs'
attributes 'Implementation-Vendor-Id': 'com.newrelic.labs'
attributes 'Implementation-Version': 1.0
}
}

verifyInstrumentation {
passes 'io.reactivex.rxjava2:rxjava:[2.0.7,)'
excludeRegex '.*RC[0-9]'
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.newrelic.instrumentation.labs.rxjava2_0_7;

import io.reactivex.functions.Action;

public class NRCancelAction implements Action {

private NRRxJava2Holder<?> holder = null;

public NRCancelAction(NRRxJava2Holder<?> h) {
holder = h;
}

@Override
public void run() throws Exception {
if(holder != null) {
holder.expireToken();
holder.ignoreSegment();
}
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package com.newrelic.instrumentation.labs.rxjava2_0_7;

import com.newrelic.api.agent.NewRelic;

import io.reactivex.Completable;
import io.reactivex.functions.Function;
import io.reactivex.internal.functions.Functions;
import io.reactivex.internal.operators.completable.CompletablePeek;

public class NRCompletableAssembly implements Function<Completable, Completable> {

private static final String FROM_PREFIX = "CompletableFrom";
private static final String INTERVAL_PREFIX = "CompletableInterval";
private static final String NEVER = "CompletableNever";

private Function<Completable, Completable> delegate = null;

public NRCompletableAssembly() {

}

public void setDelegate(Function<Completable, Completable> d) {
delegate = d;
}

public Function<Completable, Completable> getDelegate() {
return delegate;
}

@Override
public Completable apply(Completable t) throws Exception {
if(Utils.useSegments) {
String simpleName = t.getClass().getSimpleName();
if(simpleName.startsWith(FROM_PREFIX)) return t;
if(simpleName.startsWith(INTERVAL_PREFIX)) return t;
if(simpleName.equals(NEVER)) return t;
if(Utils.getCompletableIgnores().contains(simpleName)) return t;
if(t.completableName == null) {
t.completableName = simpleName;
}
NRRxJava2Holder<?> holder = new NRRxJava2Holder<>("Completable",t.completableName, NewRelic.getAgent().getTransaction());
NRErrorConsumer errorConsumer = new NRErrorConsumer(holder);
NRCompleteAction completeAction = new NRCompleteAction(holder);
NRTerminationAction terminationAction = new NRTerminationAction(holder);
NRDisposableConsumer disposableConsumer = new NRDisposableConsumer(holder);

Completable result = delegate != null ? delegate.apply(t) : t;

Completable subscribe = new CompletablePeek(result, disposableConsumer, errorConsumer, completeAction, terminationAction, Functions.EMPTY_ACTION,Functions.EMPTY_ACTION);
return subscribe;
}
return delegate != null ? delegate.apply(t) : t;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package com.newrelic.instrumentation.labs.rxjava2_0_7;

import com.newrelic.agent.bridge.AgentBridge;
import com.newrelic.api.agent.NewRelic;
import com.newrelic.api.agent.Trace;

import io.reactivex.CompletableObserver;
import io.reactivex.disposables.Disposable;

public class NRCompletableObserver implements CompletableObserver {

private CompletableObserver downstream;

private String name = null;

private static boolean isTransformed = false;

public NRCompletableObserver(CompletableObserver downstream, String n) {
this.downstream = downstream;
name = n;
if(!isTransformed) {
isTransformed = true;
AgentBridge.instrumentation.retransformUninstrumentedClass(getClass());
}
}

@Override
@Trace
public void onSubscribe(Disposable d) {
NewRelic.getAgent().getTracedMethod().setMetricName("Custom","RxJava2","Completable",name,"onSubscribe");
if(downstream != null) {
downstream.onSubscribe(d);
}
}


@Override
@Trace
public void onError(Throwable e) {
NewRelic.getAgent().getTracedMethod().setMetricName("Custom","RxJava2","Completable",name,"onError");
NewRelic.noticeError(e);
if(downstream != null) {
downstream.onError(e);
}
}

@Override
@Trace
public void onComplete() {
NewRelic.getAgent().getTracedMethod().setMetricName("Custom","RxJava2","Completable",name,"onError");
if(downstream != null) {
downstream.onComplete();
}
}


}
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
package com.newrelic.instrumentation.rxjava2;
package com.newrelic.instrumentation.labs.rxjava2_0_7;

import io.reactivex.Completable;
import io.reactivex.CompletableObserver;
import io.reactivex.functions.BiFunction;
import io.reactivex.internal.operators.completable.CompletableUtils;

public class NRCompletableSubWrapper implements BiFunction<Completable, CompletableObserver, CompletableObserver> {

Expand All @@ -15,14 +14,11 @@ public NRCompletableSubWrapper(BiFunction<Completable, CompletableObserver, Comp

@Override
public CompletableObserver apply(Completable t1, CompletableObserver t2) throws Exception {
boolean ignore = CompletableUtils.ignore(t1);
if(delegate == null) {
if(ignore) return t2;
return t2 instanceof NRCompletableObserver2 ? t2 : new NRCompletableObserver2(t2, t1.completableName != null ? t1.completableName : t1.getClass().getSimpleName());
return t2 instanceof NRCompletableObserver ? t2 : new NRCompletableObserver(t2, t1.completableName != null ? t1.completableName : t1.getClass().getSimpleName());
}
CompletableObserver actual = delegate.apply(t1, t2);
if(ignore) return actual;
return t2 instanceof NRCompletableObserver2 ? actual : new NRCompletableObserver2(actual, t1.completableName != null ? t1.completableName : t1.getClass().getSimpleName());
return t2 instanceof NRCompletableObserver ? actual : new NRCompletableObserver(actual, t1.completableName != null ? t1.completableName : t1.getClass().getSimpleName());
}

public BiFunction<Completable, CompletableObserver, CompletableObserver> getDelegate() {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.newrelic.instrumentation.labs.rxjava2_0_7;

import io.reactivex.functions.Action;

public class NRCompleteAction implements Action {

private NRRxJava2Holder<?> holder = null;

public NRCompleteAction(NRRxJava2Holder<?> h) {
holder = h;
}

@Override
public void run() throws Exception {
if(holder != null) {
holder.expireToken();
holder.endSegment();
}
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.newrelic.instrumentation.labs.rxjava2_0_7;

import com.newrelic.agent.bridge.AgentBridge;
import com.newrelic.api.agent.Trace;

import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Consumer;

public class NRDisposableConsumer implements Consumer<Disposable> {

private NRRxJava2Holder<?> holder = null;
private static boolean isTransformed = false;

public NRDisposableConsumer(NRRxJava2Holder<?> h) {
holder = h;
if(!isTransformed) {
AgentBridge.instrumentation.retransformUninstrumentedClass(getClass());
isTransformed = true;
}
}

@Override
@Trace(async = true)
public void accept(Disposable t) throws Exception {
if(holder != null) {
holder.startSegment();
}
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.newrelic.instrumentation.labs.rxjava2_0_7;

import com.newrelic.api.agent.NewRelic;

import io.reactivex.functions.Consumer;

public class NRErrorConsumer implements Consumer<Throwable> {

private NRRxJava2Holder<?> holder = null;

public NRErrorConsumer( NRRxJava2Holder<?> h) {
holder = h;
}

@Override
public void accept(Throwable t) throws Exception {
NewRelic.noticeError(t);
if(holder != null) {
holder.ignoreSegment();
holder.expireToken();
holder = null;
}
}

}
Loading
Loading