Skip to content
Merged
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
  •  
  •  
  •  
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,4 @@
.project
build
bin
.DS_Store
2 changes: 1 addition & 1 deletion rxjava1-1.1/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ jar {
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.0
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 java.util.ArrayList;
import java.util.Collection;
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 @@ -7,7 +7,7 @@
import com.newrelic.api.agent.weaver.Weave;
import com.newrelic.api.agent.weaver.WeaveAllConstructors;
import com.newrelic.api.agent.weaver.Weaver;
import com.nr.rxjava1.NRRxJavaHeaders;
import com.newrelic.instrumentation.labs.rxjava1.NRRxJavaHeaders;

@Weave
public abstract class ScheduledAction {
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.Observable.Operator;
Expand Down
2 changes: 1 addition & 1 deletion rxjava1-1.2/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ jar {
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.0
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.newrelic.instrumentation.rxjava2;
package com.newrelic.instrumentation.labs.rxjava1_2;

import java.util.ArrayList;
import java.util.Collection;
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
62 changes: 0 additions & 62 deletions rxjava1-1.2/src/main/java/com/nr/rxjava1_2/NRRxJavaHeaders.java

This file was deleted.

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
3 changes: 2 additions & 1 deletion rxjava1-finder/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ jar {
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.0
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
Loading
Loading