Add gradle build support for benchmarks and examples. (#163)
diff --git a/.travis.yml b/.travis.yml
index b8788bd..14a1e19 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -35,9 +35,7 @@
curl https://storage.googleapis.com/bazel-apt/doc/apt-key.pub.gpg | sudo apt-key add - ;
sudo apt-get update ;;
"GRADLE")
- mkdir -p $HOME/.gradle ;
- echo "checkstyle.ignoreFailures=false" >> $HOME/.gradle/gradle.properties ;
- echo "failOnWarnings=true" >> $HOME/.gradle/gradle.properties ;;
+ mkdir -p $HOME/.gradle ;;
esac
install:
diff --git a/BUILD b/BUILD
index ac8a72d..a6e0a42 100644
--- a/BUILD
+++ b/BUILD
@@ -644,7 +644,7 @@
java_binary(
name = "HttpPropagationUtilBenchmark",
srcs = [
- "benchmarks/src/main/java/com/google/instrumentation/trace/HttpPropagationUtilBenchmark.java",
+ "benchmarks/src/jmh/java/com/google/instrumentation/trace/HttpPropagationUtilBenchmark.java",
],
main_class = "com.google.instrumentation.trace.HttpPropagationUtilBenchmark",
deps = [
diff --git a/benchmarks/README.md b/benchmarks/README.md
new file mode 100644
index 0000000..0aad24c
--- /dev/null
+++ b/benchmarks/README.md
@@ -0,0 +1,8 @@
+Instrumentation Benchmarks
+==============================================
+
+## To run the benchmark type
+
+```
+$ ./gradlew :instrumentation-benchmarks:jmh
+```
\ No newline at end of file
diff --git a/benchmarks/build.gradle b/benchmarks/build.gradle
new file mode 100644
index 0000000..9a81ef3
--- /dev/null
+++ b/benchmarks/build.gradle
@@ -0,0 +1,31 @@
+description = 'Instrumentation: Benchmarks'
+
+buildscript {
+ repositories {
+ jcenter()
+ maven {
+ url "https://plugins.gradle.org/m2/"
+ }
+ }
+ dependencies {
+ classpath "me.champeau.gradle:jmh-gradle-plugin:0.3.1"
+ }
+}
+
+apply plugin: "me.champeau.gradle.jmh"
+
+jmh {
+ jmhVersion = '1.18'
+ warmupIterations = 10
+ iterations = 10
+ fork = 1
+ jvmArgs = "-server -Xms2g -Xmx2g"
+}
+
+dependencies {
+ compile project(':instrumentation-core')
+}
+
+compileJmhJava {
+ options.compilerArgs = compileJava.options.compilerArgs
+}
\ No newline at end of file
diff --git a/benchmarks/src/main/java/com/google/instrumentation/trace/HttpPropagationUtilBenchmark.java b/benchmarks/src/jmh/java/com/google/instrumentation/trace/HttpPropagationUtilBenchmark.java
similarity index 98%
rename from benchmarks/src/main/java/com/google/instrumentation/trace/HttpPropagationUtilBenchmark.java
rename to benchmarks/src/jmh/java/com/google/instrumentation/trace/HttpPropagationUtilBenchmark.java
index 9214bc0..2a40c0d 100644
--- a/benchmarks/src/main/java/com/google/instrumentation/trace/HttpPropagationUtilBenchmark.java
+++ b/benchmarks/src/jmh/java/com/google/instrumentation/trace/HttpPropagationUtilBenchmark.java
@@ -38,8 +38,11 @@
private SpanContext spanContext;
private String spanContextStringHttp;
+ /**
+ * Setup function for benchmarks.
+ */
@Setup
- public void setUp() throws Exception {
+ public void setUp() {
spanContext = new SpanContext(traceId, spanId, traceOptions);
spanContextStringHttp = HttpPropagationUtil.toHttpHeaderValue(spanContext);
spanContextBytes = new byte[16 + 8 + 4];
diff --git a/build.gradle b/build.gradle
index 8005a56..5aea52c 100644
--- a/build.gradle
+++ b/build.gradle
@@ -20,6 +20,7 @@
apply plugin: "jacoco"
// TODO(bdrutu): enable all checks.
apply plugin: "net.ltgt.errorprone"
+ apply plugin: 'findbugs'
group = "com.google.instrumentation"
version = "0.4.0-SNAPSHOT" // CURRENT_INSTRUMENTATION_VERSION
@@ -35,9 +36,7 @@
[compileJava, compileTestJava].each() {
it.options.compilerArgs += ["-Xlint:all", "-Xlint:-try"]
it.options.encoding = "UTF-8"
- if (rootProject.hasProperty('failOnWarnings') && rootProject.failOnWarnings.toBoolean()) {
- it.options.compilerArgs += ["-Werror"]
- }
+ it.options.compilerArgs += ["-Werror"]
}
compileTestJava {
@@ -45,8 +44,6 @@
options.compilerArgs += ["-Xlint:-serial"]
// It undeprecates DoubleSubject.isEqualTo(Double).
options.compilerArgs += ["-Xlint:-deprecation"]
- sourceCompatibility = 1.7
- targetCompatibility = 1.7
}
jar.manifest {
@@ -69,21 +66,24 @@
grpcContextVersion = '1.1.2'
libraries = [
- errorprone : 'com.google.errorprone:error_prone_annotations:2.0.11',
- grpc_context : "io.grpc:grpc-context:${grpcContextVersion}",
- guava : "com.google.guava:guava:${guavaVersion}",
- jsr305 : 'com.google.code.findbugs:jsr305:3.0.0',
- protobuf : "com.google.protobuf:protobuf-java:${protobufVersion}",
+ errorprone : 'com.google.errorprone:error_prone_annotations:2.0.11',
+ grpc_context : "io.grpc:grpc-context:${grpcContextVersion}",
+ guava : "com.google.guava:guava:${guavaVersion}",
+ jsr305 : 'com.google.code.findbugs:jsr305:3.0.0',
+ protobuf : "com.google.protobuf:protobuf-java:${protobufVersion}",
// Test dependencies.
- guava_testlib: "com.google.guava:guava-testlib:${guavaVersion}",
- junit : 'junit:junit:4.11',
- mockito : 'org.mockito:mockito-core:1.9.5',
- truth : 'com.google.truth:truth:0.30',
+ guava_testlib : "com.google.guava:guava-testlib:${guavaVersion}",
+ junit : 'junit:junit:4.11',
+ mockito : 'org.mockito:mockito-core:1.9.5',
+ truth : 'com.google.truth:truth:0.30',
]
}
dependencies {
+ compile libraries.errorprone,
+ libraries.jsr305
+
testCompile libraries.guava_testlib,
libraries.junit,
libraries.mockito,
@@ -94,6 +94,19 @@
errorprone 'com.google.errorprone:error_prone_core:2.0.19'
}
+ findbugs {
+ toolVersion = '3.0.1'
+ ignoreFailures = false // bug free or it doesn't ship!
+ effort = 'max'
+ reportLevel = 'low' // low = sensitive to even minor mistakes
+ omitVisitors = [] // bugs that we want to ignore
+ }
+ // TODO(bdrutu): Enable this when the proto will generate the builds in build not in
+ // build_gradle.
+ findbugsMain.onlyIf { !name.contains("proto") }
+ // Disable findbugs for tests.
+ findbugsTest.enabled = false
+
checkstyle {
configFile = file("$rootDir/checkstyle.xml")
toolVersion = "7.6"
@@ -108,14 +121,14 @@
// This skips proto generated files beucasue they are in gen_gradle/src/main/**
source = fileTree(dir: "src/main", include: "**/*.java")
}
- checkstyleMain.onlyIf { !name.contains("proto") && !name.contains("shared")}
+ checkstyleMain.onlyIf { !name.contains("proto") && !name.contains("shared") }
checkstyleTest {
// TODO(bdrutu): Enable this when we have tests checkstyle clean.
// source = fileTree(dir: "src/test", include: "**/*.java")
excludes = ["**"]
}
- checkstyleTest.onlyIf { !name.contains("proto") && !name.contains("shared")}
+ checkstyleTest.onlyIf { !name.contains("proto") && !name.contains("shared") }
// At a test failure, log the stack trace to the console so that we don't
// have to open the HTML in a browser.
diff --git a/core/build.gradle b/core/build.gradle
index 067b34c..765f1de 100644
--- a/core/build.gradle
+++ b/core/build.gradle
@@ -3,9 +3,7 @@
dependencies {
compile project(':shared'),
libraries.grpc_context,
- libraries.guava,
- libraries.errorprone,
- libraries.jsr305
+ libraries.guava
testCompile project(':instrumentation-core-impl'),
libraries.grpc_context
diff --git a/core_impl/build.gradle b/core_impl/build.gradle
index d79924d..f1e8f48 100644
--- a/core_impl/build.gradle
+++ b/core_impl/build.gradle
@@ -3,7 +3,5 @@
dependencies {
compile project(':instrumentation-core'),
project(':proto'),
- libraries.guava,
- libraries.errorprone,
- libraries.jsr305
+ libraries.guava
}
diff --git a/examples/build.gradle b/examples/build.gradle
new file mode 100644
index 0000000..8f1cec7
--- /dev/null
+++ b/examples/build.gradle
@@ -0,0 +1,14 @@
+description = 'Instrumentation: Examples'
+
+tasks.withType(JavaCompile) {
+ sourceCompatibility = '1.8'
+ targetCompatibility = '1.8'
+}
+
+dependencies {
+ compile project(':instrumentation-core'),
+ project(':instrumentation-core-impl'),
+ libraries.grpc_context
+}
+
+// TODO(bdrutu): Add application plugin and create jars for each example.
\ No newline at end of file
diff --git a/examples/src/main/java/com/google/instrumentation/stats/StatsRunner.java b/examples/src/main/java/com/google/instrumentation/stats/StatsRunner.java
index 2eb2813..0e1e0c2 100644
--- a/examples/src/main/java/com/google/instrumentation/stats/StatsRunner.java
+++ b/examples/src/main/java/com/google/instrumentation/stats/StatsRunner.java
@@ -18,9 +18,7 @@
import io.grpc.Context;
import java.util.Arrays;
-/**
- * Simple program that uses Stats contexts.
- */
+/** Simple program that uses Stats contexts. */
public class StatsRunner {
private static final TagKey K1 = TagKey.create("k1");
private static final TagKey K2 = TagKey.create("k2");
@@ -39,6 +37,7 @@
private static final MeasurementDescriptor M2 =
MeasurementDescriptor.create("m2", "2nd test metric", simpleMeasurementUnit);
+ /** Main method. */
public static void main(String[] args) {
System.out.println("Hello Stats World");
System.out.println("Default Tags: " + DEFAULT);
@@ -46,24 +45,25 @@
Context context1 = withCurrent(DEFAULT.with(K1, V1, K2, V2));
Context original = context1.attach();
try {
- System.out.println(" Current Tags: " + getCurrentStatsContext());
- System.out.println(" Current == Default + tags1: "
- + getCurrentStatsContext().equals(getStatsContext(context1)));
- Context context2 = withCurrent(getCurrentStatsContext().with(K3, V3, K4, V4));
- context2.attach();
- try {
- System.out.println(" Current Tags: " + getCurrentStatsContext());
- System.out.println(" Current == Default + tags1 + tags2: "
- + getCurrentStatsContext().equals(getStatsContext(context2)));
- getCurrentStatsContext().record(MeasurementMap.of(M1, 0.2, M2, 0.4));
- } finally {
- context2.detach(context1);
- }
+ System.out.println(" Current Tags: " + getCurrentStatsContext());
+ System.out.println(
+ " Current == Default + tags1: "
+ + getCurrentStatsContext().equals(getStatsContext(context1)));
+ Context context2 = withCurrent(getCurrentStatsContext().with(K3, V3, K4, V4));
+ context2.attach();
+ try {
+ System.out.println(" Current Tags: " + getCurrentStatsContext());
+ System.out.println(
+ " Current == Default + tags1 + tags2: "
+ + getCurrentStatsContext().equals(getStatsContext(context2)));
+ getCurrentStatsContext().record(MeasurementMap.of(M1, 0.2, M2, 0.4));
+ } finally {
+ context2.detach(context1);
+ }
} finally {
context1.detach(original);
}
- System.out.println("Current == Default: "
- + getCurrentStatsContext().equals(DEFAULT));
+ System.out.println("Current == Default: " + getCurrentStatsContext().equals(DEFAULT));
}
private static final StatsContext DEFAULT = Stats.getStatsContextFactory().getDefault();
diff --git a/examples/src/main/java/com/google/instrumentation/trace/BasicContextTracing.java b/examples/src/main/java/com/google/instrumentation/trace/BasicContextTracing.java
index b3411b6..1b8b995 100644
--- a/examples/src/main/java/com/google/instrumentation/trace/BasicContextTracing.java
+++ b/examples/src/main/java/com/google/instrumentation/trace/BasicContextTracing.java
@@ -28,6 +28,7 @@
tracer.getCurrentSpan().addAnnotation("This is a doWork() annotation.");
}
+ /** Main method. */
public static void main(String[] args) {
Span span = tracer.spanBuilder("MyRootSpan").becomeRoot().startSpan();
try (NonThrowingCloseable ws = tracer.withSpan(span)) {
diff --git a/examples/src/main/java/com/google/instrumentation/trace/BasicScopedTracing.java b/examples/src/main/java/com/google/instrumentation/trace/BasicScopedTracing.java
index 8987f26..1787982 100644
--- a/examples/src/main/java/com/google/instrumentation/trace/BasicScopedTracing.java
+++ b/examples/src/main/java/com/google/instrumentation/trace/BasicScopedTracing.java
@@ -28,6 +28,7 @@
tracer.getCurrentSpan().addAnnotation("This is a doWork() annotation.");
}
+ /** Main method. */
public static void main(String[] args) {
try (NonThrowingCloseable ss =
tracer.spanBuilder("MyRootSpan").becomeRoot().startScopedSpan()) {
diff --git a/examples/src/main/java/com/google/instrumentation/trace/BasicTracing.java b/examples/src/main/java/com/google/instrumentation/trace/BasicTracing.java
index bdb5768..daaf911 100644
--- a/examples/src/main/java/com/google/instrumentation/trace/BasicTracing.java
+++ b/examples/src/main/java/com/google/instrumentation/trace/BasicTracing.java
@@ -24,6 +24,7 @@
span.end();
}
+ /** Main method. */
public static void main(String[] args) {
doWork();
}
diff --git a/examples/src/main/java/com/google/instrumentation/trace/MultiSpansContextTracing.java b/examples/src/main/java/com/google/instrumentation/trace/MultiSpansContextTracing.java
index b5721d3..8b849de 100644
--- a/examples/src/main/java/com/google/instrumentation/trace/MultiSpansContextTracing.java
+++ b/examples/src/main/java/com/google/instrumentation/trace/MultiSpansContextTracing.java
@@ -42,6 +42,7 @@
tracer.getCurrentSpan().addAnnotation("Annotation to the root Span after child is ended.");
}
+ /** Main method. */
public static void main(String[] args) {
Span span = tracer.spanBuilder("MyRootSpan").becomeRoot().startSpan();
try (NonThrowingCloseable ws = tracer.withSpan(span)) {
diff --git a/examples/src/main/java/com/google/instrumentation/trace/MultiSpansScopedTracing.java b/examples/src/main/java/com/google/instrumentation/trace/MultiSpansScopedTracing.java
index 827fbb6..457f4a1 100644
--- a/examples/src/main/java/com/google/instrumentation/trace/MultiSpansScopedTracing.java
+++ b/examples/src/main/java/com/google/instrumentation/trace/MultiSpansScopedTracing.java
@@ -40,6 +40,7 @@
tracer.getCurrentSpan().addAnnotation("Annotation to the root Span after child is ended.");
}
+ /** Main method. */
public static void main(String[] args) {
try (NonThrowingCloseable ss =
tracer.spanBuilder("MyRootSpan").becomeRoot().startScopedSpan()) {
diff --git a/examples/src/main/java/com/google/instrumentation/trace/MultiSpansTracing.java b/examples/src/main/java/com/google/instrumentation/trace/MultiSpansTracing.java
index 56d6bfe..fcc7412 100644
--- a/examples/src/main/java/com/google/instrumentation/trace/MultiSpansTracing.java
+++ b/examples/src/main/java/com/google/instrumentation/trace/MultiSpansTracing.java
@@ -28,6 +28,7 @@
rootSpan.end();
}
+ /** Main method. */
public static void main(String[] args) {
doWork();
}
diff --git a/settings.gradle b/settings.gradle
index ae2bf2e..f9810d1 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1,12 +1,16 @@
rootProject.name = "instrumentation"
+include ":instrumentation-all"
+include ":instrumentation-benchmarks"
include ":instrumentation-core"
include ":instrumentation-core-impl"
-include ":instrumentation-all"
+include ":instrumentation-examples"
include ":proto"
include ":shared"
project(':instrumentation-all').projectDir = "$rootDir/all" as File
+project(':instrumentation-benchmarks').projectDir = "$rootDir/benchmarks" as File
project(':instrumentation-core').projectDir = "$rootDir/core" as File
project(':instrumentation-core-impl').projectDir = "$rootDir/core_impl" as File
+project(':instrumentation-examples').projectDir = "$rootDir/examples" as File
project(':proto').projectDir = "$rootDir/proto" as File
project(':shared').projectDir = "$rootDir/shared" as File