Skip to content

Commit a0d4f2c

Browse files
committed
Report version from main
This allows running the agent as an executable jar to report the version number. Also repot version scan errors better.
1 parent 73f9dc8 commit a0d4f2c

9 files changed

Lines changed: 76 additions & 51 deletions

File tree

buildSrc/src/main/groovy/VersionScanPlugin.groovy

Lines changed: 32 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import org.eclipse.aether.spi.connector.RepositoryConnectorFactory
1515
import org.eclipse.aether.spi.connector.transport.TransporterFactory
1616
import org.eclipse.aether.transport.http.HttpTransporterFactory
1717
import org.eclipse.aether.version.Version
18+
import org.gradle.api.GradleException
1819
import org.gradle.api.Plugin
1920
import org.gradle.api.Project
2021
import org.objectweb.asm.ClassReader
@@ -138,41 +139,41 @@ class VersionScanPlugin implements Plugin<Project> {
138139
if (!verifyPresent.isEmpty() || !verifyMissing.isEmpty()) {
139140
def verifyVersionScan = project.task('verifyVersionScan') {
140141
description = "Validates that the configured classes and methods are only present where expected."
141-
doLast {
142-
// This may already be done by the report task, but repeating for good measure.
143-
keyPresent.get().removeAll(allExclude)
144-
keyMissing.get().removeAll(allInclude)
145-
146-
assert keyPresent.get() != [] || keyMissing.get() != []
147-
148-
def errors = []
149-
for (String className : verifyPresent.keySet()) {
150-
if (project.versionScan.scanMethods && verifyPresent.get(className) == null) {
151-
throw new AssertionError("When 'scanMethods' is enabled, a method must be configured for '$className'")
152-
} else if (!project.versionScan.scanMethods && verifyPresent.get(className) != null) {
153-
throw new AssertionError("When 'scanMethods' is not enabled, configured method must be null for '$className'")
154-
}
155-
156-
String identifier = project.versionScan.scanMethods ? "$className|${verifyPresent.get(className)}" : className
157-
if (!keyPresent.get().contains(identifier)) {
158-
errors << "not a 'keyPresent' identifier: $identifier"
159-
}
160-
}
161-
for (String className : verifyMissing) {
162-
if (!keyMissing.get().contains(className)) {
163-
errors << "not a 'keyMissing' identifier: $className"
164-
}
142+
}
143+
verifyVersionScan.doLast {
144+
// This may already be done by the report task, but repeating for good measure.
145+
keyPresent.get().removeAll(allExclude)
146+
keyMissing.get().removeAll(allInclude)
147+
148+
assert keyPresent.get() != [] || keyMissing.get() != []
149+
150+
def errors = []
151+
for (String className : verifyPresent.keySet()) {
152+
if (project.versionScan.scanMethods && verifyPresent.get(className) == null) {
153+
throw new AssertionError("When 'scanMethods' is enabled, a method must be configured for '$className'")
154+
} else if (!project.versionScan.scanMethods && verifyPresent.get(className) != null) {
155+
throw new AssertionError("When 'scanMethods' is not enabled, configured method must be null for '$className'")
165156
}
166-
errors.each {
167-
System.err.println "Error for $group:$module - $it"
157+
158+
String identifier = project.versionScan.scanMethods ? "$className|${verifyPresent.get(className)}" : className
159+
if (!keyPresent.get().contains(identifier)) {
160+
errors << "not a 'keyPresent' identifier: $identifier"
168161
}
169-
if (!errors.isEmpty()) {
170-
throw new AssertionError("Version scan verification failed.\n" +
171-
"Errors listed above are likely the result of a new module " +
172-
"being published to Maven, not a code change in this repo.\n" +
173-
"This does mean a fix should be made though to 'dd-trace-supported-framework.yaml'.")
162+
}
163+
for (String className : verifyMissing) {
164+
if (!keyMissing.get().contains(className)) {
165+
errors << "not a 'keyMissing' identifier: $className"
174166
}
175167
}
168+
errors.each {
169+
logger.error "Error for $group:$module - $it"
170+
}
171+
if (!errors.isEmpty()) {
172+
throw new GradleException("Version scan verification failed.\n" +
173+
"Errors listed above are likely the result of a new module " +
174+
"being published to Maven, not a code change in this repo.\n" +
175+
"This does mean a fix should be made though to 'dd-trace-supported-framework.yaml'.")
176+
}
176177
}
177178

178179
if (project.gradle.startParameter.taskNames.contains('scanVersions')) {

dd-java-agent/dd-java-agent.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ jar {
7878

7979
manifest {
8080
attributes(
81+
"Main-Class": "com.datadoghq.trace.agent.DDJavaAgentInfo",
8182
// I don't think we want to define this since we can't really load after startup:
8283
//"Agent-Class": "com.datadoghq.trace.agent.AnnotationsTracingAgent",
8384
"Premain-Class": "com.datadoghq.trace.agent.AnnotationsTracingAgent",

dd-java-agent/src/main/java/com/datadoghq/trace/agent/DDJavaAgentInfo.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,19 @@ public class DDJavaAgentInfo {
1616
final BufferedReader br =
1717
new BufferedReader(
1818
new InputStreamReader(
19-
DDJavaAgentInfo.class.getResourceAsStream("dd-java-agent.version"), "UTF-8"));
19+
DDJavaAgentInfo.class.getResourceAsStream("/dd-java-agent.version"), "UTF-8"));
2020
for (int c = br.read(); c != -1; c = br.read()) sb.append((char) c);
2121

2222
v = sb.toString().trim();
2323
} catch (final Exception e) {
24+
e.printStackTrace();
2425
v = "unknown";
2526
}
2627
VERSION = v;
2728
log.info("dd-java-agent - version: {}", v);
2829
}
30+
31+
public static void main(String... args) {
32+
System.out.println(VERSION);
33+
}
2934
}

dd-trace-annotations/src/main/java/com/datadoghq/trace/DDTraceAnnotationsInfo.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public class DDTraceAnnotationsInfo {
1616
final BufferedReader br =
1717
new BufferedReader(
1818
new InputStreamReader(
19-
DDTraceAnnotationsInfo.class.getResourceAsStream("dd-trace-annotations.version"),
19+
DDTraceAnnotationsInfo.class.getResourceAsStream("/dd-trace-annotations.version"),
2020
"UTF-8"));
2121
for (int c = br.read(); c != -1; c = br.read()) sb.append((char) c);
2222

@@ -27,4 +27,8 @@ public class DDTraceAnnotationsInfo {
2727
VERSION = v;
2828
log.info("dd-trace-annotations - version: {}", v);
2929
}
30+
31+
public static void main(String... args) {
32+
System.out.println(VERSION);
33+
}
3034
}

dd-trace-examples/rest-spark/rest-spark.gradle

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
plugins {
2+
id "com.github.johnrengelman.shadow" version "2.0.1"
3+
}
4+
15
apply plugin: 'application'
26
apply from: "${rootDir}/gradle/java.gradle"
37
apply from: "${rootDir}/gradle/jacoco.gradle"
@@ -23,6 +27,16 @@ dependencies {
2327
compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.25'
2428
}
2529

30+
jar {
31+
manifest {
32+
attributes 'Main-Class': 'com.datadoghq.example.restspark.SparkApplication'
33+
}
34+
}
35+
36+
shadowJar {
37+
mergeServiceFiles()
38+
}
39+
2640
task wrapper(type: Wrapper) {
2741
gradleVersion = '4.0'
2842
}

dd-trace-java.gradle

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -30,25 +30,20 @@ apply from: "${rootDir}/gradle/publish.gradle"
3030
// Source: https://github.com/ratpack/ratpack/blob/master/ratpack.gradle#L101
3131
task bintrayPublish() {
3232
doLast {
33-
if (!project.hasProperty("bintrayApiKey")) {
34-
throw new InvalidUserDataException("You must provide bintrayApiKey")
33+
if (!project.hasProperty("bintrayApiKey") || bintrayApiKey.length() < 20) {
34+
throw new InvalidUserDataException("You must provide a valid bintrayApiKey")
3535
}
3636

37-
if (!project.hasProperty('buildNumber')) {
38-
throw new GradleException("Must provide buildNumber of a release from https://oss.jfrog.org/artifactory/webapp/#/builds/dd-trace-java")
37+
if (!project.hasProperty('buildNumber') || !"$buildNumber".isInteger()) {
38+
throw new TaskExecutionException("Must provide buildNumber of a release from https://oss.jfrog.org/artifactory/webapp/#/builds/dd-trace-java")
3939
}
4040

41-
def curl = ['curl',
42-
'-X', 'POST',
43-
"-u", "${bintrayUser}:${bintrayApiKey}",
44-
"-H", "Content-Type: application/json",
45-
"-d", """{
46-
"dryRun": "true",
47-
"targetRepo": "datadog-maven",
48-
"sourceRepos": ["oss-release-local"]
49-
}
50-
""",
51-
"https://oss.jfrog.org/api/build/distribute/dd-trace-java/$project.buildNumber"
41+
def curl = [
42+
'curl',
43+
'-X', 'POST',
44+
'-u', "${bintrayUser}:${bintrayApiKey}",
45+
'-d', '',
46+
"http://oss.jfrog.org/api/plugins/build/promote/snapshotsToBintray/dd-trace-java/$project.buildNumber"
5247
].execute()
5348
logger.info("Received response: ${curl.text}")
5449
}

dd-trace/src/main/java/com/datadoghq/trace/DDTraceInfo.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public class DDTraceInfo {
2020
final BufferedReader br =
2121
new BufferedReader(
2222
new InputStreamReader(
23-
DDTraceInfo.class.getResourceAsStream("dd-trace.version"), "UTF-8"));
23+
DDTraceInfo.class.getResourceAsStream("/dd-trace.version"), "UTF-8"));
2424
for (int c = br.read(); c != -1; c = br.read()) sb.append((char) c);
2525

2626
v = sb.toString().trim();
@@ -30,4 +30,8 @@ public class DDTraceInfo {
3030
VERSION = v;
3131
log.info("dd-trace - version: {}", v);
3232
}
33+
34+
public static void main(String... args) {
35+
System.out.println(VERSION);
36+
}
3337
}

dd-trace/src/test/groovy/com/datadoghq/trace/writer/DDApiTest.groovy

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ class DDApiTest extends Specification {
7676
requestContentType.get().type == "application/msgpack"
7777
requestHeaders.get().get("Datadog-Meta-Lang") == "java"
7878
requestHeaders.get().get("Datadog-Meta-Lang-Version") == System.getProperty("java.version", "unknown")
79-
requestHeaders.get().get("Datadog-Meta-Tracer-Version") == "unknown"
79+
requestHeaders.get().get("Datadog-Meta-Tracer-Version") == "Stubbed-Test-Version"
8080
convertList(requestBody.get()) == expectedRequestBody
8181

8282
cleanup:
@@ -175,7 +175,7 @@ class DDApiTest extends Specification {
175175
requestContentType.get().type == "application/msgpack"
176176
requestHeaders.get().get("Datadog-Meta-Lang") == "java"
177177
requestHeaders.get().get("Datadog-Meta-Lang-Version") == System.getProperty("java.version", "unknown")
178-
requestHeaders.get().get("Datadog-Meta-Tracer-Version") == "unknown"
178+
requestHeaders.get().get("Datadog-Meta-Tracer-Version") == "Stubbed-Test-Version"
179179
convertMap(requestBody.get()) == expectedRequestBody
180180

181181
cleanup:
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Stubbed-Test-Version

0 commit comments

Comments
 (0)