From e34dc8032f61c8b6c82e7fa5bfde0201dcad46b6 Mon Sep 17 00:00:00 2001 From: Alram Lechner Date: Thu, 24 May 2018 14:18:23 +0200 Subject: [PATCH 01/36] add support for custom request attributes --- README.md | 37 ++++++++++++++----- samples/README.md | 2 +- samples/in-process-linking/pom.xml | 4 +- .../inprocesslinking/InProcessLinkingApp.java | 12 ++---- samples/remotecall/parent/pom.xml | 5 +-- samples/remotecall/pom.xml | 2 +- samples/remotecall/remotecall-client/pom.xml | 2 +- samples/remotecall/remotecall-server/pom.xml | 2 +- 8 files changed, 40 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index a5e8cdc..950df04 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,7 @@ This is the official Java implementation of the [Dynatrace OneAgent SDK](https:/ * [Features](#features) * [Trace incoming and outgoing remote calls](#remoting) * [In process linking](#inprocess) + * [Add custom request attributes](#scav) * [Further reading](#furtherreading) * [Help & Support](#help) * [Release notes](#releasenotes) @@ -39,9 +40,10 @@ This is the official Java implementation of the [Dynatrace OneAgent SDK](https:/ - Dynatrace OneAgent (required versions see below) |OneAgent SDK for Java|Required OneAgent version| -|:------|:--------| -|1.1.0 |>=1.143 | -|1.0.3 |>=1.135 | +|:--------------------|:------------------------| +|1.2.0 |>=1.147 | +|1.1.0 |>=1.143 | +|1.0.3 |>=1.135 | @@ -55,7 +57,7 @@ If you want to integrate the OneAgent SDK into your application, just add the fo com.dynatrace.oneagent.sdk.java oneagent-sdk - 1.1.0 + 1.2.0 compile @@ -124,10 +126,11 @@ The feature sets differ slightly with each language implementation. More functio A more detailed specification of the features can be found in [Dynatrace OneAgent SDK](https://github.com/Dynatrace/OneAgent-SDK#features). -|Feature|Required OneAgent SDK for Java version| -|:------|:--------| -|In process linking |>=1.1.0 | -|Trace incoming and outgoing remote calls |>=1.0.3 | +|Feature |Required OneAgent SDK for Java version| +|:-----------------------------------------|:-------------------------------------| +|Custom request attributes |>=1.2.0 | +|In process linking |>=1.1.0 | +|Trace incoming and outgoing remote calls |>=1.0.3 | @@ -195,6 +198,21 @@ try { } ``` + + +### Add custom request attributes + +You can use the SDK to add custom request attributes to current traced service. Custom request attributes allow you to do easier/better filtering of your requests in Dynatrace. + +Adding custom request attributes to the currently traced service call is pretty simple. Just call one of the addCustomRequestAttribute methods with your key and value: + +```Java +oneAgentSDK.addCustomRequestAttribute("region", "EMEA"); +oneAgentSDK.addCustomRequestAttribute("salesAmount", 2500); +``` + +When no service call is being traced, the custom request attributes are dropped. + ## Further readings @@ -232,7 +250,8 @@ SLAs apply according to the customer's support level. see also https://github.com/Dynatrace/OneAgent-SDK-for-Java/releases -|Version|Description|Links| +|Version|Description |Links | |:------|:--------------------------------------|:----------------------------------------| +|1.2.0 |Added support for in-process-linking |note released| |1.1.0 |Added support for in-process-linking |[binary](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.1.0/oneagent-sdk-1.1.0.jar) [source](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.1.0/oneagent-sdk-1.1.0-sources.jar) [javadoc](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.1.0/oneagent-sdk-1.1.0-javadoc.jar)| |1.0.3 |Initial release |[binary](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.0.3/oneagent-sdk-1.0.3.jar) [source](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.0.3/oneagent-sdk-1.0.3-sources.jar) [javadoc](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.0.3/oneagent-sdk-1.0.3-javadoc.jar)| diff --git a/samples/README.md b/samples/README.md index c94f6cd..b079ed4 100644 --- a/samples/README.md +++ b/samples/README.md @@ -25,7 +25,7 @@ Check your Dynatrace environment for newly created service like that: ![remotecall-server](img/remotecall-service.png) ### Run InProcessLinking sample application -This Application shows how to in-process-linking is being sued. To run this sample you need to create a custom service for your tenant. and of course Dynatrace OneAgent must be installed. +This Application shows how to in-process-linking and custom service attributes are being used. To run this sample you need to create a custom service for your tenant - and of course Dynatrace OneAgent must be installed. - ensure you have custom service for method `startAsyncOperation` in class `com.dynatrace.oneagent.sdk.samples.inprocesslinking.InProcessLinkingApp` - run sample: `mvn exec:exec` diff --git a/samples/in-process-linking/pom.xml b/samples/in-process-linking/pom.xml index b2bc579..d8f7dcc 100644 --- a/samples/in-process-linking/pom.xml +++ b/samples/in-process-linking/pom.xml @@ -6,14 +6,14 @@ com.dynatrace.oneagent.sdk.samples.inprocesslinking in-process-linking-sample - 1.1.0 + 1.2.0 jar com.dynatrace.oneagent.sdk.java oneagent-sdk - 1.1.0 + 1.2.0 compile diff --git a/samples/in-process-linking/src/main/java/com/dynatrace/oneagent/sdk/samples/inprocesslinking/InProcessLinkingApp.java b/samples/in-process-linking/src/main/java/com/dynatrace/oneagent/sdk/samples/inprocesslinking/InProcessLinkingApp.java index eff7451..8d82c91 100644 --- a/samples/in-process-linking/src/main/java/com/dynatrace/oneagent/sdk/samples/inprocesslinking/InProcessLinkingApp.java +++ b/samples/in-process-linking/src/main/java/com/dynatrace/oneagent/sdk/samples/inprocesslinking/InProcessLinkingApp.java @@ -1,7 +1,5 @@ package com.dynatrace.oneagent.sdk.samples.inprocesslinking; -import java.io.BufferedReader; - /* * Copyright 2018 Dynatrace LLC * @@ -19,13 +17,8 @@ */ import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; import java.net.URL; import java.sql.SQLException; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; @@ -107,7 +100,10 @@ private String startAsyncOperation() throws IOException, ClassNotFoundException, // e. g.: https://github.com/Dynatrace/OneAgent-SDK-for-Java/releases/tag/v1.0.3 String location = url.getHeaderField("Location"); - String latestVersion = location.substring(location.lastIndexOf('/')+1); + String latestVersion = location.substring(location.lastIndexOf('/') + 1); + + // tag this request using the found SDK version: + oneAgentSdk.addCustomRequestAttribute("oneagentsdk.java.version", latestVersion); // download the big release archive asynchronously ... UrlDownloadItem asyncWorkItem = new UrlDownloadItem( diff --git a/samples/remotecall/parent/pom.xml b/samples/remotecall/parent/pom.xml index 038c009..a32ef25 100644 --- a/samples/remotecall/parent/pom.xml +++ b/samples/remotecall/parent/pom.xml @@ -6,15 +6,14 @@ com.dynatrace.oneagent.sdk.samples.remoting parent - 1.1.0 + 1.2.0 pom - com.dynatrace.oneagent.sdk.java oneagent-sdk - 1.1.0 + 1.2.0 compile diff --git a/samples/remotecall/pom.xml b/samples/remotecall/pom.xml index 73b0e51..aed81dc 100644 --- a/samples/remotecall/pom.xml +++ b/samples/remotecall/pom.xml @@ -6,7 +6,7 @@ com.dynatrace.oneagent.sdk.samples.remoting remotecall-sample - 1.1.0 + 1.2.0 pom diff --git a/samples/remotecall/remotecall-client/pom.xml b/samples/remotecall/remotecall-client/pom.xml index d888700..5a71fbb 100644 --- a/samples/remotecall/remotecall-client/pom.xml +++ b/samples/remotecall/remotecall-client/pom.xml @@ -7,7 +7,7 @@ com.dynatrace.oneagent.sdk.samples.remoting parent - 1.1.0 + 1.2.0 ../parent/pom.xml diff --git a/samples/remotecall/remotecall-server/pom.xml b/samples/remotecall/remotecall-server/pom.xml index 3381a0c..5b16126 100644 --- a/samples/remotecall/remotecall-server/pom.xml +++ b/samples/remotecall/remotecall-server/pom.xml @@ -7,7 +7,7 @@ com.dynatrace.oneagent.sdk.samples.remoting parent - 1.1.0 + 1.2.0 ../parent/pom.xml From 118de5f65c72f284de7796f6aa9d0e20c5401be2 Mon Sep 17 00:00:00 2001 From: Alram Lechner Date: Thu, 24 May 2018 14:58:31 +0200 Subject: [PATCH 02/36] added source updated javadoc --- docs/META-INF/MANIFEST.MF | 2 - docs/allclasses-frame.html | 6 +- docs/allclasses-noframe.html | 6 +- .../oneagent/sdk/OneAgentSDKFactory.html | 8 +- .../oneagent/sdk/api/InProcessLink.html | 8 +- .../oneagent/sdk/api/InProcessLinkTracer.html | 8 +- .../sdk/api/IncomingRemoteCallTracer.html | 8 +- .../oneagent/sdk/api/IncomingTaggable.html | 8 +- .../oneagent/sdk/api/LoggingCallback.html | 8 +- .../oneagent/sdk/api/OneAgentSDK.html | 85 ++++++++- .../sdk/api/OutgoingRemoteCallTracer.html | 8 +- .../oneagent/sdk/api/OutgoingTaggable.html | 8 +- .../dynatrace/oneagent/sdk/api/Tracer.html | 8 +- .../oneagent/sdk/api/enums/ChannelType.html | 8 +- .../oneagent/sdk/api/enums/SDKState.html | 8 +- .../oneagent/sdk/api/enums/package-frame.html | 6 +- .../sdk/api/enums/package-summary.html | 8 +- .../oneagent/sdk/api/enums/package-tree.html | 10 +- .../oneagent/sdk/api/package-frame.html | 6 +- .../oneagent/sdk/api/package-summary.html | 8 +- .../oneagent/sdk/api/package-tree.html | 8 +- .../dynatrace/oneagent/sdk/package-frame.html | 6 +- .../oneagent/sdk/package-summary.html | 8 +- .../dynatrace/oneagent/sdk/package-tree.html | 8 +- docs/constant-values.html | 8 +- docs/deprecated-list.html | 8 +- docs/help-doc.html | 8 +- docs/index-all.html | 26 ++- docs/index.html | 4 +- docs/overview-frame.html | 6 +- docs/overview-summary.html | 10 +- docs/overview-tree.html | 8 +- .../oneagent/sdk/OneAgentSDKFactory.java | 38 ++++ .../oneagent/sdk/api/InProcessLink.java | 26 +++ .../oneagent/sdk/api/InProcessLinkTracer.java | 26 +++ .../sdk/api/IncomingRemoteCallTracer.java | 35 ++++ .../oneagent/sdk/api/IncomingTaggable.java | 45 +++++ .../oneagent/sdk/api/LoggingCallback.java | 43 +++++ .../oneagent/sdk/api/OneAgentSDK.java | 137 ++++++++++++++ .../sdk/api/OutgoingRemoteCallTracer.java | 37 ++++ .../oneagent/sdk/api/OutgoingTaggable.java | 43 +++++ .../dynatrace/oneagent/sdk/api/Tracer.java | 86 +++++++++ .../oneagent/sdk/api/enums/ChannelType.java | 38 ++++ .../oneagent/sdk/api/enums/SDKState.java | 45 +++++ .../sdk/impl/OneAgentSDKFactoryImpl.java | 78 ++++++++ .../sdk/impl/SDKInstanceProvider.java | 29 +++ .../sdk/impl/noop/InProcessLinkNoop.java | 24 +++ .../impl/noop/InProcessLinkTracerNoop.java | 24 +++ .../oneagent/sdk/impl/noop/NodeNoop.java | 38 ++++ .../sdk/impl/noop/OneAgentSDKNoop.java | 79 ++++++++ .../impl/noop/RemoteCallClientTracerNoop.java | 45 +++++ .../impl/noop/RemoteCallServerTracerNoop.java | 39 ++++ .../sdk/impl/proxy/InProcessLinkImpl.java | 31 ++++ .../impl/proxy/InProcessLinkTracerProxy.java | 26 +++ .../sdk/impl/proxy/OneAgentSDKProxy.java | 141 ++++++++++++++ .../sdk/impl/proxy/RemoteCallClientProxy.java | 40 ++++ .../sdk/impl/proxy/RemoteCallServerProxy.java | 41 +++++ .../impl/proxy/SDK2AgentInternalApiProxy.java | 172 ++++++++++++++++++ .../sdk/impl/proxy/TraceableProxy.java | 53 ++++++ .../oneagent/sdk/impl/proxy/package-info.java | 20 ++ 60 files changed, 1690 insertions(+), 122 deletions(-) delete mode 100644 docs/META-INF/MANIFEST.MF create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/api/InProcessLink.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/api/IncomingTaggable.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/api/LoggingCallback.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/api/OneAgentSDK.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/api/Tracer.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/api/enums/ChannelType.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/api/enums/SDKState.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/impl/OneAgentSDKFactoryImpl.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/impl/SDKInstanceProvider.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/impl/noop/InProcessLinkNoop.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/impl/noop/InProcessLinkTracerNoop.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/impl/noop/NodeNoop.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OneAgentSDKNoop.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/impl/noop/RemoteCallClientTracerNoop.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/impl/noop/RemoteCallServerTracerNoop.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/InProcessLinkImpl.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/InProcessLinkTracerProxy.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OneAgentSDKProxy.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/RemoteCallClientProxy.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/RemoteCallServerProxy.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/SDK2AgentInternalApiProxy.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/TraceableProxy.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/package-info.java diff --git a/docs/META-INF/MANIFEST.MF b/docs/META-INF/MANIFEST.MF deleted file mode 100644 index 59499bc..0000000 --- a/docs/META-INF/MANIFEST.MF +++ /dev/null @@ -1,2 +0,0 @@ -Manifest-Version: 1.0 - diff --git a/docs/allclasses-frame.html b/docs/allclasses-frame.html index 456c13b..e83b6c9 100644 --- a/docs/allclasses-frame.html +++ b/docs/allclasses-frame.html @@ -2,12 +2,12 @@ - + -All Classes (sdk 1.1.0 API) +All Classes (sdk 1.2.0 API) - + diff --git a/docs/allclasses-noframe.html b/docs/allclasses-noframe.html index e8f5ced..b0a0dbc 100644 --- a/docs/allclasses-noframe.html +++ b/docs/allclasses-noframe.html @@ -2,12 +2,12 @@ - + -All Classes (sdk 1.1.0 API) +All Classes (sdk 1.2.0 API) - + diff --git a/docs/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.html b/docs/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.html index 8e5f9a3..36f7b0c 100644 --- a/docs/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.html +++ b/docs/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.html @@ -2,12 +2,12 @@ - + -OneAgentSDKFactory (sdk 1.1.0 API) +OneAgentSDKFactory (sdk 1.2.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="OneAgentSDKFactory (sdk 1.1.0 API)"; + parent.document.title="OneAgentSDKFactory (sdk 1.2.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/InProcessLink.html b/docs/com/dynatrace/oneagent/sdk/api/InProcessLink.html index aad6b0b..5a52290 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/InProcessLink.html +++ b/docs/com/dynatrace/oneagent/sdk/api/InProcessLink.html @@ -2,12 +2,12 @@ - + -InProcessLink (sdk 1.1.0 API) +InProcessLink (sdk 1.2.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="InProcessLink (sdk 1.1.0 API)"; + parent.document.title="InProcessLink (sdk 1.2.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.html b/docs/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.html index e812bdc..4dabbab 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.html +++ b/docs/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.html @@ -2,12 +2,12 @@ - + -InProcessLinkTracer (sdk 1.1.0 API) +InProcessLinkTracer (sdk 1.2.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="InProcessLinkTracer (sdk 1.1.0 API)"; + parent.document.title="InProcessLinkTracer (sdk 1.2.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.html b/docs/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.html index 091b8ba..dbf5a4f 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.html +++ b/docs/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.html @@ -2,12 +2,12 @@ - + -IncomingRemoteCallTracer (sdk 1.1.0 API) +IncomingRemoteCallTracer (sdk 1.2.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="IncomingRemoteCallTracer (sdk 1.1.0 API)"; + parent.document.title="IncomingRemoteCallTracer (sdk 1.2.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/IncomingTaggable.html b/docs/com/dynatrace/oneagent/sdk/api/IncomingTaggable.html index dc63092..ee532b9 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/IncomingTaggable.html +++ b/docs/com/dynatrace/oneagent/sdk/api/IncomingTaggable.html @@ -2,12 +2,12 @@ - + -IncomingTaggable (sdk 1.1.0 API) +IncomingTaggable (sdk 1.2.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="IncomingTaggable (sdk 1.1.0 API)"; + parent.document.title="IncomingTaggable (sdk 1.2.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/LoggingCallback.html b/docs/com/dynatrace/oneagent/sdk/api/LoggingCallback.html index 1618523..32f7f30 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/LoggingCallback.html +++ b/docs/com/dynatrace/oneagent/sdk/api/LoggingCallback.html @@ -2,12 +2,12 @@ - + -LoggingCallback (sdk 1.1.0 API) +LoggingCallback (sdk 1.2.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="LoggingCallback (sdk 1.1.0 API)"; + parent.document.title="LoggingCallback (sdk 1.2.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/OneAgentSDK.html b/docs/com/dynatrace/oneagent/sdk/api/OneAgentSDK.html index 2154cc0..1a232ab 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/OneAgentSDK.html +++ b/docs/com/dynatrace/oneagent/sdk/api/OneAgentSDK.html @@ -2,12 +2,12 @@ - + -OneAgentSDK (sdk 1.1.0 API) +OneAgentSDK (sdk 1.2.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="OneAgentSDK (sdk 1.1.0 API)"; + parent.document.title="OneAgentSDK (sdk 1.2.0 API)"; } } @@ -120,6 +120,33 @@

+ void +addCustomRequestAttribute(java.lang.String key, + double value) + +
+          Does exactly the same as addCustomRequestAttribute(String, String), but request-attribute type double. + + + + void +addCustomRequestAttribute(java.lang.String key, + long value) + +
+          Does exactly the same as addCustomRequestAttribute(String, String), but request-attribute type long. + + + + void +addCustomRequestAttribute(java.lang.String key, + java.lang.String value) + +
+          Adds a custom request attribute to currently traced service call. + + +  InProcessLink createInProcessLink() @@ -262,6 +289,56 @@


+

+addCustomRequestAttribute

+
+void addCustomRequestAttribute(java.lang.String key,
+                               java.lang.String value)
+
+
Adds a custom request attribute to currently traced service call. Might be called multiple times, to add more than one attribute. + Check via setLoggingCallback(LoggingCallback) if error happened. If two attributes with same key are set, both + attribute-values are captured. +

+

+
Parameters:
key - key of the attribute. required parameter.
value - value of the attribute. required parameter.
Since:
+
1.2
+
+
+
+
+ +

+addCustomRequestAttribute

+
+void addCustomRequestAttribute(java.lang.String key,
+                               long value)
+
+
Does exactly the same as addCustomRequestAttribute(String, String), but request-attribute type long. +

+

+
Since:
+
1.2
+
+
+
+
+ +

+addCustomRequestAttribute

+
+void addCustomRequestAttribute(java.lang.String key,
+                               double value)
+
+
Does exactly the same as addCustomRequestAttribute(String, String), but request-attribute type double. +

+

+
Since:
+
1.2
+
+
+
+
+

setLoggingCallback

diff --git a/docs/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.html b/docs/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.html
index 35bbdc1..56ec2fb 100644
--- a/docs/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.html
+++ b/docs/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.html
@@ -2,12 +2,12 @@
 
 
 
-
+
 
-OutgoingRemoteCallTracer (sdk 1.1.0 API)
+OutgoingRemoteCallTracer (sdk 1.2.0 API)
 
 
-
+
 
 
 
@@ -15,7 +15,7 @@
 function windowTitle()
 {
     if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="OutgoingRemoteCallTracer (sdk 1.1.0 API)";
+        parent.document.title="OutgoingRemoteCallTracer (sdk 1.2.0 API)";
     }
 }
 
diff --git a/docs/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.html b/docs/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.html
index dc3414e..b3042c1 100644
--- a/docs/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.html
+++ b/docs/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.html
@@ -2,12 +2,12 @@
 
 
 
-
+
 
-OutgoingTaggable (sdk 1.1.0 API)
+OutgoingTaggable (sdk 1.2.0 API)
 
 
-
+
 
 
 
@@ -15,7 +15,7 @@
 function windowTitle()
 {
     if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="OutgoingTaggable (sdk 1.1.0 API)";
+        parent.document.title="OutgoingTaggable (sdk 1.2.0 API)";
     }
 }
 
diff --git a/docs/com/dynatrace/oneagent/sdk/api/Tracer.html b/docs/com/dynatrace/oneagent/sdk/api/Tracer.html
index f375cb2..418aa28 100644
--- a/docs/com/dynatrace/oneagent/sdk/api/Tracer.html
+++ b/docs/com/dynatrace/oneagent/sdk/api/Tracer.html
@@ -2,12 +2,12 @@
 
 
 
-
+
 
-Tracer (sdk 1.1.0 API)
+Tracer (sdk 1.2.0 API)
 
 
-
+
 
 
 
@@ -15,7 +15,7 @@
 function windowTitle()
 {
     if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Tracer (sdk 1.1.0 API)";
+        parent.document.title="Tracer (sdk 1.2.0 API)";
     }
 }
 
diff --git a/docs/com/dynatrace/oneagent/sdk/api/enums/ChannelType.html b/docs/com/dynatrace/oneagent/sdk/api/enums/ChannelType.html
index 6fc39c1..f608a20 100644
--- a/docs/com/dynatrace/oneagent/sdk/api/enums/ChannelType.html
+++ b/docs/com/dynatrace/oneagent/sdk/api/enums/ChannelType.html
@@ -2,12 +2,12 @@
 
 
 
-
+
 
-ChannelType (sdk 1.1.0 API)
+ChannelType (sdk 1.2.0 API)
 
 
-
+
 
 
 
@@ -15,7 +15,7 @@
 function windowTitle()
 {
     if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ChannelType (sdk 1.1.0 API)";
+        parent.document.title="ChannelType (sdk 1.2.0 API)";
     }
 }
 
diff --git a/docs/com/dynatrace/oneagent/sdk/api/enums/SDKState.html b/docs/com/dynatrace/oneagent/sdk/api/enums/SDKState.html
index 00651f6..ff49468 100644
--- a/docs/com/dynatrace/oneagent/sdk/api/enums/SDKState.html
+++ b/docs/com/dynatrace/oneagent/sdk/api/enums/SDKState.html
@@ -2,12 +2,12 @@
 
 
 
-
+
 
-SDKState (sdk 1.1.0 API)
+SDKState (sdk 1.2.0 API)
 
 
-
+
 
 
 
@@ -15,7 +15,7 @@
 function windowTitle()
 {
     if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="SDKState (sdk 1.1.0 API)";
+        parent.document.title="SDKState (sdk 1.2.0 API)";
     }
 }
 
diff --git a/docs/com/dynatrace/oneagent/sdk/api/enums/package-frame.html b/docs/com/dynatrace/oneagent/sdk/api/enums/package-frame.html
index dbc7b53..7449539 100644
--- a/docs/com/dynatrace/oneagent/sdk/api/enums/package-frame.html
+++ b/docs/com/dynatrace/oneagent/sdk/api/enums/package-frame.html
@@ -2,12 +2,12 @@
 
 
 
-
+
 
-com.dynatrace.oneagent.sdk.api.enums (sdk 1.1.0 API)
+com.dynatrace.oneagent.sdk.api.enums (sdk 1.2.0 API)
 
 
-
+
 
 
 
diff --git a/docs/com/dynatrace/oneagent/sdk/api/enums/package-summary.html b/docs/com/dynatrace/oneagent/sdk/api/enums/package-summary.html
index b693bea..f8e2ca1 100644
--- a/docs/com/dynatrace/oneagent/sdk/api/enums/package-summary.html
+++ b/docs/com/dynatrace/oneagent/sdk/api/enums/package-summary.html
@@ -2,12 +2,12 @@
 
 
 
-
+
 
-com.dynatrace.oneagent.sdk.api.enums (sdk 1.1.0 API)
+com.dynatrace.oneagent.sdk.api.enums (sdk 1.2.0 API)
 
 
-
+
 
 
 
@@ -15,7 +15,7 @@
 function windowTitle()
 {
     if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="com.dynatrace.oneagent.sdk.api.enums (sdk 1.1.0 API)";
+        parent.document.title="com.dynatrace.oneagent.sdk.api.enums (sdk 1.2.0 API)";
     }
 }
 
diff --git a/docs/com/dynatrace/oneagent/sdk/api/enums/package-tree.html b/docs/com/dynatrace/oneagent/sdk/api/enums/package-tree.html
index 6a908c9..24902b7 100644
--- a/docs/com/dynatrace/oneagent/sdk/api/enums/package-tree.html
+++ b/docs/com/dynatrace/oneagent/sdk/api/enums/package-tree.html
@@ -2,12 +2,12 @@
 
 
 
-
+
 
-com.dynatrace.oneagent.sdk.api.enums Class Hierarchy (sdk 1.1.0 API)
+com.dynatrace.oneagent.sdk.api.enums Class Hierarchy (sdk 1.2.0 API)
 
 
-
+
 
 
 
@@ -15,7 +15,7 @@
 function windowTitle()
 {
     if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="com.dynatrace.oneagent.sdk.api.enums Class Hierarchy (sdk 1.1.0 API)";
+        parent.document.title="com.dynatrace.oneagent.sdk.api.enums Class Hierarchy (sdk 1.2.0 API)";
     }
 }
 
@@ -93,7 +93,7 @@ 

  • java.lang.Object
    • java.lang.Enum<E> (implements java.lang.Comparable<T>, java.io.Serializable)
        -
      • com.dynatrace.oneagent.sdk.api.enums.ChannelType
      • com.dynatrace.oneagent.sdk.api.enums.SDKState
      +
    • com.dynatrace.oneagent.sdk.api.enums.SDKState
    • com.dynatrace.oneagent.sdk.api.enums.ChannelType

    diff --git a/docs/com/dynatrace/oneagent/sdk/api/package-frame.html b/docs/com/dynatrace/oneagent/sdk/api/package-frame.html index 33777c0..1e457ab 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/package-frame.html +++ b/docs/com/dynatrace/oneagent/sdk/api/package-frame.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api (sdk 1.1.0 API) +com.dynatrace.oneagent.sdk.api (sdk 1.2.0 API) - + diff --git a/docs/com/dynatrace/oneagent/sdk/api/package-summary.html b/docs/com/dynatrace/oneagent/sdk/api/package-summary.html index 9b89bc7..ddc2bc6 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/package-summary.html +++ b/docs/com/dynatrace/oneagent/sdk/api/package-summary.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api (sdk 1.1.0 API) +com.dynatrace.oneagent.sdk.api (sdk 1.2.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.dynatrace.oneagent.sdk.api (sdk 1.1.0 API)"; + parent.document.title="com.dynatrace.oneagent.sdk.api (sdk 1.2.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/package-tree.html b/docs/com/dynatrace/oneagent/sdk/api/package-tree.html index cef32be..cdbbc65 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/package-tree.html +++ b/docs/com/dynatrace/oneagent/sdk/api/package-tree.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api Class Hierarchy (sdk 1.1.0 API) +com.dynatrace.oneagent.sdk.api Class Hierarchy (sdk 1.2.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.dynatrace.oneagent.sdk.api Class Hierarchy (sdk 1.1.0 API)"; + parent.document.title="com.dynatrace.oneagent.sdk.api Class Hierarchy (sdk 1.2.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/package-frame.html b/docs/com/dynatrace/oneagent/sdk/package-frame.html index 50d0e2b..d12a2c2 100644 --- a/docs/com/dynatrace/oneagent/sdk/package-frame.html +++ b/docs/com/dynatrace/oneagent/sdk/package-frame.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk (sdk 1.1.0 API) +com.dynatrace.oneagent.sdk (sdk 1.2.0 API) - + diff --git a/docs/com/dynatrace/oneagent/sdk/package-summary.html b/docs/com/dynatrace/oneagent/sdk/package-summary.html index bfd92d9..d5494e3 100644 --- a/docs/com/dynatrace/oneagent/sdk/package-summary.html +++ b/docs/com/dynatrace/oneagent/sdk/package-summary.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk (sdk 1.1.0 API) +com.dynatrace.oneagent.sdk (sdk 1.2.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.dynatrace.oneagent.sdk (sdk 1.1.0 API)"; + parent.document.title="com.dynatrace.oneagent.sdk (sdk 1.2.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/package-tree.html b/docs/com/dynatrace/oneagent/sdk/package-tree.html index 1888725..262f419 100644 --- a/docs/com/dynatrace/oneagent/sdk/package-tree.html +++ b/docs/com/dynatrace/oneagent/sdk/package-tree.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk Class Hierarchy (sdk 1.1.0 API) +com.dynatrace.oneagent.sdk Class Hierarchy (sdk 1.2.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.dynatrace.oneagent.sdk Class Hierarchy (sdk 1.1.0 API)"; + parent.document.title="com.dynatrace.oneagent.sdk Class Hierarchy (sdk 1.2.0 API)"; } } diff --git a/docs/constant-values.html b/docs/constant-values.html index f8b66bb..b28d4d2 100644 --- a/docs/constant-values.html +++ b/docs/constant-values.html @@ -2,12 +2,12 @@ - + -Constant Field Values (sdk 1.1.0 API) +Constant Field Values (sdk 1.2.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Constant Field Values (sdk 1.1.0 API)"; + parent.document.title="Constant Field Values (sdk 1.2.0 API)"; } } diff --git a/docs/deprecated-list.html b/docs/deprecated-list.html index a9e2370..9473a95 100644 --- a/docs/deprecated-list.html +++ b/docs/deprecated-list.html @@ -2,12 +2,12 @@ - + -Deprecated List (sdk 1.1.0 API) +Deprecated List (sdk 1.2.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Deprecated List (sdk 1.1.0 API)"; + parent.document.title="Deprecated List (sdk 1.2.0 API)"; } } diff --git a/docs/help-doc.html b/docs/help-doc.html index e47b561..e15e319 100644 --- a/docs/help-doc.html +++ b/docs/help-doc.html @@ -2,12 +2,12 @@ - + -API Help (sdk 1.1.0 API) +API Help (sdk 1.2.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="API Help (sdk 1.1.0 API)"; + parent.document.title="API Help (sdk 1.2.0 API)"; } } diff --git a/docs/index-all.html b/docs/index-all.html index 938b52b..f2d1001 100644 --- a/docs/index-all.html +++ b/docs/index-all.html @@ -2,12 +2,12 @@ - + -Index (sdk 1.1.0 API) +Index (sdk 1.2.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Index (sdk 1.1.0 API)"; + parent.document.title="Index (sdk 1.2.0 API)"; } } @@ -77,7 +77,21 @@ -C E G I L O S T V W
    +A C E G I L O S T V W
    +

    +A

    +
    +
    addCustomRequestAttribute(String, String) - +Method in interface com.dynatrace.oneagent.sdk.api.OneAgentSDK +
    Adds a custom request attribute to currently traced service call. +
    addCustomRequestAttribute(String, long) - +Method in interface com.dynatrace.oneagent.sdk.api.OneAgentSDK +
    Does exactly the same as OneAgentSDK.addCustomRequestAttribute(String, String), but request-attribute type long. +
    addCustomRequestAttribute(String, double) - +Method in interface com.dynatrace.oneagent.sdk.api.OneAgentSDK +
    Does exactly the same as OneAgentSDK.addCustomRequestAttribute(String, String), but request-attribute type double. +
    +

    C

    @@ -210,7 +224,7 @@
    Just a warning.

    -C E G I L O S T V W +A C E G I L O S T V W diff --git a/docs/index.html b/docs/index.html index 292323d..d2c5937 100644 --- a/docs/index.html +++ b/docs/index.html @@ -2,9 +2,9 @@ - + -sdk 1.1.0 API +sdk 1.2.0 API @@ -80,7 +80,7 @@

    -sdk 1.1.0 API +sdk 1.2.0 API

    diff --git a/docs/overview-tree.html b/docs/overview-tree.html index a766ddc..d77868b 100644 --- a/docs/overview-tree.html +++ b/docs/overview-tree.html @@ -2,12 +2,12 @@ - + -Class Hierarchy (sdk 1.1.0 API) +Class Hierarchy (sdk 1.2.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Class Hierarchy (sdk 1.1.0 API)"; + parent.document.title="Class Hierarchy (sdk 1.2.0 API)"; } } diff --git a/src/main/java/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.java b/src/main/java/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.java new file mode 100644 index 0000000..8327d42 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.java @@ -0,0 +1,38 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk; + +import com.dynatrace.oneagent.sdk.api.OneAgentSDK; +import com.dynatrace.oneagent.sdk.impl.OneAgentSDKFactoryImpl; + +/** + * Entry point for customer application. + */ +public class OneAgentSDKFactory { + + /** + * Provides a {@link OneAgentSDK} instance, that has to be used to create + * transactions. It is safe to use returned {@link OneAgentSDK} instance in + * multiple threads. Every application should only create one single SDK + * instance during its lifetime. + * + * @return never null. if no OneAgent present, NOOP implementation gets + * returned. + */ + public static OneAgentSDK createInstance() { + return OneAgentSDKFactoryImpl.createInstance(); + } +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/InProcessLink.java b/src/main/java/com/dynatrace/oneagent/sdk/api/InProcessLink.java new file mode 100644 index 0000000..8dc21dc --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/InProcessLink.java @@ -0,0 +1,26 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.api; + +/** + * Represents link used for in-process-tagging. See + * {@link OneAgentSDK#createInProcessLink()} and + * {@link OneAgentSDK#traceInProcessLink(InProcessLink)} for more details. + * @since 1.1 + */ +public interface InProcessLink { + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.java b/src/main/java/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.java new file mode 100644 index 0000000..538a10f --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.java @@ -0,0 +1,26 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.api; + +/** + * Tracer used to trace in-process-linking. See + * {@link OneAgentSDK#createInProcessLink()} and + * {@link OneAgentSDK#traceInProcessLink(InProcessLink)} for more details. + * @since 1.1 + */ +public interface InProcessLinkTracer extends Tracer { + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.java b/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.java new file mode 100644 index 0000000..ec8e604 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.java @@ -0,0 +1,35 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.api; + +/** + * Represents the server side of a remote call. + * This Interface extends {@link Tracer} - it is important to respect the + * mentioned requirements when working with {@link IncomingRemoteCallTracer}. + * + */ + +public interface IncomingRemoteCallTracer extends Tracer, IncomingTaggable { + + /** + * Sets the name of the used remoting protocol. + * + * @param protocolName protocol name + * @since 1.0 + */ + void setProtocolName(String protocolName); + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingTaggable.java b/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingTaggable.java new file mode 100644 index 0000000..0d53228 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingTaggable.java @@ -0,0 +1,45 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.api; + +/** + * Common interface for server-tagging-related methods. Not to be directly used + * by SDK user. + */ +public interface IncomingTaggable { + + /** + * Consumes a tag to continue a pure path. Must be set before a node is + * being started.
    + * See {@link OutgoingTaggable} to determine how to create a tag. + * + * @param tag + * the tag in String representation - must not be null. + * @since 1.0 + */ + void setDynatraceStringTag(String tag); + + /** + * Same as {@link #setDynatraceStringTag(String)} but consumes binary + * representation of tag. + * + * @param tag + * the tag in binary representation - must not be null. + * @since 1.0 + */ + void setDynatraceByteTag(byte[] tag); + +} \ No newline at end of file diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/LoggingCallback.java b/src/main/java/com/dynatrace/oneagent/sdk/api/LoggingCallback.java new file mode 100644 index 0000000..5cad2d3 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/LoggingCallback.java @@ -0,0 +1,43 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.api; + +/** + * LoggingCallback gets called only inside a OneAgentSDK API call when + * an error/warning has occurred.
    + * Never call any SDK API inside one of these callback methods. + */ +public interface LoggingCallback { + + /** + * Just a warning. Something is missing, but OneAgent is working normal. + * + * @param message + * message text. never null. + * @since 1.0 + */ + void warn(String message); + + /** + * Something that should be done can't be done. (e. g. PurePath could + * not be started) + * + * @param message + * message text. never null. + * @since 1.0 + */ + void error(String message); +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/OneAgentSDK.java b/src/main/java/com/dynatrace/oneagent/sdk/api/OneAgentSDK.java new file mode 100644 index 0000000..25b5663 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/OneAgentSDK.java @@ -0,0 +1,137 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.api; + +import com.dynatrace.oneagent.sdk.api.enums.SDKState; +import com.dynatrace.oneagent.sdk.api.enums.ChannelType; + +/** + * Root interface contains provided Agent SDK API calls. Basically the whole API + * is designed according to following rules: + *
      + *
    • API calls never throw any exception + *
    • API calls never return null values. e. g. they returning NOOP Objects in case of any issue or required parameters are null. + *
    + * Single API calls might differ from that rules. Those rules are explicitly documented.
    + */ +public interface OneAgentSDK { + + // ***** Remote Calls (outgoing & incoming) ***** + + /** + * Traces an incoming remote call. + * + * @param serviceMethod + * name of the called remote method. (required) + * @param serviceName + * name of the remote service. (required) + * @param serviceEndpoint + * endpoint on the server side. (required) + * @return {@link IncomingRemoteCallTracer} instance to work with + * @since 1.0 + */ + IncomingRemoteCallTracer traceIncomingRemoteCall(String serviceMethod, String serviceName, String serviceEndpoint); + + /** + * Traces an outgoing remote call. + * + * @param serviceMethod + * name of the called remote method. (required) + * @param serviceName + * name of the remote service. (required) + * @param serviceEndpoint + * endpoint on the server side. (required) + * @param channelType + * communication protocol used by remote call. See {@link ChannelType} for + * available types. (required) + * @param channelEndpoint + * optional and depending on channelType: + *
      + *
    • for TCP/IP: host name/IP of the server-side (can include port) + *
    • for UNIX domain sockets: path of domain socket file + *
    • for named pipes: name of pipe + *
    + * @return {@link OutgoingRemoteCallTracer} instance to work with + * @since 1.0 + */ + OutgoingRemoteCallTracer traceOutgoingRemoteCall(String serviceMethod, String serviceName, String serviceEndpoint, + ChannelType channelType, String channelEndpoint); + + // ***** in-process-linking ***** + /** + * Creates a link for in-process-linking. + * + * @return {@link InProcessLink} instance to work with. Use it with {@link #traceInProcessLink(InProcessLink)} + * @since 1.1 + */ + InProcessLink createInProcessLink(); + + /** + * Traces the start of in-process-linking. + * + * @param inProcessLink a InProcessLink received via {@link #createInProcessLink()} + * @return {@link InProcessLinkTracer} to work with. + * @since 1.1 + */ + InProcessLinkTracer traceInProcessLink(InProcessLink inProcessLink); + + // ***** Custom request attributes ***** + /** + * Adds a custom request attribute to currently traced service call. Might be called multiple times, to add more than one attribute. + * Check via {@link #setLoggingCallback(LoggingCallback)} if error happened. If two attributes with same key are set, both + * attribute-values are captured. + * + * @param key key of the attribute. required parameter. + * @param value value of the attribute. required parameter. + * @since 1.2 + */ + void addCustomRequestAttribute(String key, String value); + + /** + * Does exactly the same as {@link #addCustomRequestAttribute(String, String)}, but request-attribute type long. + * @since 1.2 + */ + void addCustomRequestAttribute(String key, long value); + + /** + * Does exactly the same as {@link #addCustomRequestAttribute(String, String)}, but request-attribute type double. + * @since 1.2 + */ + void addCustomRequestAttribute(String key, double value); + + // ***** various ***** + + /** + * Installs a callback that gets informed, if any SDK action has failed. + * For details see {@link LoggingCallback} interface. The provided callback must + * be thread-safe, when using this {@link OneAgentSDK} instance in multi-threaded + * environments. + * + * @param loggingCallback + * may be null, to remove current callback. provided callback + * replaces any previously set callback. + * @since 1.0 + */ + void setLoggingCallback(LoggingCallback loggingCallback); + + /** + * Returns the current SDKState. See {@link SDKState} for details. + * + * @return current state - never null. + * @since 1.0 + */ + SDKState getCurrentState(); +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.java b/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.java new file mode 100644 index 0000000..2ef7207 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.java @@ -0,0 +1,37 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.api; + +/** + * Represents the client side of a remote call. + * + * This Interface extends {@link Tracer} - it is important to respect the + * mentioned requirements when working with {@link OutgoingRemoteCallTracer}. + * + */ +public interface OutgoingRemoteCallTracer extends Tracer, OutgoingTaggable { + + /** + * Sets the name of the used remoting protocol. Setting the protocol name is + * optional. + * + * @param protocolName + * protocol name. null value is ignored. + * @since 1.0 + */ + void setProtocolName(String protocolName); + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.java b/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.java new file mode 100644 index 0000000..7b015d1 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.java @@ -0,0 +1,43 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.api; + +/** + * Common interface for client-tagging-related methods. Not to be directly used + * by SDK user. + */ +public interface OutgoingTaggable { + + /** + * Creates a Dynatrace tag and returns the String representation of it. This + * tag has to be transported with the remoting protocol to the destination.
    + * See {@link IncomingTaggable} how to continue a path with provided tag on the server side. + * + * @return the tag - never null. + * @since 1.0 + */ + String getDynatraceStringTag(); + + /** + * Same as {@link #getDynatraceStringTag()}, but returning the tag as + * binary representation. + * + * @return the tag - never null. + * @since 1.0 + */ + byte[] getDynatraceByteTag(); + +} \ No newline at end of file diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/Tracer.java b/src/main/java/com/dynatrace/oneagent/sdk/api/Tracer.java new file mode 100644 index 0000000..0f1e573 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/Tracer.java @@ -0,0 +1,86 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.api; + +/** + * Common interface for timing-related methods. Not to be directly used by SDK + * user. + */ +public interface Tracer { + + /** + * starts timing of a node. Every node that has been started, must be + * ended with {@link #end()} method. Consider using the following pattern: + * + *
    +     * {@code
    +     *   tracer.start();
    +     *   try {
    +     *     // do your work
    +     *   } catch (Exception e) {
    +     *     tracer.error(e);
    +     *   } finally {
    +     *     tracer.end();
    +     *   }
    +     * }
    +     * 
    + * + * {@link #start()}, {@link #end()}, {@link #error(String)}, + * {@link #error(Throwable)} are not thread-safe. They must be called from + * the same thread where {@link #start()} has been invoked. + * + * @since 1.0 + */ + void start(); + + /** + * Ends timing of a node. Typically this method is called via finally block. + *
    + * {@link #start()}, {@link #end()}, {@link #error(String)}, + * {@link #error(Throwable)} are not thread-safe. They must be called from + * the same thread where {@link #start()} has been invoked. + * + * @since 1.0 + */ + void end(); + + /** + * Marks the node as 'exited by exception'. An additional error message + * can be provided as String.
    + * {@link #start()}, {@link #end()}, {@link #error(String)}, + * {@link #error(Throwable)} are not thread-safe. They must be called from + * the same thread where {@link #start()} has been invoked. + * + * @param message + * error message with details about occurred error (eg. return + * code). must not be null. + * @since 1.0 + */ + void error(String message); + + /** + * Marks the node as 'exited by exception'.Additional information can + * be provided as Throwable.
    + * {@link #start()}, {@link #end()}, {@link #error(String)}, + * {@link #error(Throwable)} are not thread-safe. They must be called from + * the same thread where {@link #start()} has been invoked. + * + * @param throwable + * exception, that occurred. must not null. + * @since 1.0 + */ + void error(Throwable throwable); +} \ No newline at end of file diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/enums/ChannelType.java b/src/main/java/com/dynatrace/oneagent/sdk/api/enums/ChannelType.java new file mode 100644 index 0000000..8d25fec --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/enums/ChannelType.java @@ -0,0 +1,38 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.api.enums; + +/** + * Defines the type of communication channel being used. + * + * @author Alram.Lechner + * + */ +public enum ChannelType { + + OTHER(0), TCP_IP(1), UNIX_DOMAIN_SOCKET(2), NAMED_PIPE(3), IN_PROCESS(4); + + /** constant is being used in API call to OneAgent. don't change it! */ + private final int sdkConstant; + + private ChannelType(int sdkConstant) { + this.sdkConstant = sdkConstant; + } + + public int getSDKConstant() { + return sdkConstant; + } +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/enums/SDKState.java b/src/main/java/com/dynatrace/oneagent/sdk/api/enums/SDKState.java new file mode 100644 index 0000000..e78cd3d --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/enums/SDKState.java @@ -0,0 +1,45 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.api.enums; + +/** + * Defines the possible states of the SDK. + */ +public enum SDKState { + + /** + * SDK is connected to OneAgent and capturing data. + * @since 1.0 + */ + ACTIVE, + + /** + * SDK is connected to OneAgent, but capturing is disabled.It is good practice + * to skip creating SDK transactions to save resources. The SDK state should + * be checked regularly as it may change at every point in time. + * @since 1.0 + */ + TEMPORARILY_INACTIVE, + + /** + * SDK isn't connected to OneAgent, so it will never capture data. This SDK + * state will never change during the lifetime of a JVM. It is good practice + * to never call any SDK API to save resources. + * @since 1.0 + */ + PERMANENTLY_INACTIVE; + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/OneAgentSDKFactoryImpl.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/OneAgentSDKFactoryImpl.java new file mode 100644 index 0000000..5a56296 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/OneAgentSDKFactoryImpl.java @@ -0,0 +1,78 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.impl; + +import com.dynatrace.oneagent.sdk.api.OneAgentSDK; +import com.dynatrace.oneagent.sdk.impl.noop.OneAgentSDKNoop; +import com.dynatrace.oneagent.sdk.impl.proxy.OneAgentSDKProxy; +import com.dynatrace.oneagent.sdk.impl.proxy.SDK2AgentInternalApiProxy; + +/** + * Entry point for customer application. + */ +public class OneAgentSDKFactoryImpl { + + /* increase version with every change. in case of non breaking change (to OneAgent), increase oneSdkFix only. */ + static final int oneSdkMajor = 1; + static final int oneSdkMinor = 2; + static final int oneSdkFix = 0; + + /** the only SDK instance (one for every classLoader) */ + private static OneAgentSDK oneSDK = null; + + public static boolean debugOneAgentSdkStub = false; + + private static OneAgentSDK createOneSDK() { + Object agentApiImpl = SDKInstanceProvider.create(oneSdkMajor, oneSdkMinor, oneSdkFix); + if (agentApiImpl == null) { + // OneAgent not present or not compatible + if (debugOneAgentSdkStub) { + logDebug("- no OneAgent present or OneAgent declined to work with OneAgentSdk version " + oneSdkMajor + "." + + oneSdkMinor + "." + oneSdkFix); + } + return new OneAgentSDKNoop(); + } + try { + SDK2AgentInternalApiProxy agentApi = new SDK2AgentInternalApiProxy(agentApiImpl); + Object agentSdkImpl = agentApi.oneAgentSDKFactory_createSdk(); + if (agentSdkImpl != null) { + return new OneAgentSDKProxy(agentApi, agentSdkImpl); + } + if (debugOneAgentSdkStub) { + logDebug("- OneAgent failed to provide sdk object."); + } + return new OneAgentSDKNoop(); + } catch (Throwable e) { + if (debugOneAgentSdkStub) { + logDebug("- failed to contact OneAgent: " + e.getClass().getName() + ": " + e.getMessage()); + } + return new OneAgentSDKNoop(); + } + } + + public static synchronized OneAgentSDK createInstance() { + if (oneSDK == null) { + debugOneAgentSdkStub = Boolean + .parseBoolean(System.getProperty("com.dynatrace.oneagent.sdk.debug", "false")); + oneSDK = createOneSDK(); + } + return oneSDK; + } + + public static void logDebug(String msg) { + System.out.println("[onesdk ] " + msg); + } +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/SDKInstanceProvider.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/SDKInstanceProvider.java new file mode 100644 index 0000000..c5abff3 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/SDKInstanceProvider.java @@ -0,0 +1,29 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.impl; + +/** class gets replaced by OneAgent, if OneAgent is loaded. */ +class SDKInstanceProvider { + + /** + * @return SDK Object provided by OneAgent. null if no OneAgent is loaded or declines + * to work with current SDK. + */ + static Object create(int onesdkmajor, int onesdkminor, int onesdkfix) { + return null; + } + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/InProcessLinkNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/InProcessLinkNoop.java new file mode 100644 index 0000000..a543a4a --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/InProcessLinkNoop.java @@ -0,0 +1,24 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.impl.noop; + +import com.dynatrace.oneagent.sdk.api.InProcessLink; + +public class InProcessLinkNoop implements InProcessLink { + + public final static InProcessLink INSTANCE = new InProcessLinkNoop(); + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/InProcessLinkTracerNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/InProcessLinkTracerNoop.java new file mode 100644 index 0000000..a375fe3 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/InProcessLinkTracerNoop.java @@ -0,0 +1,24 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.impl.noop; + +import com.dynatrace.oneagent.sdk.api.InProcessLinkTracer; + +public class InProcessLinkTracerNoop extends NodeNoop implements InProcessLinkTracer { + + public final static InProcessLinkTracer INSTANCE = new InProcessLinkTracerNoop(); + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/NodeNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/NodeNoop.java new file mode 100644 index 0000000..354e7d4 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/NodeNoop.java @@ -0,0 +1,38 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.impl.noop; + +import com.dynatrace.oneagent.sdk.api.Tracer; + +class NodeNoop implements Tracer { + + @Override + public void start() { + } + + @Override + public void end() { + } + + @Override + public void error(String message) { + } + + @Override + public void error(Throwable throwable) { + } + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OneAgentSDKNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OneAgentSDKNoop.java new file mode 100644 index 0000000..2a45a9f --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OneAgentSDKNoop.java @@ -0,0 +1,79 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.impl.noop; + +import com.dynatrace.oneagent.sdk.api.InProcessLink; +import com.dynatrace.oneagent.sdk.api.InProcessLinkTracer; +import com.dynatrace.oneagent.sdk.api.IncomingRemoteCallTracer; +import com.dynatrace.oneagent.sdk.api.LoggingCallback; +import com.dynatrace.oneagent.sdk.api.OneAgentSDK; +import com.dynatrace.oneagent.sdk.api.OutgoingRemoteCallTracer; +import com.dynatrace.oneagent.sdk.api.enums.SDKState; +import com.dynatrace.oneagent.sdk.api.enums.ChannelType; + +/** + * This class provides an empty (NOOP) implementation of the {@link OneAgentSDK} interface. + * + * @author Alram.Lechner + * + */ +public class OneAgentSDKNoop implements OneAgentSDK { + + // ***** Remote Calls (outgoing & incoming) ***** + @Override + public IncomingRemoteCallTracer traceIncomingRemoteCall(String remoteMethod, String remoteService, + String clientEndpoint) { + return RemoteCallServerTracerNoop.INSTANCE; + } + + @Override + public OutgoingRemoteCallTracer traceOutgoingRemoteCall(String remoteMethod, String remoteService, String serviceEndpoint, ChannelType channelType, String channelEndpoint) { + return RemoteCallClientTracerNoop.INSTANCE; + } + + // ***** Common ***** + + @Override + public void setLoggingCallback(LoggingCallback loggingCallback) { + } + + @Override + public SDKState getCurrentState() { + return SDKState.PERMANENTLY_INACTIVE; + } + + @Override + public InProcessLink createInProcessLink() { + return InProcessLinkNoop.INSTANCE; + } + + @Override + public InProcessLinkTracer traceInProcessLink(InProcessLink inProcessLink) { + return InProcessLinkTracerNoop.INSTANCE; + } + + @Override + public void addCustomRequestAttribute(String key, String value) { + } + + @Override + public void addCustomRequestAttribute(String key, long value) { + } + + @Override + public void addCustomRequestAttribute(String key, double value) { + } +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/RemoteCallClientTracerNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/RemoteCallClientTracerNoop.java new file mode 100644 index 0000000..9bed376 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/RemoteCallClientTracerNoop.java @@ -0,0 +1,45 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.impl.noop; + +import com.dynatrace.oneagent.sdk.api.OutgoingRemoteCallTracer; + +public class RemoteCallClientTracerNoop extends NodeNoop implements OutgoingRemoteCallTracer { + + public static final OutgoingRemoteCallTracer INSTANCE = new RemoteCallClientTracerNoop(); + + private static final byte[] NO_TAG_BLOB = new byte[] {}; + private static final String NO_TAG_STRING = ""; + + + private RemoteCallClientTracerNoop() { + } + + @Override + public String getDynatraceStringTag() { + return NO_TAG_STRING; + } + + @Override + public byte[] getDynatraceByteTag() { + return NO_TAG_BLOB; + } + + @Override + public void setProtocolName(String protocolName) { + } + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/RemoteCallServerTracerNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/RemoteCallServerTracerNoop.java new file mode 100644 index 0000000..c97b2c5 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/RemoteCallServerTracerNoop.java @@ -0,0 +1,39 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.impl.noop; + +import com.dynatrace.oneagent.sdk.api.IncomingRemoteCallTracer; + +public class RemoteCallServerTracerNoop extends NodeNoop implements IncomingRemoteCallTracer { + + public static final IncomingRemoteCallTracer INSTANCE = new RemoteCallServerTracerNoop(); + + private RemoteCallServerTracerNoop() { + } + + @Override + public void setDynatraceStringTag(String tag) { + } + + @Override + public void setDynatraceByteTag(byte[] tag) { + } + + @Override + public void setProtocolName(String protocolName) { + } + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/InProcessLinkImpl.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/InProcessLinkImpl.java new file mode 100644 index 0000000..198bd96 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/InProcessLinkImpl.java @@ -0,0 +1,31 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.impl.proxy; + +import com.dynatrace.oneagent.sdk.api.InProcessLink; + +class InProcessLinkImpl implements InProcessLink { + + private final Object agentProvidedLink; + + public InProcessLinkImpl(Object agentProvidedLink) { + this.agentProvidedLink = agentProvidedLink; + } + + Object getAgentProvidedLink() { + return agentProvidedLink; + } +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/InProcessLinkTracerProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/InProcessLinkTracerProxy.java new file mode 100644 index 0000000..340f21b --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/InProcessLinkTracerProxy.java @@ -0,0 +1,26 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.impl.proxy; + +import com.dynatrace.oneagent.sdk.api.InProcessLinkTracer; + +public class InProcessLinkTracerProxy extends TraceableProxy implements InProcessLinkTracer { + + InProcessLinkTracerProxy(SDK2AgentInternalApiProxy apiProxy, Object node) { + super(apiProxy, node); + } + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OneAgentSDKProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OneAgentSDKProxy.java new file mode 100644 index 0000000..aac78be --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OneAgentSDKProxy.java @@ -0,0 +1,141 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.impl.proxy; + +import com.dynatrace.oneagent.sdk.api.InProcessLink; +import com.dynatrace.oneagent.sdk.api.InProcessLinkTracer; +import com.dynatrace.oneagent.sdk.api.IncomingRemoteCallTracer; +import com.dynatrace.oneagent.sdk.api.LoggingCallback; +import com.dynatrace.oneagent.sdk.api.OneAgentSDK; +import com.dynatrace.oneagent.sdk.api.OutgoingRemoteCallTracer; +import com.dynatrace.oneagent.sdk.api.enums.SDKState; +import com.dynatrace.oneagent.sdk.api.enums.ChannelType; +import com.dynatrace.oneagent.sdk.impl.OneAgentSDKFactoryImpl; +import com.dynatrace.oneagent.sdk.impl.noop.InProcessLinkNoop; +import com.dynatrace.oneagent.sdk.impl.noop.InProcessLinkTracerNoop; +import com.dynatrace.oneagent.sdk.impl.noop.RemoteCallClientTracerNoop; +import com.dynatrace.oneagent.sdk.impl.noop.RemoteCallServerTracerNoop; + +/** TODO: check if/how class could be generated */ +public class OneAgentSDKProxy implements OneAgentSDK { + + private final SDK2AgentInternalApiProxy apiProxy; + private final Object agentSdkImpl; + + public OneAgentSDKProxy(SDK2AgentInternalApiProxy apiProxy, Object agentSdkImpl) { + this.apiProxy = apiProxy; + this.agentSdkImpl = agentSdkImpl; + } + + @Override + public IncomingRemoteCallTracer traceIncomingRemoteCall(String remoteMethod, String remoteService, String serviceEndpoint) { + Object agentObject = apiProxy.oneAgentSDK_traceIncomingRemoteCall(agentSdkImpl, remoteMethod, remoteService, serviceEndpoint); + if (agentObject == null) { + if (OneAgentSDKFactoryImpl.debugOneAgentSdkStub) { + OneAgentSDKFactoryImpl.logDebug("- OneAgent failed to provide provide object"); + } + return RemoteCallServerTracerNoop.INSTANCE; + } + return new RemoteCallServerProxy(apiProxy, agentObject); + } + + @Override + public OutgoingRemoteCallTracer traceOutgoingRemoteCall(String remoteMethod, String remoteService, + String serverEndpoint, ChannelType channelType, String remoteHost) { + int iChannelType = -1; + if (channelType != null) { + iChannelType = channelType.getSDKConstant(); + } + Object agentObject = apiProxy.oneAgentSDK_traceOutgoingRemoteCall(agentSdkImpl, remoteMethod, remoteService, serverEndpoint, iChannelType, remoteHost); + if (agentObject == null) { + if (OneAgentSDKFactoryImpl.debugOneAgentSdkStub) { + OneAgentSDKFactoryImpl.logDebug("- OneAgent failed to provide provide object"); + } + return RemoteCallClientTracerNoop.INSTANCE; + } + return new RemoteCallClientProxy(apiProxy, agentObject); + } + + @Override + public void setLoggingCallback(LoggingCallback loggingCallback) { + apiProxy.oneAgentSDK_setLoggingCallback(agentSdkImpl, loggingCallback); + } + + @Override + public SDKState getCurrentState() { + Boolean isCapturing = apiProxy.oneAgentSDK_isCapturing(agentSdkImpl); + if (isCapturing == null) { + if (OneAgentSDKFactoryImpl.debugOneAgentSdkStub) { + OneAgentSDKFactoryImpl.logDebug("- OneAgent failed to provide provide object"); + } + return SDKState.PERMANENTLY_INACTIVE; + } + if (isCapturing.booleanValue()) { + return SDKState.ACTIVE; + } else { + return SDKState.TEMPORARILY_INACTIVE; + } + } + + @Override + public InProcessLink createInProcessLink() { + Object agentProvidedLink = apiProxy.oneAgentSDK_createInProcessLink(agentSdkImpl); + if (agentProvidedLink == null) { + if (OneAgentSDKFactoryImpl.debugOneAgentSdkStub) { + OneAgentSDKFactoryImpl.logDebug("- OneAgent failed to provide InProcessLink"); + } + return InProcessLinkNoop.INSTANCE; + } + return new InProcessLinkImpl(agentProvidedLink); + } + + @Override + public InProcessLinkTracer traceInProcessLink(InProcessLink inProcessLink) { + if (inProcessLink instanceof InProcessLinkNoop) { + return InProcessLinkTracerNoop.INSTANCE; + } else if (!(inProcessLink instanceof InProcessLinkImpl)) { + if (OneAgentSDKFactoryImpl.debugOneAgentSdkStub) { + OneAgentSDKFactoryImpl.logDebug("- invalid InProcessLink object provided: " + (inProcessLink == null ? "null" : inProcessLink.getClass().getName())); + } + return InProcessLinkTracerNoop.INSTANCE; + } + + Object agentObject = apiProxy.oneAgentSDK_traceInProcessLink(agentSdkImpl, (InProcessLinkImpl) inProcessLink); + if (agentObject == null) { + if (OneAgentSDKFactoryImpl.debugOneAgentSdkStub) { + OneAgentSDKFactoryImpl.logDebug("- OneAgent failed to provide provide InProcessLinkTracer"); + } + return InProcessLinkTracerNoop.INSTANCE; + } + return new InProcessLinkTracerProxy(apiProxy, agentObject); + } + + @Override + public void addCustomRequestAttribute(String key, String value) { + apiProxy.oneAgentSDK_addCustomRequestAttribute(agentSdkImpl, key, value); + } + + @Override + public void addCustomRequestAttribute(String key, long value) { + apiProxy.oneAgentSDK_addCustomRequestAttribute(agentSdkImpl, key, value); + } + + @Override + public void addCustomRequestAttribute(String key, double value) { + apiProxy.oneAgentSDK_addCustomRequestAttribute(agentSdkImpl, key, value); + } + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/RemoteCallClientProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/RemoteCallClientProxy.java new file mode 100644 index 0000000..dc7d472 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/RemoteCallClientProxy.java @@ -0,0 +1,40 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.impl.proxy; + +import com.dynatrace.oneagent.sdk.api.OutgoingRemoteCallTracer; + +public class RemoteCallClientProxy extends TraceableProxy implements OutgoingRemoteCallTracer { + + RemoteCallClientProxy(SDK2AgentInternalApiProxy apiProxy, Object oneAgentSDK_createLocalOutgoingRemoteCall) { + super(apiProxy, oneAgentSDK_createLocalOutgoingRemoteCall); + } + + @Override + public String getDynatraceStringTag() { + return apiProxy.outgoingTaggable_getDynatraceStringTag(agentsNodeObject); + } + + @Override + public byte[] getDynatraceByteTag() { + return apiProxy.outgoingTaggable_getDynatraceByteTag(agentsNodeObject); } + + @Override + public void setProtocolName(String protocolName) { + apiProxy.outgoingRemoteCallTracer_setProtocolName(agentsNodeObject, protocolName); + } + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/RemoteCallServerProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/RemoteCallServerProxy.java new file mode 100644 index 0000000..1035c01 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/RemoteCallServerProxy.java @@ -0,0 +1,41 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.impl.proxy; + +import com.dynatrace.oneagent.sdk.api.IncomingRemoteCallTracer; + +public class RemoteCallServerProxy extends TraceableProxy implements IncomingRemoteCallTracer { + + RemoteCallServerProxy(SDK2AgentInternalApiProxy apiProxy, Object remoteCallObject) { + super(apiProxy, remoteCallObject); + } + + @Override + public void setDynatraceStringTag(String tag) { + apiProxy.incomingTaggable_setDynatraceStringTag(agentsNodeObject, tag); + } + + @Override + public void setDynatraceByteTag(byte[] tag) { + apiProxy.incomingTaggable_setDynatraceByteTag(agentsNodeObject, tag); + } + + @Override + public void setProtocolName(String protocolName) { + apiProxy.incomingRemoteCallTracer_setProtocolName(agentsNodeObject, protocolName); + } + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/SDK2AgentInternalApiProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/SDK2AgentInternalApiProxy.java new file mode 100644 index 0000000..b28aae3 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/SDK2AgentInternalApiProxy.java @@ -0,0 +1,172 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.impl.proxy; + +import java.lang.reflect.Method; + +import com.dynatrace.oneagent.sdk.impl.OneAgentSDKFactoryImpl; + +/** + * class forwards every API call to OneAgent impl via pre loaded reflection calls. + * + * @author Alram.Lechner + * + */ +public class SDK2AgentInternalApiProxy { + + private Object agentImpl; + private final Method oneAgentSDKFactory_createSdk; + private final Method oneAgentSDK_traceIncomingRemoteCall; + private final Method oneAgentSDK_traceOutgoingRemoteCall; + private final Method oneAgentSDK_createInProcessLink; + private final Method oneAgentSDK_traceInProcessLink; + private final Method oneAgentSDK_setLoggingCallback; + private final Method oneAgentSDK_isCapturing; + private final Method oneAgentSDK_addCustomRequestAttribute_1; // String, String + private final Method oneAgentSDK_addCustomRequestAttribute_2; // String, long + private final Method oneAgentSDK_addCustomRequestAttribute_3; // String, double + private final Method tracer_start; + private final Method tracer_end; + private final Method tracer_error_1; // string + private final Method tracer_error_2; // throwable + private final Method outgoingTaggable_getDynatraceStringTag; + private final Method outgoingTaggable_getDynatraceByteTag; + private final Method incomingTaggable_setDynatraceStringTag; + private final Method incomingTaggable_setDynatraceByteTag; + private final Method outgoingRemoteCallTracer_setProtocolName; + private final Method incomingRemoteCallTracer_setProtocolName; + + public SDK2AgentInternalApiProxy(Object agentImpl) throws NoSuchMethodException, SecurityException { + this.agentImpl = agentImpl; + oneAgentSDKFactory_createSdk = findMethod("oneAgentSDKFactory_createSDK", new Class[]{}); + oneAgentSDK_traceIncomingRemoteCall = findMethod("oneAgentSDK_traceIncomingRemoteCall", new Class[]{Object.class, String.class, String.class, String.class}); + oneAgentSDK_traceOutgoingRemoteCall = findMethod("oneAgentSDK_traceOutgoingRemoteCall", new Class[]{Object.class, String.class, String.class, String.class,Integer.TYPE, String.class}); + oneAgentSDK_createInProcessLink = findMethod("oneAgentSDK_createInProcessLink", new Class[]{Object.class}); + oneAgentSDK_traceInProcessLink = findMethod("oneAgentSDK_traceInProcessLink", new Class[]{Object.class, Object.class}); + oneAgentSDK_setLoggingCallback = findMethod("oneAgentSDK_setLoggingCallback", new Class[] {Object.class, Object.class}); + oneAgentSDK_isCapturing = findMethod("oneAgentSDK_isCapturing", new Class[] {Object.class}); + oneAgentSDK_addCustomRequestAttribute_1 = findMethod("oneAgentSDK_addCustomRequestAttribute", new Class[] {Object.class, String.class, String.class}); + oneAgentSDK_addCustomRequestAttribute_2 = findMethod("oneAgentSDK_addCustomRequestAttribute", new Class[] {Object.class, String.class, Long.TYPE}); + oneAgentSDK_addCustomRequestAttribute_3 = findMethod("oneAgentSDK_addCustomRequestAttribute", new Class[] {Object.class, String.class, Double.TYPE}); + tracer_start = findMethod("tracer_start", new Class[]{Object.class}); + tracer_end = findMethod("tracer_end", new Class[]{Object.class}); + tracer_error_1 = findMethod("tracer_error", new Class[]{Object.class,String.class}); + tracer_error_2 = findMethod("tracer_error", new Class[]{Object.class,Throwable.class}); + outgoingTaggable_getDynatraceStringTag = findMethod("outgoingTaggable_getDynatraceStringTag", new Class[] {Object.class}); + outgoingTaggable_getDynatraceByteTag = findMethod("outgoingTaggable_getDynatraceByteTag", new Class[] {Object.class}); + incomingTaggable_setDynatraceStringTag = findMethod("incomingTaggable_setDynatraceStringTag", new Class[] {Object.class, String.class}); + incomingTaggable_setDynatraceByteTag = findMethod("incomingTaggable_setDynatraceByteTag", new Class[] {Object.class, byte[].class}); + outgoingRemoteCallTracer_setProtocolName = findMethod("outgoingRemoteCallTracer_setProtocolName", new Class[] {Object.class, String.class}); + incomingRemoteCallTracer_setProtocolName = findMethod("incomingRemoteCallTracer_setProtocolName", new Class[] {Object.class, String.class}); + } + + private Method findMethod(String name, Class... args) throws NoSuchMethodException, SecurityException { + return agentImpl.getClass().getMethod(name, args); + } + + private Object invoke(Method m, Object... args) { + try { + return m.invoke(agentImpl, args); + } catch (Exception e) { + if (OneAgentSDKFactoryImpl.debugOneAgentSdkStub) { + e.printStackTrace(); + } + return null; + } + } + + public Object oneAgentSDKFactory_createSdk() { + return invoke(oneAgentSDKFactory_createSdk); + } + + Object oneAgentSDK_traceIncomingRemoteCall(Object sdk, String remoteMethod, String remoteService, String serviceEndpoint) { + return invoke(oneAgentSDK_traceIncomingRemoteCall, sdk, remoteMethod, remoteService, serviceEndpoint); + } + + Object oneAgentSDK_traceOutgoingRemoteCall(Object sdk, String remoteMethod, String remoteService, + String serverEndpoint, int channelType, String channelEndpoint) { + return invoke(oneAgentSDK_traceOutgoingRemoteCall, sdk, remoteMethod, remoteService, serverEndpoint, + channelType, channelEndpoint); + } + + Object oneAgentSDK_createInProcessLink(Object agentSdkImpl) { + return invoke(oneAgentSDK_createInProcessLink, agentSdkImpl); + } + + Object oneAgentSDK_traceInProcessLink(Object agentSdkImpl, InProcessLinkImpl inProcessLink) { + return invoke(oneAgentSDK_traceInProcessLink, agentSdkImpl, inProcessLink.getAgentProvidedLink()); + } + + void oneAgentSDK_setLoggingCallback(Object sdk, Object loggingCallback) { + invoke(oneAgentSDK_setLoggingCallback, sdk, loggingCallback); + } + + Boolean oneAgentSDK_isCapturing(Object sdk) { + return (Boolean) invoke(oneAgentSDK_isCapturing, sdk); + } + + public void oneAgentSDK_addCustomRequestAttribute(Object agentSdkImpl, String key, String value) { + invoke(oneAgentSDK_addCustomRequestAttribute_1, agentSdkImpl, key, value); + } + + public void oneAgentSDK_addCustomRequestAttribute(Object agentSdkImpl, String key, long value) { + invoke(oneAgentSDK_addCustomRequestAttribute_2, agentSdkImpl, key, value); + } + + public void oneAgentSDK_addCustomRequestAttribute(Object agentSdkImpl, String key, double value) { + invoke(oneAgentSDK_addCustomRequestAttribute_3, agentSdkImpl, key, value); + } + + void tracer_start(Object node) { + invoke(tracer_start, node); + } + + void tracer_end(Object node) { + invoke(tracer_end, node); + } + + void tracer_error(Object node, String message) { + invoke(tracer_error_1, node, message); + } + + void tracer_error(Object node, Throwable error) { + invoke(tracer_error_2, node, error); + } + + String outgoingTaggable_getDynatraceStringTag(Object taggableClient) { + return (String) invoke(outgoingTaggable_getDynatraceStringTag, taggableClient); + } + + byte[] outgoingTaggable_getDynatraceByteTag(Object taggableClient) { + return (byte[]) invoke(outgoingTaggable_getDynatraceByteTag, taggableClient); + } + + void incomingTaggable_setDynatraceStringTag(Object taggableServer, String tag) { + invoke(incomingTaggable_setDynatraceStringTag, taggableServer, tag); + } + + void incomingTaggable_setDynatraceByteTag(Object taggableServer, byte[] tag) { + invoke(incomingTaggable_setDynatraceByteTag, taggableServer, tag); + } + + void outgoingRemoteCallTracer_setProtocolName(Object remoteCallClient, String protocolname) { + invoke(outgoingRemoteCallTracer_setProtocolName, remoteCallClient, protocolname); + } + + void incomingRemoteCallTracer_setProtocolName(Object remoteCallServer, String protocolname) { + invoke(incomingRemoteCallTracer_setProtocolName, remoteCallServer, protocolname); + } +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/TraceableProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/TraceableProxy.java new file mode 100644 index 0000000..c28f3ac --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/TraceableProxy.java @@ -0,0 +1,53 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.impl.proxy; + +import com.dynatrace.oneagent.sdk.api.Tracer; + +abstract class TraceableProxy implements Tracer { + + protected final SDK2AgentInternalApiProxy apiProxy; + protected final Object agentsNodeObject; + + TraceableProxy(SDK2AgentInternalApiProxy apiProxy, Object node) { + this.apiProxy = apiProxy; + agentsNodeObject = node; + } + + @Override + public void start() { + apiProxy.tracer_start(agentsNodeObject); + + } + + @Override + public void end() { + apiProxy.tracer_end(agentsNodeObject); + + } + + @Override + public void error(String message) { + apiProxy.tracer_error(agentsNodeObject, message); + + } + + @Override + public void error(Throwable throwable) { + apiProxy.tracer_error(agentsNodeObject, throwable); + } + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/package-info.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/package-info.java new file mode 100644 index 0000000..6d3936f --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/package-info.java @@ -0,0 +1,20 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * internal SDK implementation. direct usage is forbidden. package provides + * proxy classes for forwarding requests to OneAgent. + */ +package com.dynatrace.oneagent.sdk.impl.proxy; From 84f895552950bacdb8463f846634405dfa461a0c Mon Sep 17 00:00:00 2001 From: Alram Lechner Date: Mon, 28 May 2018 13:42:31 +0200 Subject: [PATCH 03/36] fix typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 950df04..73d6c20 100644 --- a/README.md +++ b/README.md @@ -252,6 +252,6 @@ see also https://github.com/Dynatrace/OneAgent-SDK-for-Java/releases |Version|Description |Links | |:------|:--------------------------------------|:----------------------------------------| -|1.2.0 |Added support for in-process-linking |note released| +|1.2.0 |Added support for in-process-linking |not released| |1.1.0 |Added support for in-process-linking |[binary](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.1.0/oneagent-sdk-1.1.0.jar) [source](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.1.0/oneagent-sdk-1.1.0-sources.jar) [javadoc](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.1.0/oneagent-sdk-1.1.0-javadoc.jar)| |1.0.3 |Initial release |[binary](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.0.3/oneagent-sdk-1.0.3.jar) [source](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.0.3/oneagent-sdk-1.0.3-sources.jar) [javadoc](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.0.3/oneagent-sdk-1.0.3-javadoc.jar)| From c22fcd12521674d64e6d9a9d257a1830eed49837 Mon Sep 17 00:00:00 2001 From: Alram Lechner Date: Mon, 11 Jun 2018 15:20:06 +0200 Subject: [PATCH 04/36] update documentation add sample --- README.md | 48 ++- docs/allclasses-frame.html | 10 +- docs/allclasses-noframe.html | 10 +- .../oneagent/sdk/OneAgentSDKFactory.html | 8 +- .../oneagent/sdk/api/InProcessLink.html | 12 +- .../oneagent/sdk/api/InProcessLinkTracer.html | 8 +- .../sdk/api/IncomingRemoteCallTracer.html | 8 +- .../oneagent/sdk/api/IncomingTaggable.html | 14 +- .../sdk/api/IncomingWebRequestTracer.html | 341 ++++++++++++++++++ .../oneagent/sdk/api/LoggingCallback.html | 8 +- .../oneagent/sdk/api/OneAgentSDK.html | 114 +++++- .../sdk/api/OutgoingRemoteCallTracer.html | 8 +- .../oneagent/sdk/api/OutgoingTaggable.html | 8 +- .../dynatrace/oneagent/sdk/api/Tracer.html | 10 +- .../oneagent/sdk/api/enums/ChannelType.html | 8 +- .../oneagent/sdk/api/enums/SDKState.html | 8 +- .../oneagent/sdk/api/enums/package-frame.html | 6 +- .../sdk/api/enums/package-summary.html | 12 +- .../oneagent/sdk/api/enums/package-tree.html | 14 +- .../sdk/api/infos/WebApplicationInfo.html | 174 +++++++++ .../oneagent/sdk/api/infos/package-frame.html | 32 ++ .../sdk/api/infos/package-summary.html | 155 ++++++++ .../oneagent/sdk/api/infos/package-tree.html | 149 ++++++++ .../oneagent/sdk/api/package-frame.html | 8 +- .../oneagent/sdk/api/package-summary.html | 12 +- .../oneagent/sdk/api/package-tree.html | 10 +- .../dynatrace/oneagent/sdk/package-frame.html | 6 +- .../oneagent/sdk/package-summary.html | 8 +- .../dynatrace/oneagent/sdk/package-tree.html | 8 +- docs/constant-values.html | 36 +- docs/deprecated-list.html | 8 +- docs/help-doc.html | 8 +- docs/index-all.html | 47 ++- docs/index.html | 4 +- docs/overview-frame.html | 8 +- docs/overview-summary.html | 14 +- docs/overview-tree.html | 14 +- docs/package-list | 1 + samples/README.md | 8 + samples/img/webrequest-service.png | Bin 0 -> 44547 bytes samples/webrequest/.gitignore | 1 + samples/webrequest/pom.xml | 84 +++++ .../samples/webrequest/FakedWebserver.java | 100 +++++ .../webrequest/IncomingWebRequestApp.java | 80 ++++ .../webrequest/StdErrLoggingCallback.java | 37 ++ .../sdk/api/IncomingWebRequestTracer.java | 64 ++++ .../oneagent/sdk/api/OneAgentSDK.java | 36 +- .../sdk/api/infos/WebApplicationInfo.java | 28 ++ .../sdk/impl/OneAgentSDKFactoryImpl.java | 2 +- .../noop/IncomingWebRequestTracerNoop.java | 60 +++ .../sdk/impl/noop/OneAgentSDKNoop.java | 15 + .../sdk/impl/noop/WebApplicationInfoNoop.java | 24 ++ .../impl/proxy/IncomingWebRequestProxy.java | 63 ++++ .../sdk/impl/proxy/OneAgentSDKProxy.java | 31 ++ .../impl/proxy/SDK2AgentInternalApiProxy.java | 40 ++ .../sdk/impl/proxy/TraceableProxy.java | 4 +- .../impl/proxy/WebApplicationInfoImpl.java | 44 +++ 57 files changed, 1934 insertions(+), 144 deletions(-) create mode 100644 docs/com/dynatrace/oneagent/sdk/api/IncomingWebRequestTracer.html create mode 100644 docs/com/dynatrace/oneagent/sdk/api/infos/WebApplicationInfo.html create mode 100644 docs/com/dynatrace/oneagent/sdk/api/infos/package-frame.html create mode 100644 docs/com/dynatrace/oneagent/sdk/api/infos/package-summary.html create mode 100644 docs/com/dynatrace/oneagent/sdk/api/infos/package-tree.html create mode 100644 samples/img/webrequest-service.png create mode 100644 samples/webrequest/.gitignore create mode 100644 samples/webrequest/pom.xml create mode 100644 samples/webrequest/src/main/java/com/dynatrace/oneagent/sdk/samples/webrequest/FakedWebserver.java create mode 100644 samples/webrequest/src/main/java/com/dynatrace/oneagent/sdk/samples/webrequest/IncomingWebRequestApp.java create mode 100644 samples/webrequest/src/main/java/com/dynatrace/oneagent/sdk/samples/webrequest/StdErrLoggingCallback.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/api/IncomingWebRequestTracer.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/api/infos/WebApplicationInfo.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/impl/noop/IncomingWebRequestTracerNoop.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/impl/noop/WebApplicationInfoNoop.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/IncomingWebRequestProxy.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/WebApplicationInfoImpl.java diff --git a/README.md b/README.md index 73d6c20..e8b9477 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,7 @@ This is the official Java implementation of the [Dynatrace OneAgent SDK](https:/ * [Trace incoming and outgoing remote calls](#remoting) * [In process linking](#inprocess) * [Add custom request attributes](#scav) + * [Trace incoming web requests](#webrequests) * [Further reading](#furtherreading) * [Help & Support](#help) * [Release notes](#releasenotes) @@ -41,6 +42,7 @@ This is the official Java implementation of the [Dynatrace OneAgent SDK](https:/ |OneAgent SDK for Java|Required OneAgent version| |:--------------------|:------------------------| +|1.3.0 |>=1.149 | |1.2.0 |>=1.147 | |1.1.0 |>=1.143 | |1.0.3 |>=1.135 | @@ -57,7 +59,7 @@ If you want to integrate the OneAgent SDK into your application, just add the fo com.dynatrace.oneagent.sdk.java oneagent-sdk - 1.2.0 + 1.3.0 compile @@ -128,6 +130,7 @@ A more detailed specification of the features can be found in [Dynatrace OneAgen |Feature |Required OneAgent SDK for Java version| |:-----------------------------------------|:-------------------------------------| +|Incoming webrequests |>=1.3.0 | |Custom request attributes |>=1.2.0 | |In process linking |>=1.1.0 | |Trace incoming and outgoing remote calls |>=1.0.3 | @@ -213,6 +216,48 @@ oneAgentSDK.addCustomRequestAttribute("salesAmount", 2500); When no service call is being traced, the custom request attributes are dropped. + + +## Trace incoming web requests + +You can use the SDK to trace incoming web requests. This might be useful if Dynatrace does not support the respective web server framework or language. + +To trace any kind of incoming web request you first need to create a WebServerInfo object. The info object represents the endpoint of your web server (webservername, applicationname and context root). This object should be reused for all traced webrequests for the same application. + +```Java +WebServerInfo wsInfo = OneAgentSDK.createWebServerInfo("WebShopProduction", "CheckoutService", "/api/service/checkout"); +``` + +To trace a specific incoming web request you then need to create a Tracer object. It is important to provide all http headers from the request to the SDK by calling addRequestHeader(...). This ensures that tagging with our built-in sensor is working. + +```Java +IncomingWebRequestTracer tracer = OneAgentSDK.traceIncomingWebRequest(wsInfo,"https://www.oursupershop.com/api/service/checkout/save","POST") + +for (Entry headerField : httpRequest.getHeaders().entrySet()) { + incomingWebrequestTracer.addRequestHeader(headerField.getKey(), headerField.getValue()); +} + +for (Entry> parameterEntry : httpRequest.getParameters().entrySet()) { + for (String value : parameterEntry.getValue()) { + incomingWebrequestTracer.addParameter(parameterEntry.getKey(), value); + } +} + +incomingWebrequestTracer.setRemoteAddress(httpRequest.getRemoteHostName()); + +tracer.start(); +try { + int statusCodeReturnedToClient = processWebRequest(); + tracer.setStatusCode(statusCodeReturnedToClient); +} catch (Exception e) { + tracer.setStatusCode(500); // we expect, the container sends http 500 in case request processing throws an exception + tracer.error(e); + throw e; +} finally { + tracer.end(); +} +``` + ## Further readings @@ -252,6 +297,7 @@ see also https://github.com/Dynatrace/OneAgent-SDK-for-Java/releases |Version|Description |Links | |:------|:--------------------------------------|:----------------------------------------| +|1.3.0 |Added support for incoming webrequests |not released| |1.2.0 |Added support for in-process-linking |not released| |1.1.0 |Added support for in-process-linking |[binary](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.1.0/oneagent-sdk-1.1.0.jar) [source](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.1.0/oneagent-sdk-1.1.0-sources.jar) [javadoc](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.1.0/oneagent-sdk-1.1.0-javadoc.jar)| |1.0.3 |Initial release |[binary](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.0.3/oneagent-sdk-1.0.3.jar) [source](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.0.3/oneagent-sdk-1.0.3-sources.jar) [javadoc](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.0.3/oneagent-sdk-1.0.3-javadoc.jar)| diff --git a/docs/allclasses-frame.html b/docs/allclasses-frame.html index e83b6c9..90c2c8a 100644 --- a/docs/allclasses-frame.html +++ b/docs/allclasses-frame.html @@ -2,12 +2,12 @@ - + -All Classes (sdk 1.2.0 API) +All Classes (sdk 1.3.0 API) - + @@ -27,6 +27,8 @@
    IncomingTaggable
    +IncomingWebRequestTracer +
    InProcessLink
    InProcessLinkTracer @@ -45,6 +47,8 @@
    Tracer
    +WebApplicationInfo +
    diff --git a/docs/allclasses-noframe.html b/docs/allclasses-noframe.html index b0a0dbc..fc34028 100644 --- a/docs/allclasses-noframe.html +++ b/docs/allclasses-noframe.html @@ -2,12 +2,12 @@ - + -All Classes (sdk 1.2.0 API) +All Classes (sdk 1.3.0 API) - + @@ -27,6 +27,8 @@
    IncomingTaggable
    +IncomingWebRequestTracer +
    InProcessLink
    InProcessLinkTracer @@ -45,6 +47,8 @@
    Tracer
    +WebApplicationInfo +
    diff --git a/docs/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.html b/docs/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.html index 36f7b0c..ef8a5fc 100644 --- a/docs/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.html +++ b/docs/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.html @@ -2,12 +2,12 @@ - + -OneAgentSDKFactory (sdk 1.2.0 API) +OneAgentSDKFactory (sdk 1.3.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="OneAgentSDKFactory (sdk 1.2.0 API)"; + parent.document.title="OneAgentSDKFactory (sdk 1.3.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/InProcessLink.html b/docs/com/dynatrace/oneagent/sdk/api/InProcessLink.html index 5a52290..c517369 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/InProcessLink.html +++ b/docs/com/dynatrace/oneagent/sdk/api/InProcessLink.html @@ -2,12 +2,12 @@ - + -InProcessLink (sdk 1.2.0 API) +InProcessLink (sdk 1.3.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="InProcessLink (sdk 1.2.0 API)"; + parent.document.title="InProcessLink (sdk 1.3.0 API)"; } } @@ -54,7 +54,7 @@ PREV CLASS  + PREV CLASS   NEXT CLASS FRAMES   @@ -141,7 +141,7 @@

    PREV CLASS  + PREV CLASS   NEXT CLASS FRAMES   diff --git a/docs/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.html b/docs/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.html index 4dabbab..611e954 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.html +++ b/docs/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.html @@ -2,12 +2,12 @@ - + -InProcessLinkTracer (sdk 1.2.0 API) +InProcessLinkTracer (sdk 1.3.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="InProcessLinkTracer (sdk 1.2.0 API)"; + parent.document.title="InProcessLinkTracer (sdk 1.3.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.html b/docs/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.html index dbf5a4f..39156ba 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.html +++ b/docs/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.html @@ -2,12 +2,12 @@ - + -IncomingRemoteCallTracer (sdk 1.2.0 API) +IncomingRemoteCallTracer (sdk 1.3.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="IncomingRemoteCallTracer (sdk 1.2.0 API)"; + parent.document.title="IncomingRemoteCallTracer (sdk 1.3.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/IncomingTaggable.html b/docs/com/dynatrace/oneagent/sdk/api/IncomingTaggable.html index ee532b9..54cd5a5 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/IncomingTaggable.html +++ b/docs/com/dynatrace/oneagent/sdk/api/IncomingTaggable.html @@ -2,12 +2,12 @@ - + -IncomingTaggable (sdk 1.2.0 API) +IncomingTaggable (sdk 1.3.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="IncomingTaggable (sdk 1.2.0 API)"; + parent.document.title="IncomingTaggable (sdk 1.3.0 API)"; } } @@ -55,7 +55,7 @@  PREV CLASS  - NEXT CLASSNEXT CLASS FRAMES    NO FRAMES   @@ -91,7 +91,7 @@


    Interface IncomingTaggable

    -
    All Known Subinterfaces:
    IncomingRemoteCallTracer
    +
    All Known Subinterfaces:
    IncomingRemoteCallTracer, IncomingWebRequestTracer

    @@ -209,7 +209,7 @@

     PREV CLASS  - NEXT CLASSNEXT CLASS FRAMES    NO FRAMES   diff --git a/docs/com/dynatrace/oneagent/sdk/api/IncomingWebRequestTracer.html b/docs/com/dynatrace/oneagent/sdk/api/IncomingWebRequestTracer.html new file mode 100644 index 0000000..bd95104 --- /dev/null +++ b/docs/com/dynatrace/oneagent/sdk/api/IncomingWebRequestTracer.html @@ -0,0 +1,341 @@ + + + + + + +IncomingWebRequestTracer (sdk 1.3.0 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +com.dynatrace.oneagent.sdk.api +
    +Interface IncomingWebRequestTracer

    +
    +
    All Superinterfaces:
    IncomingTaggable, Tracer
    +
    +
    +
    +
    public interface IncomingWebRequestTracer
    extends Tracer, IncomingTaggable
    +

  • + +

    +Interface for incoming webrequest tracer. + https://github.com/Dynatrace/OneAgent-SDK#webrequests +

    + +

    +

    +
    Since:
    +
    1.3
    +
    +
    + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + voidaddParameter(java.lang.String name, + java.lang.String value) + +
    +          All HTTP parameters should be provided to this method.
    + voidaddRequestHeader(java.lang.String name, + java.lang.String value) + +
    +          All HTTP request headers should be provided to this method.
    + voidaddResponseHeader(java.lang.String name, + java.lang.String value) + +
    +          All HTTP response headers should be provided to this method.
    + voidsetRemoteAddress(java.lang.String remoteAddress) + +
    +          Validates and sets the remote IP address of the incoming web request.
    + voidsetStatusCode(int statusCode) + +
    +          Sets the HTTP response status code.
    + + + + + + + +
    Methods inherited from interface com.dynatrace.oneagent.sdk.api.Tracer
    end, error, error, start
    + + + + + + + +
    Methods inherited from interface com.dynatrace.oneagent.sdk.api.IncomingTaggable
    setDynatraceByteTag, setDynatraceStringTag
    +  +

    + + + + + + + + +
    +Method Detail
    + +

    +setRemoteAddress

    +
    +void setRemoteAddress(java.lang.String remoteAddress)
    +
    +
    Validates and sets the remote IP address of the incoming web request. This information is very useful to gain information about Load balancers, Proxies and ultimately the end user that is sending the request. +

    +

    +
    +
    +
    +
    Parameters:
    remoteAddress - remote IP address
    +
    +
    +
    + +

    +addRequestHeader

    +
    +void addRequestHeader(java.lang.String name,
    +                      java.lang.String value)
    +
    +
    All HTTP request headers should be provided to this method. Selective capturing will be done based on sensor configuration. +

    +

    +
    +
    +
    +
    Parameters:
    name - HTTP request header field name
    value - HTTP request header field value
    +
    +
    +
    + +

    +addParameter

    +
    +void addParameter(java.lang.String name,
    +                  java.lang.String value)
    +
    +
    All HTTP parameters should be provided to this method. Selective capturing will be done based on sensor configuration. +

    +

    +
    +
    +
    +
    Parameters:
    name - HTTP parameter name
    value - HTTP parameter value
    +
    +
    +
    + +

    +addResponseHeader

    +
    +void addResponseHeader(java.lang.String name,
    +                       java.lang.String value)
    +
    +
    All HTTP response headers should be provided to this method. Selective capturing will be done based on sensor configuration. +

    +

    +
    +
    +
    +
    Parameters:
    name - HTTP response header field name
    value - HTTP response header field value
    +
    +
    +
    + +

    +setStatusCode

    +
    +void setStatusCode(int statusCode)
    +
    +
    Sets the HTTP response status code. +

    +

    +
    +
    +
    +
    Parameters:
    statusCode - HTTP status code returned to client
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + + + diff --git a/docs/com/dynatrace/oneagent/sdk/api/LoggingCallback.html b/docs/com/dynatrace/oneagent/sdk/api/LoggingCallback.html index 32f7f30..81647e0 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/LoggingCallback.html +++ b/docs/com/dynatrace/oneagent/sdk/api/LoggingCallback.html @@ -2,12 +2,12 @@ - + -LoggingCallback (sdk 1.2.0 API) +LoggingCallback (sdk 1.3.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="LoggingCallback (sdk 1.2.0 API)"; + parent.document.title="LoggingCallback (sdk 1.3.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/OneAgentSDK.html b/docs/com/dynatrace/oneagent/sdk/api/OneAgentSDK.html index 1a232ab..bd806c6 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/OneAgentSDK.html +++ b/docs/com/dynatrace/oneagent/sdk/api/OneAgentSDK.html @@ -2,12 +2,12 @@ - + -OneAgentSDK (sdk 1.2.0 API) +OneAgentSDK (sdk 1.3.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="OneAgentSDK (sdk 1.2.0 API)"; + parent.document.title="OneAgentSDK (sdk 1.3.0 API)"; } } @@ -75,9 +75,9 @@ - SUMMARY: NESTED | FIELD | CONSTR | METHOD + SUMMARY: NESTED | FIELD | CONSTR | METHOD
    -DETAIL: FIELD | CONSTR | METHOD +DETAIL: FIELD | CONSTR | METHOD
    @@ -109,7 +109,24 @@


    + + + + + + + + + + +
    +Field Summary
    +static java.lang.StringDYNATRACE_HTTP_HEADERNAME + +
    +          Using this headername to transport Dynatrace tag inside an outgoing http request ensures compatibility to Dynatrace built-in sensors.
    @@ -155,6 +172,16 @@

    + WebApplicationInfo +createWebApplicationInfo(java.lang.String webServerName, + java.lang.String applicationID, + java.lang.String contextRoot) + +
    +          Initializes a WebApplicationInfo instance that is required for tracing incoming web requests. + + +  SDKState getCurrentState() @@ -181,6 +208,16 @@

    + IncomingWebRequestTracer +traceIncomingWebRequest(WebApplicationInfo webApplicationInfo, + java.lang.String url, + java.lang.String method) + +
    +          Traces an incoming web request. + + +  InProcessLinkTracer traceInProcessLink(InProcessLink inProcessLink) @@ -203,6 +240,27 @@

     

    + + + + + + + +
    +Field Detail
    + +

    +DYNATRACE_HTTP_HEADERNAME

    +
    +static final java.lang.String DYNATRACE_HTTP_HEADERNAME
    +
    +
    Using this headername to transport Dynatrace tag inside an outgoing http request ensures compatibility to Dynatrace built-in sensors. +

    +

    +
    See Also:
    Constant Field Values
    +
    + @@ -213,6 +271,46 @@

    +

    +createWebApplicationInfo

    +
    +WebApplicationInfo createWebApplicationInfo(java.lang.String webServerName,
    +                                            java.lang.String applicationID,
    +                                            java.lang.String contextRoot)
    +
    +
    Initializes a WebApplicationInfo instance that is required for tracing incoming web requests. This information determines the identity and name of the resulting Web Request service in dynatrace. + Also see https://www.dynatrace.com/support/help/server-side-services/introduction/how-does-dynatrace-detect-and-name-services/#web-request-services for detail description of the meaning of the parameters. +

    +

    +
    Parameters:
    webServerName - logical name of the web server. In case of a cluster every node in the cluster must report the same name here. + Attention: Make sure not to use the host header for this parameter. Host headers are often spoofed and contain things like google or baidoo which do not reflect your setup.
    applicationID - application ID of the web application
    contextRoot - context root of the application. + All URLs traced with the returned WebApplicationInfo, should start with provided context root. +
    Returns:
    WebApplicationInfo instance to work with
    Since:
    +
    1.3
    +
    +
    +
    +
    + +

    +traceIncomingWebRequest

    +
    +IncomingWebRequestTracer traceIncomingWebRequest(WebApplicationInfo webApplicationInfo,
    +                                                 java.lang.String url,
    +                                                 java.lang.String method)
    +
    +
    Traces an incoming web request. +

    +

    +
    Parameters:
    webApplicationInfo - information about web application
    url - (parts of a) URL, which will be parsed into: scheme, hostname/port, path & query + Note: the hostname will be resolved by the Agent at start() call
    method - HTTP request method +
    Returns:
    IncomingWebRequestTracer to work with
    Since:
    +
    1.3
    +
    +
    +
    +
    +

    traceIncomingRemoteCall

    @@ -423,9 +521,9 @@ 

    - SUMMARY: NESTED | FIELD | CONSTR | METHOD + SUMMARY: NESTED | FIELD | CONSTR | METHOD -DETAIL: FIELD | CONSTR | METHOD +DETAIL: FIELD | CONSTR | METHOD diff --git a/docs/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.html b/docs/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.html index 56ec2fb..169e190 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.html +++ b/docs/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.html @@ -2,12 +2,12 @@ - + -OutgoingRemoteCallTracer (sdk 1.2.0 API) +OutgoingRemoteCallTracer (sdk 1.3.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="OutgoingRemoteCallTracer (sdk 1.2.0 API)"; + parent.document.title="OutgoingRemoteCallTracer (sdk 1.3.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.html b/docs/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.html index b3042c1..dd7f3e1 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.html +++ b/docs/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.html @@ -2,12 +2,12 @@ - + -OutgoingTaggable (sdk 1.2.0 API) +OutgoingTaggable (sdk 1.3.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="OutgoingTaggable (sdk 1.2.0 API)"; + parent.document.title="OutgoingTaggable (sdk 1.3.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/Tracer.html b/docs/com/dynatrace/oneagent/sdk/api/Tracer.html index 418aa28..2a1e13e 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/Tracer.html +++ b/docs/com/dynatrace/oneagent/sdk/api/Tracer.html @@ -2,12 +2,12 @@ - + -Tracer (sdk 1.2.0 API) +Tracer (sdk 1.3.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Tracer (sdk 1.2.0 API)"; + parent.document.title="Tracer (sdk 1.3.0 API)"; } } @@ -91,7 +91,7 @@


    Interface Tracer

    -
    All Known Subinterfaces:
    IncomingRemoteCallTracer, InProcessLinkTracer, OutgoingRemoteCallTracer
    +
    All Known Subinterfaces:
    IncomingRemoteCallTracer, IncomingWebRequestTracer, InProcessLinkTracer, OutgoingRemoteCallTracer

    diff --git a/docs/com/dynatrace/oneagent/sdk/api/enums/ChannelType.html b/docs/com/dynatrace/oneagent/sdk/api/enums/ChannelType.html index f608a20..2c4bfe4 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/enums/ChannelType.html +++ b/docs/com/dynatrace/oneagent/sdk/api/enums/ChannelType.html @@ -2,12 +2,12 @@ - + -ChannelType (sdk 1.2.0 API) +ChannelType (sdk 1.3.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="ChannelType (sdk 1.2.0 API)"; + parent.document.title="ChannelType (sdk 1.3.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/enums/SDKState.html b/docs/com/dynatrace/oneagent/sdk/api/enums/SDKState.html index ff49468..670c81e 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/enums/SDKState.html +++ b/docs/com/dynatrace/oneagent/sdk/api/enums/SDKState.html @@ -2,12 +2,12 @@ - + -SDKState (sdk 1.2.0 API) +SDKState (sdk 1.3.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="SDKState (sdk 1.2.0 API)"; + parent.document.title="SDKState (sdk 1.3.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/enums/package-frame.html b/docs/com/dynatrace/oneagent/sdk/api/enums/package-frame.html index 7449539..989ed4c 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/enums/package-frame.html +++ b/docs/com/dynatrace/oneagent/sdk/api/enums/package-frame.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api.enums (sdk 1.2.0 API) +com.dynatrace.oneagent.sdk.api.enums (sdk 1.3.0 API) - + diff --git a/docs/com/dynatrace/oneagent/sdk/api/enums/package-summary.html b/docs/com/dynatrace/oneagent/sdk/api/enums/package-summary.html index f8e2ca1..b541ed4 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/enums/package-summary.html +++ b/docs/com/dynatrace/oneagent/sdk/api/enums/package-summary.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api.enums (sdk 1.2.0 API) +com.dynatrace.oneagent.sdk.api.enums (sdk 1.3.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.dynatrace.oneagent.sdk.api.enums (sdk 1.2.0 API)"; + parent.document.title="com.dynatrace.oneagent.sdk.api.enums (sdk 1.3.0 API)"; } } @@ -55,7 +55,7 @@  PREV PACKAGE  - NEXT PACKAGENEXT PACKAGE FRAMES    NO FRAMES   @@ -131,7 +131,7 @@

     PREV PACKAGE  - NEXT PACKAGENEXT PACKAGE FRAMES    NO FRAMES   diff --git a/docs/com/dynatrace/oneagent/sdk/api/enums/package-tree.html b/docs/com/dynatrace/oneagent/sdk/api/enums/package-tree.html index 24902b7..ef2821c 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/enums/package-tree.html +++ b/docs/com/dynatrace/oneagent/sdk/api/enums/package-tree.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api.enums Class Hierarchy (sdk 1.2.0 API) +com.dynatrace.oneagent.sdk.api.enums Class Hierarchy (sdk 1.3.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.dynatrace.oneagent.sdk.api.enums Class Hierarchy (sdk 1.2.0 API)"; + parent.document.title="com.dynatrace.oneagent.sdk.api.enums Class Hierarchy (sdk 1.3.0 API)"; } } @@ -55,7 +55,7 @@  PREV  - NEXTNEXT FRAMES    NO FRAMES   @@ -93,7 +93,7 @@

  • java.lang.Object
    • java.lang.Enum<E> (implements java.lang.Comparable<T>, java.io.Serializable)
        -
      • com.dynatrace.oneagent.sdk.api.enums.SDKState
      • com.dynatrace.oneagent.sdk.api.enums.ChannelType
      +
    • com.dynatrace.oneagent.sdk.api.enums.ChannelType
    • com.dynatrace.oneagent.sdk.api.enums.SDKState

    @@ -126,7 +126,7 @@

     PREV  - NEXTNEXT FRAMES    NO FRAMES   diff --git a/docs/com/dynatrace/oneagent/sdk/api/infos/WebApplicationInfo.html b/docs/com/dynatrace/oneagent/sdk/api/infos/WebApplicationInfo.html new file mode 100644 index 0000000..9fb24c3 --- /dev/null +++ b/docs/com/dynatrace/oneagent/sdk/api/infos/WebApplicationInfo.html @@ -0,0 +1,174 @@ + + + + + + +WebApplicationInfo (sdk 1.3.0 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +com.dynatrace.oneagent.sdk.api.infos +
    +Interface WebApplicationInfo

    +
    +
    +
    public interface WebApplicationInfo
    +

  • + +

    +Type returned by OneAgentSDK.createWebApplicationInfo(String, String, String) +

    + +

    +

    +
    Since:
    +
    1.3
    +
    +
    + +

    + +

    + +


    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + + + diff --git a/docs/com/dynatrace/oneagent/sdk/api/infos/package-frame.html b/docs/com/dynatrace/oneagent/sdk/api/infos/package-frame.html new file mode 100644 index 0000000..46bfeb4 --- /dev/null +++ b/docs/com/dynatrace/oneagent/sdk/api/infos/package-frame.html @@ -0,0 +1,32 @@ + + + + + + +com.dynatrace.oneagent.sdk.api.infos (sdk 1.3.0 API) + + + + + + + + + + + +com.dynatrace.oneagent.sdk.api.infos + + + + +
    +Interfaces  + +
    +WebApplicationInfo
    + + + + diff --git a/docs/com/dynatrace/oneagent/sdk/api/infos/package-summary.html b/docs/com/dynatrace/oneagent/sdk/api/infos/package-summary.html new file mode 100644 index 0000000..1fd737b --- /dev/null +++ b/docs/com/dynatrace/oneagent/sdk/api/infos/package-summary.html @@ -0,0 +1,155 @@ + + + + + + +com.dynatrace.oneagent.sdk.api.infos (sdk 1.3.0 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +

    +Package com.dynatrace.oneagent.sdk.api.infos +

    + + + + + + + + + +
    +Interface Summary
    WebApplicationInfoType returned by OneAgentSDK.createWebApplicationInfo(String, String, String)
    +  + +

    +

    +
    +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    + + + diff --git a/docs/com/dynatrace/oneagent/sdk/api/infos/package-tree.html b/docs/com/dynatrace/oneagent/sdk/api/infos/package-tree.html new file mode 100644 index 0000000..773a30e --- /dev/null +++ b/docs/com/dynatrace/oneagent/sdk/api/infos/package-tree.html @@ -0,0 +1,149 @@ + + + + + + +com.dynatrace.oneagent.sdk.api.infos Class Hierarchy (sdk 1.3.0 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Hierarchy For Package com.dynatrace.oneagent.sdk.api.infos +

    +
    +
    +
    Package Hierarchies:
    All Packages
    +
    +

    +Interface Hierarchy +

    + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    + + + diff --git a/docs/com/dynatrace/oneagent/sdk/api/package-frame.html b/docs/com/dynatrace/oneagent/sdk/api/package-frame.html index 1e457ab..a9a1dc6 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/package-frame.html +++ b/docs/com/dynatrace/oneagent/sdk/api/package-frame.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api (sdk 1.2.0 API) +com.dynatrace.oneagent.sdk.api (sdk 1.3.0 API) - + @@ -27,6 +27,8 @@
    IncomingTaggable
    +IncomingWebRequestTracer +
    InProcessLink
    InProcessLinkTracer diff --git a/docs/com/dynatrace/oneagent/sdk/api/package-summary.html b/docs/com/dynatrace/oneagent/sdk/api/package-summary.html index ddc2bc6..3922815 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/package-summary.html +++ b/docs/com/dynatrace/oneagent/sdk/api/package-summary.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api (sdk 1.2.0 API) +com.dynatrace.oneagent.sdk.api (sdk 1.3.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.dynatrace.oneagent.sdk.api (sdk 1.2.0 API)"; + parent.document.title="com.dynatrace.oneagent.sdk.api (sdk 1.3.0 API)"; } } @@ -96,6 +96,10 @@

    Common interface for server-tagging-related methods. +IncomingWebRequestTracer +Interface for incoming webrequest tracer. + + InProcessLink Represents link used for in-process-tagging. diff --git a/docs/com/dynatrace/oneagent/sdk/api/package-tree.html b/docs/com/dynatrace/oneagent/sdk/api/package-tree.html index cdbbc65..800bedd 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/package-tree.html +++ b/docs/com/dynatrace/oneagent/sdk/api/package-tree.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api Class Hierarchy (sdk 1.2.0 API) +com.dynatrace.oneagent.sdk.api Class Hierarchy (sdk 1.3.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.dynatrace.oneagent.sdk.api Class Hierarchy (sdk 1.2.0 API)"; + parent.document.title="com.dynatrace.oneagent.sdk.api Class Hierarchy (sdk 1.3.0 API)"; } } @@ -92,12 +92,14 @@

    diff --git a/docs/com/dynatrace/oneagent/sdk/package-frame.html b/docs/com/dynatrace/oneagent/sdk/package-frame.html index d12a2c2..abb9b3a 100644 --- a/docs/com/dynatrace/oneagent/sdk/package-frame.html +++ b/docs/com/dynatrace/oneagent/sdk/package-frame.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk (sdk 1.2.0 API) +com.dynatrace.oneagent.sdk (sdk 1.3.0 API) - + diff --git a/docs/com/dynatrace/oneagent/sdk/package-summary.html b/docs/com/dynatrace/oneagent/sdk/package-summary.html index d5494e3..9172ac1 100644 --- a/docs/com/dynatrace/oneagent/sdk/package-summary.html +++ b/docs/com/dynatrace/oneagent/sdk/package-summary.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk (sdk 1.2.0 API) +com.dynatrace.oneagent.sdk (sdk 1.3.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.dynatrace.oneagent.sdk (sdk 1.2.0 API)"; + parent.document.title="com.dynatrace.oneagent.sdk (sdk 1.3.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/package-tree.html b/docs/com/dynatrace/oneagent/sdk/package-tree.html index 262f419..258764c 100644 --- a/docs/com/dynatrace/oneagent/sdk/package-tree.html +++ b/docs/com/dynatrace/oneagent/sdk/package-tree.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk Class Hierarchy (sdk 1.2.0 API) +com.dynatrace.oneagent.sdk Class Hierarchy (sdk 1.3.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.dynatrace.oneagent.sdk Class Hierarchy (sdk 1.2.0 API)"; + parent.document.title="com.dynatrace.oneagent.sdk Class Hierarchy (sdk 1.3.0 API)"; } } diff --git a/docs/constant-values.html b/docs/constant-values.html index b28d4d2..2cf137c 100644 --- a/docs/constant-values.html +++ b/docs/constant-values.html @@ -2,12 +2,12 @@ - + -Constant Field Values (sdk 1.2.0 API) +Constant Field Values (sdk 1.3.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Constant Field Values (sdk 1.2.0 API)"; + parent.document.title="Constant Field Values (sdk 1.3.0 API)"; } } @@ -84,8 +84,36 @@


    Contents + + + + + +
    +com.dynatrace.*
    + +

    + + + + + + + + + + + + +
    com.dynatrace.oneagent.sdk.api.OneAgentSDK
    +public static final java.lang.StringDYNATRACE_HTTP_HEADERNAME"X-dynaTrace"
    + +

    + +


    diff --git a/docs/deprecated-list.html b/docs/deprecated-list.html index 9473a95..0cc8a1c 100644 --- a/docs/deprecated-list.html +++ b/docs/deprecated-list.html @@ -2,12 +2,12 @@ - + -Deprecated List (sdk 1.2.0 API) +Deprecated List (sdk 1.3.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Deprecated List (sdk 1.2.0 API)"; + parent.document.title="Deprecated List (sdk 1.3.0 API)"; } } diff --git a/docs/help-doc.html b/docs/help-doc.html index e15e319..94e3b26 100644 --- a/docs/help-doc.html +++ b/docs/help-doc.html @@ -2,12 +2,12 @@ - + -API Help (sdk 1.2.0 API) +API Help (sdk 1.3.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="API Help (sdk 1.2.0 API)"; + parent.document.title="API Help (sdk 1.3.0 API)"; } } diff --git a/docs/index-all.html b/docs/index-all.html index f2d1001..65e316a 100644 --- a/docs/index-all.html +++ b/docs/index-all.html @@ -2,12 +2,12 @@ - + -Index (sdk 1.2.0 API) +Index (sdk 1.3.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Index (sdk 1.2.0 API)"; + parent.document.title="Index (sdk 1.3.0 API)"; } } @@ -77,7 +77,7 @@ -A C E G I L O S T V W
    +A C D E G I L O S T V W

    A

    @@ -90,18 +90,38 @@
    addCustomRequestAttribute(String, double) - Method in interface com.dynatrace.oneagent.sdk.api.OneAgentSDK
    Does exactly the same as OneAgentSDK.addCustomRequestAttribute(String, String), but request-attribute type double. +
    addParameter(String, String) - +Method in interface com.dynatrace.oneagent.sdk.api.IncomingWebRequestTracer +
    All HTTP parameters should be provided to this method. +
    addRequestHeader(String, String) - +Method in interface com.dynatrace.oneagent.sdk.api.IncomingWebRequestTracer +
    All HTTP request headers should be provided to this method. +
    addResponseHeader(String, String) - +Method in interface com.dynatrace.oneagent.sdk.api.IncomingWebRequestTracer +
    All HTTP response headers should be provided to this method.

    C

    -
    ChannelType - Enum in com.dynatrace.oneagent.sdk.api.enums
    Defines the type of communication channel being used.
    com.dynatrace.oneagent.sdk - package com.dynatrace.oneagent.sdk
     
    com.dynatrace.oneagent.sdk.api - package com.dynatrace.oneagent.sdk.api
     
    com.dynatrace.oneagent.sdk.api.enums - package com.dynatrace.oneagent.sdk.api.enums
     
    createInProcessLink() - +
    ChannelType - Enum in com.dynatrace.oneagent.sdk.api.enums
    Defines the type of communication channel being used.
    com.dynatrace.oneagent.sdk - package com.dynatrace.oneagent.sdk
     
    com.dynatrace.oneagent.sdk.api - package com.dynatrace.oneagent.sdk.api
     
    com.dynatrace.oneagent.sdk.api.enums - package com.dynatrace.oneagent.sdk.api.enums
     
    com.dynatrace.oneagent.sdk.api.infos - package com.dynatrace.oneagent.sdk.api.infos
     
    createInProcessLink() - Method in interface com.dynatrace.oneagent.sdk.api.OneAgentSDK
    Creates a link for in-process-linking.
    createInstance() - Static method in class com.dynatrace.oneagent.sdk.OneAgentSDKFactory
    Provides a OneAgentSDK instance, that has to be used to create transactions. +
    createWebApplicationInfo(String, String, String) - +Method in interface com.dynatrace.oneagent.sdk.api.OneAgentSDK +
    Initializes a WebApplicationInfo instance that is required for tracing incoming web requests. +
    +
    +

    +D

    +
    +
    DYNATRACE_HTTP_HEADERNAME - +Static variable in interface com.dynatrace.oneagent.sdk.api.OneAgentSDK +
    Using this headername to transport Dynatrace tag inside an outgoing http request ensures compatibility to Dynatrace built-in sensors.

    @@ -143,7 +163,7 @@

    I

    -
    IncomingRemoteCallTracer - Interface in com.dynatrace.oneagent.sdk.api
    Represents the server side of a remote call.
    IncomingTaggable - Interface in com.dynatrace.oneagent.sdk.api
    Common interface for server-tagging-related methods.
    InProcessLink - Interface in com.dynatrace.oneagent.sdk.api
    Represents link used for in-process-tagging.
    InProcessLinkTracer - Interface in com.dynatrace.oneagent.sdk.api
    Tracer used to trace in-process-linking.
    +
    IncomingRemoteCallTracer - Interface in com.dynatrace.oneagent.sdk.api
    Represents the server side of a remote call.
    IncomingTaggable - Interface in com.dynatrace.oneagent.sdk.api
    Common interface for server-tagging-related methods.
    IncomingWebRequestTracer - Interface in com.dynatrace.oneagent.sdk.api
    Interface for incoming webrequest tracer.
    InProcessLink - Interface in com.dynatrace.oneagent.sdk.api
    Represents link used for in-process-tagging.
    InProcessLinkTracer - Interface in com.dynatrace.oneagent.sdk.api
    Tracer used to trace in-process-linking.

    L

    @@ -178,6 +198,12 @@
    setProtocolName(String) - Method in interface com.dynatrace.oneagent.sdk.api.OutgoingRemoteCallTracer
    Sets the name of the used remoting protocol. +
    setRemoteAddress(String) - +Method in interface com.dynatrace.oneagent.sdk.api.IncomingWebRequestTracer +
    Validates and sets the remote IP address of the incoming web request. +
    setStatusCode(int) - +Method in interface com.dynatrace.oneagent.sdk.api.IncomingWebRequestTracer +
    Sets the HTTP response status code.
    start() - Method in interface com.dynatrace.oneagent.sdk.api.Tracer
    starts timing of a node. @@ -189,6 +215,9 @@
    traceIncomingRemoteCall(String, String, String) - Method in interface com.dynatrace.oneagent.sdk.api.OneAgentSDK
    Traces an incoming remote call. +
    traceIncomingWebRequest(WebApplicationInfo, String, String) - +Method in interface com.dynatrace.oneagent.sdk.api.OneAgentSDK +
    Traces an incoming web request.
    traceInProcessLink(InProcessLink) - Method in interface com.dynatrace.oneagent.sdk.api.OneAgentSDK
    Traces the start of in-process-linking. @@ -222,9 +251,9 @@
    warn(String) - Method in interface com.dynatrace.oneagent.sdk.api.LoggingCallback
    Just a warning. - +
    WebApplicationInfo - Interface in com.dynatrace.oneagent.sdk.api.infos
    Type returned by OneAgentSDK.createWebApplicationInfo(String, String, String)
    -A C E G I L O S T V W +A C D E G I L O S T V W diff --git a/docs/index.html b/docs/index.html index d2c5937..1bc31b3 100644 --- a/docs/index.html +++ b/docs/index.html @@ -2,9 +2,9 @@ - + -sdk 1.2.0 API +sdk 1.3.0 API @@ -80,7 +80,7 @@

    -sdk 1.2.0 API +sdk 1.3.0 API

    @@ -101,6 +101,10 @@

    com.dynatrace.oneagent.sdk.api.enums   + +com.dynatrace.oneagent.sdk.api.infos +  +

    diff --git a/docs/overview-tree.html b/docs/overview-tree.html index d77868b..663fc58 100644 --- a/docs/overview-tree.html +++ b/docs/overview-tree.html @@ -2,12 +2,12 @@ - + -Class Hierarchy (sdk 1.2.0 API) +Class Hierarchy (sdk 1.3.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Class Hierarchy (sdk 1.2.0 API)"; + parent.document.title="Class Hierarchy (sdk 1.3.0 API)"; } } @@ -83,7 +83,7 @@

    Hierarchy For All Packages

    -
    Package Hierarchies:
    com.dynatrace.oneagent.sdk, com.dynatrace.oneagent.sdk.api, com.dynatrace.oneagent.sdk.api.enums
    +
    Package Hierarchies:
    com.dynatrace.oneagent.sdk, com.dynatrace.oneagent.sdk.api, com.dynatrace.oneagent.sdk.api.enums, com.dynatrace.oneagent.sdk.api.infos

    Class Hierarchy @@ -98,15 +98,17 @@

    +
  • com.dynatrace.oneagent.sdk.api.infos.WebApplicationInfo

    Enum Hierarchy

    diff --git a/docs/package-list b/docs/package-list index 5b2a20a..ebefb0a 100644 --- a/docs/package-list +++ b/docs/package-list @@ -1,3 +1,4 @@ com.dynatrace.oneagent.sdk com.dynatrace.oneagent.sdk.api com.dynatrace.oneagent.sdk.api.enums +com.dynatrace.oneagent.sdk.api.infos diff --git a/samples/README.md b/samples/README.md index b079ed4..3457498 100644 --- a/samples/README.md +++ b/samples/README.md @@ -32,3 +32,11 @@ This Application shows how to in-process-linking and custom service attributes a Check your Dynatrace environment for newly created services like that: ![in-process-linking-service](img/in-process-linking-service.png) + +### Run WebRequest sample application +This Application shows how to trace incoming webrequests. To run this sample you just go into the sample directory and run the sample by typing: + +- run sample: `mvn exec:exec` + +Check your Dynatrace environment for newly created services like that: +![webrequest-service](img/webrequest-service.png) diff --git a/samples/img/webrequest-service.png b/samples/img/webrequest-service.png new file mode 100644 index 0000000000000000000000000000000000000000..7b6d1abb5b249fdbfb3aff08aa7db534ef3025f8 GIT binary patch literal 44547 zcmd43c~nzb_clnCWl@4ksR&vOsVYTOhKP#HNmV&ef`E$5Lqr5bhA_`bv=mWMQpymS zRRkP>Fb4=pG=LGpARq(?0RbUG0s%tisW0mL{=TnQ_dmT>_v*VAD>s*W&)H|6y`TN; zea_9DvyQe~RDMxWQc~J-`tK9xm6SHJm6SHP{q!Sn#numm06xBpK5zS%QdO_^Jn-d* zpg$e{R8p!zt4jSg0^c`9{Ou8~q_nkd{qH*p{P|@irOHRAPyBfy!Iv%bsR(uR(-&9a zWEXw5L4{9J&u)KmTlvGpgFI#Rm=E7=5***FDrh@-*yH@6mTd*$p4;>bOQ^i?grZpC+iXwgf zOLVVEh)bnM!?5=&By@%HDzGOH#%mZRy)A0ss>$C#fBOBuM^uW1U=roJcR%~&iT@lK z7R{@!jbJN|90l2ZqAaVtIMG5n1e3W4MJRp@KWUVhaOPh6j9KMT0YzEi@{?k%IQ{n5 zqr0RU(>c4N7+GalC#PBc)~8b8=xDw3lS^?cR6%Q-0t~YBF-l&LdF9 zGe8v+d>g^KJ7%VZ4hB84l`ixuy!)G+wS;pc)V*93ayIp6#OkE{@%Scw z;}MnQ+{+UJDAXm#1Dqm&*U_l_4*yHu+N9vpW~i?e`G2}M^is_((bF@*($k@8_Ok0@v|;-0 zepTw<-2^1f-&cO zoaGh14h#0Vq8vwp8p=~@mQ466^}7STznvO!+ekZYVDswy{AZP#lfjtd`fCZge#4@Z zxvz32DL$V%3fk3nA1mb9?0d3(5cXhdXCO3 zvD|Z2hyg+38yB03nLV@sw>EJ9l`RbLCLAITg7J0{taZ7L|s+V zfE0z6Rrlpghn&Gx!(K$VeQWG?eQgmLqOl*)_V`YF^j{vx>{7dzK4t9#pYlm===O>R zySmzIxgk{s)SMI8v#biUiK^uM(Z;pA#YxZR&PddMO=HaYE`;5qVNUj+-*e82o|9u= z$t$C4!=1h51o5MG-Un_Yu5zsWs;9I$dLi@rEQSslB%zo&1_K%aKCrCaxDffHI}*=O zuMkCE*djzjrPBny2up%(w$XeTT)Gst(3vf-(KgPYqbX}OM^hB_0xM&D9xj@Mp}RO4 zpu*v__p8e2p1isu%86Jgv*^{Vyp&#y&^1gbsGkGZXPgWoFlOk@Vd0Xufj)gNqP(mG z(Y%r8{PK8hE3CiT|F+MsK;c+dfYuWsF`NB+RYsYM0R>~1rbn}PZmCy?#3XhtK zIp&4Bu*!hpE><2L>|XxOn1Xx6Dw1i={M7amW7xxi(u2IYQhU$kwXTXMd-WU=6Z_+` zxN&wxjw{aL&gTsqaKR4r@n^=La*UCOOWkv$Ko9-jkM)V0;=|pRY(1|vi}^A_2Q zZXq@fQ!e0=Xm8qsSj4%&ae>GLtJ*qR^BL;sB{4lz8EYMlelt;jl^~Kp6yCd&3bN=A zCom2g3@AaC@nSf?s=R^Si}3WtKpY3=k5dABJo@}Ez2P3SxusehB$F+bCl|*L(=Car zjluUlXwfgNH7XHsPKaWpoyDXa7Pw!9hFhY0di`sfArkXf#mVzE-8TD@>1QWMTxxpJ z4HkeT_vEXiEo?_s$!eDQWH^jeT@B6(NJhv=##Q#J+}bPf9Jjs6b_Lh}Av747@WfGj z*g^CQd#m;k48LMjlxN*rGSR0g##!U{)29av96YJdRXb8Qx}PZ%?rw1?zi2Rc5cx8; z(Y}^n&kK!q-nx^usEzY}@ZnjD1F4;*OXHh#j=Pyu`u7_t(eK*UCMfq$VwT!@!Nm?bl7NBJLPi73tQN_2fNjrN0=(2=ehd6#m3nD+EAwh|6u|@*42=Sh9@6> z|IF}2%f?yqD*m)fK^E&(dO_lys6SRR=N^-ZZtvI1b*|=n4W@r;EIEKnYb0bwL0JJY z=n$)1$xFxRiZ1R;T=*oUtU2mcZV`hN-i4s*l+5lR{cD1>2s|UTFzc%ghQ}))9LOy( z`h{cvn8T9EgWMcl+A4F&GSi>Pu5rZF36C{XlClHwNjSKT+bvx;W$k>^Km_{Eldy2k z%rtX!dFHYZ&;>3wWzaCeX!ipkat!;9#8+_wmfbsI&~6HOnC=XhzB#OIdFE2T|J0%2 zCA6@#4zD<@2qeTT)Fv0EBH%X>`spf?+AB_{X0-gkUtOoxTFKf$ z6%Q-0Uh?6S@%Xi0_T#z|t@NDAg$Hm4M&H)9&-;=Vj^WBQJHz}5AbU;vJn;jSrD<=X z47WuU7S>iI-^>WoULuX6@z66!tpz;JRfbyJ1nmLC}#x=HDFgTFpT7I5bX1n|A#X?Go)HXlg{m zII*qo-pep}QZx>f53saMdy&~f_IV8BMk?Zgd$n2-2;%%0qn8}ynRhZ3At>O@&OUqn zKjE;h*?IcI$%ff}I}|OF%%jsYzcTsUs2e8)ZZ(69S)vZFGHJ26;6_H_ z;%={FzG4tIhbo#yLoozocDp2kXd^ox{=CURZ_o?fMh?xbq?{=1t{?V)!AsabN40jl zmEo6cHOAW2iaIQ@aUzfyl#9*x7n#SCMO@a8-;^k@fKjcL(~5&kaw(@n-Mnk$y|6;;i3fsMCy7 z`YZ;MIY2aA37JjW$^T|}9Tq42z)>+CbWQ)R7vETA*BCMMKg87WBtSgpD;CpDW*t;Q#R25K--aNU6n6fKgwr8wS74a^Cihpf?~#E53%? z+XZ*miLVE1z4zN+Ic=9G>3{FNQ%aI!%BjCoHT~^&{Fmb|2h@F|#t+x|eK%azTZ{?F z0s7hZUv57|4g8jE?7dI+-G>oK$=S;ou=F+1o#Fq*UC*>q31^HI#W2La^*kgSXw2h( z;mJM!;mKyepuKgIgr&9Js~wL9zUc)Z{VD$)SWMjx`wicS`TB>&#Q&Q4oY?ns>Nonj zu84O(JgwIJpPO_4Q2#bPUq-m&Hre+-DbtA)m%l&vAA-34=$T(tlKrp#Kl`SvbS!rnU~iIS zbkY_ep;c0Pef5+kKk_odkfo4w6hz;>U#?ca>`#>mNDA3<2}t(bSNqGwh+QSB67v>0 zj|RhPDu218{q{2%QuGt(%a>iYerjJ%c08{B^6zV#&W>zYzw-Kr{p|17PcDA1&R_pj zI`o}N@|TlGN~tzqPR?8->wY=e_s9QR%{)5mhq7Q7GB#P^H5aJ&RsG_F^w;)fKF?r` z5~#e{!B0`b5A@!fN6ciB;pWUi0aU*IKNlUESlqb%IO0=Lq8@HZyD!wP>E{qL9)zES|h3sI) zzR5z)IZq9|8<2~V6^TMyh0wX<+%HeR==$2*Pb!l5rFhCYZ1a1s=6`KAIY#@T+Pf$e ztK%F$^Uv4(QH%2BDXlm%57YwI?!3k;)md&84Bdqmg(H|!Uas0rFbz{a^_V%-5aA~{Gm=OzCz~xCNPF^C zlv#(0YLv6^^Ko9s?o`>JE{wpoVB}oXR!r5fX3&o+1osLeFC$`p%y~)`l;|dWVOH>hc$C|%MRp>v_Drcd zH8}loUL$Qq?46W4Z7|i@huYi9DxdhdH;e178J-~NOY5^1}9CmBoTOrNqJVyqP8hqI5JtdVs?xLj$&+?s?3$W)P7ox zn(bT`sS#~jYb?SelPAPg%Pch-O}`2uxxSoRj7n~rYPssw+d5TF#zR&`Y|IPa5ymDn z)Y8=&VPBdWQFbfB$2$(ebP>FHI@oieq@`~>%5CM!qjV}8wL5Y)TOS2w@1zfpp+Tr* z;ZQHqkf7!UPE|;Y!9YQ0#7{-if!lqsSyPAJrGlonsq@tou1%svXpuInFoLlKZj>>j z`Ip4cV-a@5$!t*;-sqpr{NjNHjyn#r(+u~s<0rHr;{M`IxN*@HVYp8#akU$ClaL?& zla(2Jj`W%PdK=%ZO$JJ|Z(6#~*%A*CGtL_GvpKhHIjwr*)zQa23>&kk^erHXLhdbm z%`E=OExG5)xEyy2CF&R4Di(bP-7IJAuJS?ro+94>-xSo_YQ*LdN4ZlGNRFVbq;H4? zZe3;AwiV*kC9!jJ%gqzWO3x8D*r%j6qxf64LCRI)haXfKWceyd&5RM@Bg{pc(ve2q z2(cR3c1H6JF$^mxeO7Y;BI!q`s>#QFg*SpM!-P1bNKq$Ibd*>2v{aY2Ko z<%JPa#MFkV`$1Kzisc){uvU=4Qrp$75PrZ4LYCGhRz(Ebx@``K8AVk+V|UmP+;RPzDFO-O5&|F$Xp5K5tVI`0_bGgW)w zseP>_O;sb!r3X8cNMcww{*oW+W17Z&c&aSEXcJA7PSc9?&EW)*jp7@y2dKOwxSPG7 z#)cwjMnONSj=w6#H=|NiN6GT5k=`?i6iVra490?_I&VV;LRMP0NTE!rN}l-RS7-PD zeU}c5&Svy9NFeG}AR%T4Rf8Xrh+K!-*PG(Ws*-UFj=}MgT20Il@A-5-lm?D3kwCSp zI7R8L-V?m3Hty7*&JdsCocl@J`$}2Wtv*KUj^32V$*wDaA;MJ@tFM$lJXS@oaQzg8 zvakc_WXps2nXyzxL?E;0i9&SBrFRY@e8<2{io31Iy*!Xg;Ts_$Z6s}Iv$iDZnL>FY zYM-~@NU_S|pVNC(B=c^DO!jcOq&Fm&wS4EaAoG=H)mHSqJWOHU)!Q45fZYH))bJ)czYP{-IdQfzrt5>0ueX5Gdv7pDoe^gIYvtvL${kYH zysGfZRX7H0f)5U(TB=CSJn=@JUH}sfT1{osqx)nxYA*S~ z_LE}xpd6TY5(C<;SwGYmJIv^LnTnWtfF?A%k>3V0!1-Zo7!S-RXXGdnv1 z!`Ew0#Lb;anCU|pO64VeJ;bwSU6{tS1NRMRL|OS%Z*3EJSTNC-TK;fYekfr6a4I6U zdjO0<>`z&9Xk*%gU?cF_jrocsKQ72F5mUiNJ`oVH{4fTp*XzgkGj-n22ByH~W8^4T3WT)Y+z2l7 za8QHdZ8@3#m2n)(BNI#ItG)3l`z||{7UB40VjdJWHvxjAAgbzhU?UWSf}CtcH5M4@ zY(iDfsz`pWnuxVGkDkkkpbafNViH3eA9w|dO6z79S(}b;txaNqwlW^V(2W@@ z!#h`$K|jG0XOzjdasK_1 zmF0#{t^AJjt_JrN9GDtNgcGFM=4Z}mO8B1(aapOHG!9&|mS&7NDD955n!1%gEn3Ux z=D<|l6w>|(1&N_1fWRCdd9+l6b0R0xUOp8(elT^MngU>I8m_=%$HeM&t2U60Gsix% zqDT&Kr_@j3p0R)$-l^Feqh3mj{=ubu8BO)-SLJ~AxzHs!%Wu_Eo=KNKu_>gS0veHD*>^LZ?F|Z-$2+;w2&-ojreCZT zpZv;YAJ?R&B7Op#1ZZ{wdA!Lur{iRmghJXzJO^`2)Uy^zlBbxH^0&*kjtp5_STGGD9e)i7di%T)P9ou;mk-!T270@BLVe>KnTUpB~ji|I>) zrO>?Ew$O$o8W=?t`evV7@x`?)*cr)#_*C36`VN{5z#ANq<#tM)pK1%ynD91a&24Zz zM7okoD-zp{NJO|aGvd@4LfDXO?NuQ@I2+;KGo^@aGjKveQVt=sCzkokZ@|_&t2!tj zx>6DK&H4XV)c^l!BBK9hmJksaq|c6tisMAtw4H0#=JytDN%L5o zCDc)>3AR&zjTAEU@g1eVt&B8qNH^ehyH|*x;S|RaAJ(n*nW!~M+$8`IGDIgb`m!2R z8-7Wu>WgloagU##r1UQB#NIx~6E_oSMN2G4UQ4p&B#;$d8?^IN)Bn@ZGH|19$wAAE z#@lB{;(bPZ_>gxX{L8aeW3@+HC<>tJo1Z#fdL?B-dw#~nZ?ds#Wmi$WXaHsNBPYGh zx=5X`pGHQqbYOm{3s_~}ctDm+_%Epli`wXqY84MQw*84J(47QftN(d&KBhl9XpcHS zjCFubRZ~GPr(Rhmns?8f_CrPOXXA?2levrHvU4NgUxr>(r%jzd${la6*0P^+_l!|A z*cskqD(;pl3i2ldb0#wPI9p=$;6XPNY>a#yiF=o-j^NnHP9Kf&+?j2~ecaggFvb?m z!}QvM4!Q=-lvLIE^y!sRG6ZJM%Ycnz#Z5UZN3?B<_g?xCV^)edw;%0Nx70hMR~FlS z1daKfJ3B1tAI)JW;qTJ3xH<{+OFEJHfm}UGWim;PVW!+|W00)LiIQ@21D`+^^ztMTYKYl z6RZI&-g@i-P+dbU$H;$W$-nc+-dG6Dct|2oOM~L$U;X1Jpjn~r#j4&|0)_B+HHN`C zyQy~>gv-QfwVL|ZR}>o`scSJ}-~3JZ%jjj1>U`Uwy8)EZTKCf~XhFTypcux`!mYub z9qe@{XJ?3YRZ*T2i}%(TI<+elC9}3G=c$%m)#~MUahh6VycU=V*xT%I+ukVpa47Y9 zy1|w{EkPvFfgyXIg@w=Gr&8KStLZ)$J%nXAG?g_88ukAfZguwF$$-Qmh!QXEQ@FEE z8(*3`ljj_6+lp3e;oP0=5Jk~HAasn;)a`@YXJ?KvZbdbxqZh}YvQ!8&jqH^LFis}) z_;m@s^ij~LCm4UxSenwUm;PC&g#3nbe+ID5p2@V?XoBF;?Y_?5MJn_CVL@1m^wS)R zWSqlV>dsGIoOgOvd_0%V*R3mLzW+GWglOxXX-X=JIi?C&Vf`k=e5lXQ?a;;nXx=TA zTj%jjyTm2Y{UB!oYmk?XD(Jz$+w@-E|IKf1^G>bK-fG_ECR?}x&h ztA-=ltwkS_BwA<`9I8>VXLMeIMy@@cRvZ&2g;A~N@C523$6+_*&0l!ElNxk zO|Nt}%&#q&Jix1A@Nh0VU7qw~jwYyNei4t+%AIE*dPzUVqK~8SPx$~J+XN`3VAD?i zeWCK%Rf=cX#r=wryzCq<^m!EOCQo4=#_}ny!a857#}upoG7GvL{J`^a?&=RYLy3m2 zFPU9`mTW39uY^6{i=O(8z=Zi+V(%QRL$8F-n`jn8xnb_rOW{)k1nxsEhGiM{MX4I?;Sh8e8tos|f8MoIeVM9)@GW+EN?#35${{UkOJ&HN)bJJEqN zAIk9-5IZaVg(f4uORxE+KQ{g*fc&di4(*Rkorv^WO_nJnpT zwbwDru;<4YU8guo5G9gvdqelP240cK5u`Is4w@Zpl7ey;W7ES-8uQ znl|oFJh*f9G}8z)!$|a0eWfdq&EMascV%VV^Q9D6VY1<*GUi&=L?F~sl^FpN38W_r zjYeL>hE{O-F1}saI5G=+vJ-(R<9ZH*D-KVyrv91D`Vq~1?f*oQS5$Ygh(BY6%P>H;s}^JgW=iG9BbdsxQqdoT`g8he=jEASC4sH|qPy#V`PFOxN{bplz1n z%aQ#y0UKq)c_U$@K=4ZIFGrV!y@qB2-C=@kImF%DH`#_UI}4{zW~?^nFS&{GOqN^s zgJw2RfYQOmlbMF>8IW5Yw9FE9CI|J0DJn5mo^aL2EyT#6Bp%`UcZ~d}FfddeNt13H z0iV5Csj>6-dH=?L4Xm~%>7JOK!FxTA$?>sSdd2ki4it!7&lnY{iUxi+MiIBnbIVIo zd~rB`B>j@8GxE`5NUHRWW{E1iqRmdv`In3kgQ^zSp zoY4mK5PQ*zt2^Bk8I#0OQ(eOHC8q?<821GTD2d1eg%H9F8{jZV@v7FKms5PAh(?n7 zLnh+*)>hB|MN|CxLx3$quO9-z41@Z#7p2~y$TO4+UzYW$-~#~=ZYQjwUo4=Xvq2Gc z0cz4GLj;I#cuxNTlQAksx-xd)>{i3Ji#rK_g;n{yynw+w-58#+G=RNbD|QZkagI?Y zap#0Pl~^IFBRa!E>J%NZl>s#F+W?+sHu$234)yIS{aAHIMF6u$(~B^Z$3V{xZxevy zL8Y|<|8d2Vr7}7Q2^CWg?di?Lhk3h&h#yj34o`3vR;*eNY@n0gKb@Iuu8JSevG#42 zT=e*=56J@pB7UL`FcQ0z@Oln80X3^z$B>x%`Ytutz&}U!qbhhflZA1j!1FBi496I( z5Mw4M#|Hx*NE?BIZbe{TdHZ)`NvWQthB;ON)QHiVrVDp)A=!}~mhpWWRG9mx0K0

    nXiMN%I|_~;!(f&Wn#fZ<~K@z!KXQu3IVbN3($`gvUs zG)Bf%55lPDU1ma(>|@ApfMHx!=SOVMI{Al7PW{6J9jgJhN5S5!IF2{WSJOT{q4|KZ zc-GD(G$v_$PxTX5g`-M6$z4TPLmntDD>fPZl^X$TO7}miF{$j#3 z4ad;6C+x#vpFWabVyzqN0@{DSO7vmOnsR$ET4-2VYgZ0YC$cE1n91Vg@cLg{KAni3 zi{O?@T=fWQc=Us{#`G$KwI$Ll+6|R|DJMC!R4^Y}LkQcQP!Y(%OIy>?T9km#vM2GV z01h*O-WxLbp8GQBbMqKV`Uz)(lE_0Y6bu((@vTi*8SUZtOp`>r>WG)Sz&+s}U<53n z+I!Ix$f}8dmmK`L4%C}%unZ99oOs4p%2Nr*MiTDs69V5B1mr+f6$>1ltpcBjJS!IGkyL` zBIkn{pyr3}gm z70HrCBEBP0BCachOIoV6%HxSY7#3|vjLV-T{>n~Jku0=UFCwZ0@%_!`Su&Pxx?QZ~ zMxQCY7;Blsy^KL6f(snxPU8?S=wFsK-XH1N#xDeG-_u)ez2Ha^hRV6AjAvQs)TmeN zjE=Q80n&b8Z3RCaN0B|J`Q%KkFsECt1NFGy>#vsAr6yQw;7yd-XTpi48GqK?$8R{< ziYomgYJ~X?8$HMK7nyfi?w{kwKD+u&;vqg0)vlxC25sp9>|^wEvXtL6m_1ik!>x32 zPnyH~{}!DOm)ug7DVfu&62r53>CuwVjSQ_Z`uCfV`HiBDo}*=T)LMzSo&5HW>DrUL8I+(ub?@ zX^-F1a&vGr#)vryiovE$nWKR;Naj-y~s>IIY1IG}h%NtUWIKC(cpDp8%qyeQk4q(~2y410|9**>O?#`wXsGuK*IZ=93@o#u?(A}=4#!P_WR?}jD) zdJ`ok&DodD{8U}&o4nYtOyD4}hE3~>Wl0ND2|gRjE*4@#lzcJ|vXcW42b{&e?kQU( z-q%~39%WdTCYFzc!zpi4Wz(^-_rYvxKbxVp=`cv$&F$Le<-gAB?c<8OU0$r?!t=WY55Ah0hv!2-I?M=yBB};#=J~^KRfsx*W(-ncc@yYhZ+soBe<#UZE zH8g4Y#_Tj`^_4yvq<20|H&`@bX{@@W&%`QUo2iqmtoP#Ks$IzsLh*y921@Ox&7*`Vtv{;xR>50DhQ$@qC}gDuxiZ}$9=Phb%K9ZD>3*WmhIhH2FumU^9dfL4w_Gx0 zH8YD0(pj(Eu(wE}e3He^#Q9PTd6tS%rm_Z``b?A;&FBY^elvcbeBCmvl=}VF6}Dc@ zD?j_?d4r6ujFa#xB}k`eN)5G37b%=d0@EE?5Q^a#yfKrkYaXV~e{BhXhLYnG@0yr# z4_E7KyDFj0mOGN1=sbZ%ARwlrO7h40b0ZsA&wvVsd1_S0`8>77RKNfs!2Vk&1&v?t zvK>S7u{EQ5R<;tY#`BPAy_NAnbGeSgE+eSL3@xUlHQK*vCPXAE+n#Fk;>Aw>N&`HX zR_(3yd#X(}(7e($=lyPmrOj(SNpC$1G)V7Ps*B`Yxn+xoE2&lP*);REFk(gr#yW#; zwi2=8c1O?z^Y@lCv&$g^+a^8WGz*^8azjz57@ zNWKYESd=;$CA5q6SvuCNbV4QhVj(c_E?;^7WU4~^VQ4u7CG-}Sf>ZXiGR;7$P|18+ zo0DSU_!I>xQlrA(p`ZI`g4Xvw2Al?|ip_0ucq>tvX}U?z0rjZ!pG|WRX%CWpJWN;YYfH@kfe8NePkLD( zkv~Hr%>L`2ug@4R%p8D6=}8Zswig2GJ{+WVYMjZp=~=z>rtseLaSJWJG0iO&YlU|^ zlbfT8XGHn>seM)L(}OwZ9H#5dSC1Ap+D-45ECF6J46J4S9+{QsaaN!Cs<^Pv#wJa6 zAJ~cD{=Pgl?uZKF+_7^bZW5P54SgFINAA>#q^%MyxBcuHVrfST_encP+RLdgn~d(W z31}|%It5UX7emOtTq>c;&`#TCvh`Sp;#AFZ_$Oc7fb)%x!A~(*&Mh9k+Kc4qv@94V z0-FRVoJznZc;`np%vvm{MK9z(c~;7O)V?jf+#|erPLikZFjhY(O`w=2-fO2NGWEpKwLITGQUgo>Y@a%n71eT zYb=t;MIZc7eVv4=Purm>_sScCyF_IP9OBZfFD`FgzPSqSjdw3cD$_q7)|bQ=$~o|m z?I^U5`-kGHnRoLh3mmg+TT^X9o6TR!^?MPfUag>G!SmL~G{L@`!6a!Ep`qM995r|^ z($7pMp!hcGhb=q#9kKXi&4=4WLx%%P3hov-XnGwj8sN-@)O^sJG-(s<^%RMu%GP)#3jH2%@_M^L1B6tBh3K?S!Bpkh~eiM z^Vo+SsE?^ScFlJOip;5^&jFN#cR8Giy)*Et~_;G=#x;cVG2M;~mx z@?6B--Z1 zTbb;~_s1TPiLyDDz0zVxkGtBPKT63=;~*+Ob}yi~Tw!T_`RQ=bpth^jU*8Bn z2qkL}>)(nzkE|(_?5Hb3%HJV27KDIP9Uw?2=#+io_HyCzG7q;UbnmF;L(xV0ED#%N z?%maM%?wPk3>$hz?F;a5K8T$O_Pyi*vi%qPFd=_@)e#6)PO*dP%f}Vxe{~q243s|^ zoZinqt-}`-jI->_YO2wtDTW`_EK40ybnfk$2NuGM^P!lw5C!CeYxeX!_UwwFN;J#o z*fAzMyQc9xysILO;dKVS9mX>BB+87AcAVBxm--FI<7vAGDh)k~IetU*D%cS#FvJ?=_H- zzsuiA6$_+u{-aM3KBw)OvHHm07Fk%5FQ=z7hfX@0c20i1@uO*wU+09Rq)efF!gIuS z7NnOBx!fava0+Db)KHCvGUrb3 zfEHYtgYho>5nBG$CFb`5sC(hq%JKFazWLLM3tBZF(d7eoQc>X(Pqba}uNN0`-pkG> z$*nxfBfzmJn&;UO0W#hWsg{nS#tqZoY4GjuZS9k(_6&0{qmw#mM%Eb{=pST=M)xjh zg3$_|HA`T`#hVzgqXj2F5D`ZwZ@rYb`(bjQe~Er)>Z`F6uN_bJS5^o8mGQI!4Jg3j z(+ULy-C2qVpB$*T+Dz+_gEk)_K+lRh5*2C%T^~XA_R{_%NjDL|y2X*^O9$>dPa9%f z9B=H{!Bj9NWsGcKw86#x^Al_*Yg5PYqN6Jt?gmcYuMXOsCbH4*B2+!QvuCEnoe1V) zk$Iw$0OG}Cn6}#_Gb1^oR3h;-{714u<0Y&nibOBfi}IcXs4#wfIM^eQhC`VF+tyt7 ztFD@JmN{2hhHN!RMr!x5Y|@cFeuHE5X60e%x^yYsZWD{stX91 z_<$$QT?7_R zFbPP$`-%8L^)VnMo&?}E^Xv!(rSqOmd*3X~Z?AA6GyvX|w?+-b z>^=Z+!?)*l^6j&`SKx15SFA4lU^_pFxzCp_ZktN&<+#|(mOhAN23{j()10ggbbJ*V z**x>;@5W%EV3_<~oG$~*>BJTxf%o$sHg}ryS~kKIHT%S-4;e7l}1eP;fiT6 zc!9pGq#{M;m}B8}IS4Wm2pCzc@OI$UfaMIkR<-pylB{9TU25iJt;=XjHdR(kc>Py@hrdBieqRmf+M;4v%H#ac*ekOZulepR zt#sTvcsj(_nu#zJU}VM_;W;@HeB3g;<(YTUyxifD24#`etI^lVU!>DGfFL>f`+F4szkiqhc&C4r!a&7c|RByP^i3hkymf4 zXZSOQ?iExAU6d^?u~M{N#^N+K*o(1FK3kxCD(aEZuvvEfS?JwX=_-{s@%{UEJMAfj z0kKpT9!@YBj}+)k4Q~J{NF}4Sm*A#0dWy zLi}XXAATr*CTxc~w0_F^IU#&p4Gn&OicKZmc)%mP;hu}Cr0LPLn&EvLgS*Vi$;%#!L6Z3FdR|zf{RRZx z)g)Xb9i;6h{mgHm`5M6XtfybusCG(pZ@HetG8#zclhEIN$p|C&UNx-9YY(oewkxlE zh*r3wbQp%O+{*g%bLD0iflMVobki z!hmSpagNV$X0+3q&5e*IVS9S>d+Y4VUI_D}b4f1O8!XoIqTUm#l9r0_E>L@((-1Kt3|ie|KGgN)hA!_HTVHS|4P?RnSRq>X6?Y&^Z@L)ykrf_oYB zF5l!1NGU~1b;8U_U-}|=LtnCD!;wKULMQU7_O(Xunyk6@!Zu_snRxmzhY{btn&f*4 zm~St$IHV+?R!&A1jkfaAc5o4e3f4bu`-;BTFWRoJv9>~r96Jc|{W8yt^?5#=rAdTM zKG%S8FL@Lr`$OxyUqovJ!>?*NwwcJ%U7G+2cfDD2zkvdjaPw&LP?T~H&@BiKDGBOnVil?)VY zFSi?~3}coxD4avgYM9%XR5I*KDw&lKE*6fdcQ}7+2S2*M5n;H1vA9n={N3#@BaarV zB>yU%DAla%koawPLe&NLS#!_4N&xME{h@lc6X^a@DGU4!+T|bNSW2i~;D?71iLuRatf7VgqeK z@B2{fmvYl^2^#VXQrHFxOrOjwSg&)XfsjoT)W*Sg6m&EFOx&8c=kueg1+DD#_*n$mwynIz4HvD7DXLD_HTFvrwvoj!oGXCjHCnT3F+q zXj630!AoznoJyiRx7$8Kaq}m=h4Pp&zC~cJED+yLA$O!}vg}`3%wt1d&mWxw@D%`;2s}5^c3`_xK&HVo#=*L<_d+|_#;qN!Ro?MkBcl{PM=hP%T+Nt%d=HC~u>zW7 zclpw;z1aQD7vz79Fh)07ImCfK42EC?6Xdau6vU)qYScH;`{`V@cwjatbUcVr0j9*(Z zxus48>I=bZihZQ1)pR4VUwV7(x}^Ct(x;=p`ID}#W92K%57h*qruQ>aMB|L+ZEW#OzB&;; zg8%p47#OPbx9w*fu++c_wISqcmN7|?SW_>c!vx8TJ0%)XByFR7O;}2e@Ambjf-{pp zs7k1Q9Cqs=bU(xKr`Ldwy;K=Ep5RP|+V^GuF|m`KxSy))ZT z%T$D6=aG|VJle}s6SYsH;>=*Z-4{w`)9&U?q$x$}EN=3{y4#xS8HYUH{LiL!bL$0E zfB9~CTW~w~ySXl5!0OuIplCazU>xxvP_HK~hoMOv4GGB}XI;Yn3`$xVf3#qVmtbG~ zGD>4VbBBfkQ{iT@zHRjk^@Qz6yj^L1ge6{+f2%9^LS%k+S26$QvugCq!w0HR=R_MQ z^EM=rd*hnVzGB3cmOcG57T-k&NDtp(su$F*_ZPfkdKg(fiZBW(qiLpPm2a}TQnuwT zw(~fac8+6;|JU*BmbLPZqkVpp2Jf92hY_zmRVB9u^$z*0)E{deh|dL}XugOg8*+p7 z00Y~L-1a_eb}9X+0jo72>BC z>^uw1rqfLo7@v+tb}#hfezd*xeMv6Z*id(7bkUMd_-qM`_L?5Bnu0#r{j^s0anQ8= z`zuY)EmQnZ5j8(h0?zm;x&^2U;DDsJ$QAb2?n4MULs&Nk*}q0uX)@M0*E3t6b+GoizQ>DdPAL89EICqqCmI+yk$M@}DwqYhZqI+a?^qRuvKovu zdea?kc4X_VoxM){+)$fCBsQup{zl!&pJyeROXj85JtVCmk4EZ@M$Cc)PyyE(%L+KSfic2iUsZUl9uO=Dg{Mi_i5r4!l=_ zV^!fsa<-)+B*#@TbGLO#>LdxXAgxXO zg5^hbumrwm<89cnm6&yNREjvipFNe8AhJcRqeqW=pFb49Sd*IN^_NVpW&X7u44eui zR~zra_BmS_^{y97kinr#)7}y1sdjUnt?U2M@87E;QN>&N1(g>wRC$~Cbj)Hy zJZxWB8|RNNtKvH%C${J>zps9cLM&Wuya_Xnw6HZImbLe{|F@0$QzMk`MQq(sR^l$lyT=9E%lmILW zQ8kv+PD_6u3nD5?k~;qn_TD_K$*bKP#afFmXsOCjtCH3U8RN`MTB}k;Kt*IGAR?kN z%S?!^A}R`1goq5OGDJWijA2YLiU(zju3jW*EGJ$Ag|JhU{U$epe<d{SC#fA?>xpZNDoV_Cs*jB=W=>6X4Sm&tpDU$-PeT?@V z@m~)5<>yj#LzTrJ=Tlkfes;CQdEO$e3iIOO^N@$AHb{yh1n}N{QRX0LPVt6;+SHYq zSlX-J?ebORgH;f$gwO1ae3Zlm=lzey!kuV1hlks`Sr2OMVua)Rgp$Vu`$vYYzo9LZ z8cx)sHdn@0)tb4u`aAzH$e3DSve+^BJq37Mi~XPUe27FNWSOn^0_@=KwXDtFvILoD zZ0lnt7ERO}bl~@2E{TJ(%a`GkUU!QjS^tn@8WbmaUXjSl#_?&*Qg6x zIMJ=4obx>hY^pkYkWc988z?>@ew5oemh!b5O{L_zZzMQA4vBZEz-9ah72aN=(H~D& zZBH6Q@uJ?|@{VmQEFpg99xECv%Sl3hMQ@PQuBW15h&9lCUrT16$FBEzb`q}4-k~hc z$?@0EcByWr3`Vk8brkK;svipL5_hGkW1<5+8OBH2zZmp>NH=nkf!+aOtmmYZWd}Kc zIwGWWG>Z65nB8p{M1rKycr1J?>1x$pQt{)gHW$6@h1vH7Z`>VehDbe^3)T3Ubq9^`z?EQm-Gf`b-{a|^Ch)S1X;|3p0Hrq2n(y2kbug{iYWD$E@9>IKoj~MAK?^4A*2E~VgrU04!JTQfs zDSSlGpEqj78+`-ZH?VOA{|0cRf44 z@(XA+3Xa*g6Y<=KobtUSlO65u{x?t#<7Z6nffDt_*xHPqEAkKFcXpY@qe_0X4W-Pj zxUA3KR9cNZH@NiH(_`v_(v!$DRou-+ZRYAzFSDmrkTkf+6WTKXgS!Zz@p^6Pc0;e` zT6w>+M)HFnQzm>v?o_D1D+P(nzN#Y>h&4>%+RMk|+Ck7?3LcdIgHGtiPh@G6267Dq z7-=w)fA7O?(5B6hNrf+yV&}4>mM+%ldDnmqI=^8zHQXbf{Jl&25s0~J^f;rxh)FUr zsYGL`*IVy0NDrLY>?;GE;wi{Of6@p*E$fBeet++YzqQ%ozd>jFe^ooZ6G&OSgh_YT z&vjZ2*D)mi^9iJR<zsbLtj$JGUx(d*ysG-yR^8zMnIJ$8`cl9@eg~2)PB6;C z(%u3zHTduOrK_GY2^Wo6{A7tJ_yA9D|q;%nBA4}-o+0LRc{Awdo*N~!VctKM3mM|N@K zC->PgRYB0)C0F&vGYx|N%flm03H%+g3=W7mqs;$bV~!s&>aCJokQ%;@q3Oornm<-;Q@ zRcE_LKKowKSMv>I-SKZsf!l}JuT%;qkPl;#WgzxH*UO?tTv%`UBQ z>}mc@+J%)~jhKF+_|neST#dLm29IxOXqaVsLkJz9gmN~x(j0aGex<=79rk6dLOgn+ zC7!%e#oXyiXhDB`H_YzxF1C5%!O7uxn1N+?^N0ng(>adFJ}4rd;q;a|kUWxY{5@rz z$-_^y?^d0y=us6Yi6`!4vqs-6WH^3oK7`)5#5-_s;#CqJi%rcb(eoZP^X}YRLFDLh z)*B5?J<-Az*+f4WnCeSt@q1iGFmQ(F_3G2|s_!OHt9r2=L(Z1>&qi+UwQtMluyaTH z|7>35atPO}?-nLh{xs{@vGWxxVe~Y-uK%??h<0WIVAn)*7q%4f4Qf=1##Ga`U@n

    B^rbpmtW-)H>#wQ5vLStma)sb;u&ci}B&5lm;yE3HJ{ zU*(}>BQR!nJ*cFsV&eR8^X$~V%CgZF+PhCThJAmp+O9kCJ>!=Q}E;ZZx8!Tz?XwB#)_J;JUWZ*}f zRZr)fu5^2*-a1RLyLHfH%$M{nM}xMn;pqY7!ok*AL${NJGXWE-?;Aq-1l>Vy?4BW~ zp+BU-pcQ3H5?D!r0yn^tOH=LdN*$CE=c*5jW}|=d#P$`7VroY3+n54Ig2D00(!JB) zUU(9bxG=w}+}3R7usJB~d)-F&x`p#Q{1Aub^aYJOGZV?gGbvB)OPytlKN|AN2zpmQ zK3q+ZaGW2iAs8Dw4=QhG_1Kiq%2fMYH$CPYrmll*@i>4UBa3Rzdy52BueV+3H95kT z1!eJ6SZ?#K@`07gVyVEvDNHtT#~TH->#YUH&SsDUlcB&lxwrI$*4v!&M5a8mF6}os zLoX<^(6%%M+tAjo_P#PyT@dPoAl2G^S>i||P^RqXFm!lFU2}Fn*WSTFGikw5m}vdP zyeP!%t8VY`vgcp}K(?SxoMl7N6E=dP=hrIc_HSQ=&hr z3*hFPvaIXc{QKP0{}2Te^gNQwD(W*H=GN>bm{QwJz?~e#VCuvbF`f+5omMRMp+O2u zm+jJATPNcS2)%VDJdu7#!b#gC@lGZ2)yT2gWO0G(QQ;m;F)5s(Ufb+-QY^jb7vNtr zH-MH&tWy5^?JqS1p=s$kUHLt^zI&-xZq|Afh0OGg2isp6rwr7t_Ve#`W#}HZ1YL?f zCU-=SDPz`AtVX9M=>dDIaD z3#ZMDo~mBhovZ$)^WPfu+EX1E4&8$HlzfcaVC)M?+X=gV9J7WCv?5SG_+z-qhepr8 zS111LE&OiI!pJDc)oIAF*Tm*&*)5on!De?oj@QkIB1k8DB&!NsE|q(SM{i&J_GO%8 zp(kjzLUv%KW%FOk)u&Va9zH&M{NK>L`)`w>@Kyy1u~GlOYIA)=7Ga;^KH|L63po`xBNb*@Oz>}VxFv7_2-!;wQY^EwTK-Z;pQ1rQ^ml7h_- zas_i2hiBZNU=n1Uxbh~8CduiZm4W?ov*BSDhvGokwTP)2=A_l-Z|=j5wDIkAu>w^;5eIkThit5Ke<2w=TL# zwz6>|cj=z1KrU`9M(?ASF>C`UPw6L?1>_y5kx9iAmclj9rOgOnDTy6ho7c_xYQx}` zDi-q|m!py$`&TLejs&okyNAw#9GGuF=c}g{cW`fRBbvKD=JX=?@9mEEt!(^a`5J}b z8m|HP4x6PmQ(B+o9b;pLmb_F!xTemRK2PEuXtGdvyS(85Hw=r5Fv-Y^NotbpMe1x~ z-sUx*63!e9+Nkhjx?Bog(`(7Zji+Fi9q`fHT3Ht}HMJ6J6&3oI7xYnC>=QfZJkJg% zIv`sUdXbBT4lJw4nFO!&PSmIUMn89whkSz+{#fFJ8MP+jWfO>nD4GbKv?f(R60j47 zo2N+M#*UE8HQl9ky{vo`a-kD*AvfAAT%yy-8)_a?Q1Dy6vsvIV8N-xCuD*S$ z2!;Q?z5>r+FiLO+TI!4Ke%xACag>h2TgPxuG{4w|oQ4keiFiVcSuDO;=Wo10+LCEU zdkST`ZD_ zXt))@Z5tu#2=ZIGi>T?(&GZQJT3%jxi7NBy4 zX))Lqd&*BWKsJ&9PerU$@B`riiJvx|xUX)QT)8m&WejT{cePI#{6= zZu(6#Ih`^0F7P4b4FdnmMynVP+osO9c4DZ`?12u9OZJpkKFqQQ$9n}YxJPj7sL}xI zOs`ZElx{}zn#tSvO}kQieS`+_8pK+SA)Z|T*p4uAN1EXcY*a5vNtnV|AwD!eITQ`} zdWKKXZuhzglZV}4qC*inD0=JO*9rs6&=!mXeOXlh5;*fab!uUgR~Q-bCo$ zH@p)0^>B(70tTAVH<3ew8lXPfF@&7ecRNmRf=kJ8Z=G2?|C zcxeOP1<9~l_$k7U7A_RuoEBh7`(ijLQ3t_cw8<#a0dZc2EoFXZ`|5>={*0?pdRzxn zG|HK#f#7m(4o<-aOC__lVL#?@U6Am*mMk>%jsG5 z)1C&yGXINdw<~f$=pWMM()9qPokyTtKUepl3`K01kcJb?kC(vL_-#_qdhM(vzATJW zag!xZr`gb5fgJh&0~}SY{l!CS;KVCW#=eW?5LMz>fV+tJ``4jK*~0Ll%_i5!ltKCe z9P0+P_mmb@Q7Ik~GHC6I=(0`RCk-edu6s8FsWcF8abojj;67f6($8##_&W`pTTeiBDI&P6$>iD%ji& zRTVgJYjZbm88Y{^c5)|i?0&GjjA;rLm~W51lkV8Yog=+Hs4nXJO>(K4mAbF5>(fJS ziXplf`N(oiQN?t4oVtZZ!%&PjP>Z@s->(+4Cs3M7Fq9n=*$6_Vz;jnZJ+XJPKVhRL z^VMuo`?l-9@4_l8stQCSQJ^ngx`Lq@iKy!X)PuW<1MY|-|G~KLa|Mg)Sra06E$Y)IS)7AR@_g~+hXs{5@q^bES=mH~5zC-2Wuc<` zv!xedQoKlnmvxL;+%-s$wGs90Xv`A#t6RXH+5rQ7D+li{as8w&m=Mvu?hl%xPF$@9 zjX4VC>08dwG#=aauSxx~&-)C$jF9dhUW+Q-JuziRJiOw=$M4)|2oh|_IPkkP;3Ic` z63)#Tf@d56?)Vw;QADgPQ`FU=3WAVsevuzhz?p9JiQQArDr(nwzq5rcw{{+;z<=1P z{~T;X5t%5xZehNoEp7nw+Q5aT@qo^CzvX>IVkti9i7kewJ?Sg%nfulI)#)d0&U1u- zVN8b(cZE%TX&h>?vlna!*;!e9X!9vX%!@0Li3^5ky*Zo9$Se!y!t|4?yJF7;c`~+u zG*^sH>_)bW#WzxpB+Tmedr)LH=j|1+>!HA631IC$TkLzRQ|lR3y7}415y?uRq!0P#cDxpI!_2TU@5r z*gnL)tWhtvm=R6?iUyh&#Z4!7AVlHA^vnyy#o&Q`+%>Z1!O)DHu~`-J#S#R)v_ zjeP<0%wf{|UU@ps1`hmy-Tj`*V(-=&>s`I+=9Ut<#-(C=E#Ao;CV3~1M@10QB>Fv3 zO~8n}aAvp|GMgS7n&FqjQfXgcs@!Gs*s${yjWGxD zGJf3dGaDx{lv>ZH%`VRPkT*%+DZbRm`tDtihWw|lkk5lX`EcH3o!s}$P=IzwRsQ$$ zct|RszOtnTOogMMbqNSd6u6CRr*O#(p}pw_ZUbF6J<6;hf)y%k}WAH!|JH(1H~ZY@NhOah|Q zcq)noV{Lhc1X8_5$HA@#6Judh}hXz@Y9%V3z^~D=k zU;&8gT#y^#A=fp_En~t4K>D$8z-|0|!?mI%ryVRL339!rKU`Po!JO?i54ASwCpz2_ z9(@OztA8WfEl@G<;GbNY(5@HuowE=H{^2ZqYB%y~OozQf&K1*G3n-=XwI_u_;me^R z_lS|(T9cR0zJoVl;B007m~v4k$)y6mi|vv<7s5JATN$|f&j%EHWbi4m#Vvf$o?7}_ zPyS^cT{S`IMpCjmtI3Q5PcLGo>F?K`cA+G&obgk?fxg$xe|_^<=`%EN6Qhry>Nn$> zSq|M>M4ClsY0Vu7;|A-z^H{aHK6rwklB{5kkw7_qTwJX`7RomPBvYVi3D^bb;VFKr zGwC(*Y#~A?1D6$5fRSTG$UDcB7K+awHdnZ^6cqLR?1}I=b&7NX3Wj>D`tM$tix$rr z8iOZ!5Q@hdPl<6d*TV-lCMJ=Iz$Fa25u-N{0?<96ky1s$4kCK|@N7)!=sG8)k%f{t z(UFD_4uo9(hr*SW(9KxtJM6ymW`R6&iWdGVgj%u!h zdxNdn{dNp#ajZp+j}dm+CPi(Ok;%FST1z%@8(!m8n^^o1fUqb)z+ zoF^%~#^r556`tg}IbJzvi;wWPR!upX>EG@i_I=h?pO7Ocy`J!wQyn(6+qYNE#|=(0 zx0VA0qwnA$q5-9lY+<95x-Wf)K05)MKBkdI4XL4(oF6o;Ys$D6(V8yu>&Fe;CKQg> zhScek~F`wG{U&8viOWiL&KuuykS#J?cyb(zsMc=DfXA&Q|D%a_kBUCZttte zNy3!V6&sJ`;1SM9(MR|VOadkF}_N@%a4t8D7bvAor5gK7}Gn z38baJoDg7!Tel_Mur!Gr>4Ww3mah$7m92+Ca4hVJnOJV)V%;~z>V~qe5mFyZ<0BGb zajrpk`xFa1h#}di$8QUsAiOM5CGE>Y_h_?|>~W3(Y9D6K6`v$+7KAZzPt$;nh^sxp zRp+(85p129J8#URhviwegjM$RI@|gnmCD!6`?eqf$qyU&mygNPPY=B%C5vHi880ea z7dXh7fg9TZOPkhjv9WbPc8!hD>MHIt1EStE*4ad|^h|vAo=v}}><1ZRugXK7jE4i6 zvvqEN7-Eb$tG(;(wNkmJ549;Jy&6X2je}AE-6LNg8S{j z5ZyLcho%{);F2YQZ}V9`d7eD{{6UN4>?PDoG=t z` z$nonlPKe0FC^PC;R!z*)K|h!m*^3;x=FOKf5d$L}3sH)IrzgR6Nthn~nnwD-_d>)7 zZco1|M{mqRZOzhQ9^Vrl>wLwakYe3WS)}MD-Oxn?>?-rNj~8{L)=pkCi{fPb6*#Ht zTB*GbAmr`M+59VZzVkPh?78DvaN7vgi>j3|mOH6YQ*eu=Dx|1_r&o(%uJUYPN7gx}pa&_LUj$t| z69llKZ`&TuCny~^(oQvCCooS6gN4RDv58?>0WD*b#@(({7HB$p?!`p1aXiZInZ`L| zhCU;t>)a0vlAGN)V1dP?|Ast@J%v+on49>9>W;jqG+TDVb{t+}J8s*h z&#r^*%%S(Y*yw#q=U=rH^@7s>PuI!PX-{6kijCdW32w5Ictei)Eb7vOb$qv@?^kAA zQWB5uh8;8IGE=qLT`X~&yU6Ms&Md=C?_r#0G}*(G(O`hQSk?Q^9g(qF)Er)nw?+Kk zif9JN?}@e|W(7IRFJyYPxZ+mQLRUd2$&Eb~>3{ab9%WEgA&>+jyeaKg5yyjvZ~c zy}x`CY@OC0Bz?6017A{wTloG-+plq`+O}$Q4ktc&WL{bP%-MZPq==(_rzD11Y|8qi zpZ(oWvcu-3NSbA+Z%H*GOul)hcN$V`w1>{0oeggl%`IGTUNpwlwLLof&b_2gOM9e_ z{!Xua;~1m+;hd8AW&B!QwBd=^@WKsf4ak+u2HwIcX9dj=kbmbN+nA=y3t4rpTqRR9 zyxmwzCYBo*@p}M~+R-kD{w|Pw$$m`G78*y%e^-x?5PwBbKU;IiA~WnQziG_Ab>{j} zTDV;YQcq@;xsG46PT;F5h*wE}C>tyiWu68`@a|JQLI*>3AU^2%wHqEe_#4W-G29@a z8V@hAQliWTpFa4tx}ZI_qH2px>L{Eoru^3Bwdb_t)nIH_F%jt1?I4sPT=J~tfL zG~gLZPNiwk%dgUF%D%Z$EIU8XVMtT9>9W&B>3sC8Zu{7z#yfCQh{ctDfn}S~p0G;n zb?>jTLIP*)v*|8KlTCIQ79fSSp0Ge3U079K1NLfYXx8XB*qT%;r$pR?r}d%E>F0?4 zrC4`Z!gTfXiXXXIPcM8@HLJNlGiWziaYwXuEX=1WKm2&+dCfS<@XPVJ*pl@8SoHE^ z*?9R>nu^{Nq34h9Wj`u>*x#adcWW6jFa{(s!RVehE%(S-FYR>5j@_iw697!KZe9Ur zwQT(N-3Io}s83b!+`zagsY>&xuFN+S04esiMt!(SS-y_k0hgQi(|`F4iV8;|Co=FM zut2w-!#Bf#UjjHlA!GUQFJrmln%ueHocouVUruR%*!7ol19o`7+^5n0%clXdR&<)i zjNJ(QlN?>cByfGVB(vFDx327Rt6}CqFKZ&t?}J?P?2U3?9b~tce@kIEM2+_?fbanq z{=eHlpVej~L9u!o06XF#PE1U^meJwu!yD38jzj?L~Vv_*)81H6 z=v;>F|F5f3FRiAc9Z{@73O?Qzj4 z(tuwmrbJXd;*OMa__*?BmJda{QzvP(_D)(?WGjo}_Y4&di8Mt9+Prb?#2#1&#oNWA$(Gqv9)}(vj&#VYE`+`-<9sgsHIMhz4GOW^DNwL z^C-U%_VIrDae#QiZ^?51;BSo%mAo}-E# z+*@~6J+CFy{#ZZUwVY6rFx)rE^7~GwxG=cN<;~ZsrDJ8uoKMAt!~uhfHl5b3! z&pW#PsI^Z3>X&7g!Lob+V;V1lyv z^b~R81SMb}oJ)wPGNmy}Q6G|wRbjeG#6GT|qW=G_!gXVi{P1k?^+XmNe^=mG zgpU0qJ+jY5y=o#9jIBA5W>P){T%L?84pD=501mmhr>vkNVJt%$-0MWM%0YtbFCq zDjUu&TwkeumL7M>#lA;t>>|#LlTu>|$TtjFOo#A0AAkoP*4J=H8Z2&#BxIBbqPx3O znzJo>8ocZ-+Ojq${S?}lsi$jh@D8Murii$%y%cjio?Co9^mY@<%tr!v7#u*^0@TlE zF~)y?81x8$+bAFItDvw`2fbH3hKEzWIH+w!p&WDShljAfsCJlE2W&p!gqr$+K^#B} z4DE4pCQMJcyCXdrCOw0a5(24V$XiK#Nn9Hj6*T~w^>Gwk40ga_Z0`eB9i|W!01}85 zV?sjTs~*94sufitWRTAILKT}2ONZepXvv~Aa6}_fWr^d#k;y}~{YU&%nE^$0_10x=7f2>7j_(%6Iigm=Slik6 z$bfQ2d&T0O=M{p|^0h_c=hc$rqEWS8Q!M(ONx#@_bNP6%59~3&E%p9Dv2kL9`1xCl zjv%KNlhz!e-NWZ4Z<@3cM(O>6xtRkb&Ihk*R|j(>3TaQbgX7%8LdC0u`}SG;VzZb; zdCzO*E$iIYH_F2$}jPb(C6YD@3&+V)W&me>QM z@cvJu@b8tjEuqOGcdIVRjpp3{l`RcC?p9;S=5pd1oCGf$97fbsZt|EgJs;y>l`Iv@ zhDlxF6gBCEwBd=_mp|X}3L~2Ql5#E@Q@h25eY`rH6czK=^#hNGQb4vwhdmmvKA}|N z3K}8M(~F{!i)$w|n;i!X9%H-ms~G?f^GU9wp^QP`ac#B(63KeB7wN#?E^>)?V%ic~{h9%bSL0{tHMD!=Lgp=0ih zvADgXJ<&;AJ!f;i zw=X}yxoebj)(p^&(YWCjZI58_qEfcOw&*KqM&P>mqmX-LlxvbZ=jyzkN?~6=E>WcR zu8K9^TJQ3TntCcvr`Ctyt4hBb5M64yYwB{Pc@g}nzFh$GJ7w`4jgT;Zo_O^tDzn4W zXLekO`^y8uyS4|MNfcyf?Gz?l3hgx`{s09Lz zzwWV6T@X|O<_Ue!4m#ZqFz~Y$z1PB(CPqQO#y0h7zC{zNooy?Aq<@M=NDaD0CO!%v zNqbjkoPjhPzyw2&DaAWbd{x&zGAnUSQd0~HwWr9e(mK*jFPp02>u(C@Qi6$<^~YHi zM#prqHV8C#T@oIAuG~6E(o)+cd6XgqSv?-AF!ALNO5$gg_gcltS{611;?JOnh1qSB zze4DMCHL_y4j*s-mt_4LULf$j0v0ru#|J$~fVRl5n=FNJhs$G>av&N#;KMG@BRU@= zKQ@2jH1C6C8*se-8tnF3erEFi9Bs65*#Z6!znuAqEKT4l1I$NxJvX6yuGu2U>vB|- zTUxWlI{$%4*SPU{;?^$VnPbYI zCMzs_J2~mpE_cDx(00rL7h5Nq27NcZ_emE&hweH4qy#fGtV(_ryN@;45-V9UGh_ z?L#{a8PfY|i-(fN1rzbgp);AOpE$Gi?(VFEgXc_-F%NR<_K4m-tuF4zMu>CXCsO?V z!h_vv>(83d`}>o&&V(J)Mj*mCUVB_=Dgjh-|y7mP~|Vzxm$JDFaQr*X_`p}M{=M#PygF!g7M zL34z({%vAcfy(~zmVoep^qYAYdcV_!NIfzAu_i%)O6xGKzcm$ZG0 zE<0iSk>I+I*2Muz0~MbP&>d@MFKKPPnFw_$XnzB~X9dRa_yvPCxo2n(>;Ie$VwzWA2c=Ty`G>)2p|7ps} ziLRgI^^Z*bWESi3Z&7%B31ztB*3?umMU)Zlr~doVu^3Nx&AN`-bP8t-M{&g8E3ZJTxd>ZAN!@RkpQ^B} zfF8jpaoaQ2cJEN9*}UG$JEL3E-VL?;Ma2a>-@r755%E~HcD_maSOsB+lTYoyRzO%4 zwUHO9b}W@)LonmIXW6p!3u#k5n6a=VKbD|o)B-skgYNPQ_ljVMJ4YY;Tk>~Q4RZWb zdk6ADH+OpNj&57yS1vy$Z=#@L%Td$&xL19X6_yV$Eit=-PIpSbm(TqA_^q9aiLZ*k zZ>MHOm$Wxy9@P+M@EzGS>)_qPe2U7Ln@bdh#H&t5dvqA4;^cdnelnhyuhpV~b z@8YJREM6qVN=C%~Yq0aLVy3OjiIc(3vjp31HOEER|Lr1YwGtndkVra6n$WTx2M)aP z7bHDeysf=cDzE6&0xz`k=yW)7<>i!*N-V!5aIB0#jcZ8=8g6IzF})YTXrzMYNxg>5 zGHTMD0C-(_n`37$>^rlwi<>EnN5*6)gX8#B&@;;b+DHy`>+65NZ7{v-{r+Q?RJg?s zo4V-$q#?HF1TqgFFdlG}BSif8txYk0NB~LMh9k>jeLB~zfZAo^ZOyXsDcp;8e=DR& zb^KEXGY*JgFc=Z*BE)3ODh&0pnOMreJ-=`?%n*;i|f&ELLB77 z?A}Zsv*MTKU?uG*)n?jPFABJV_WZ!$Y#!683LkK^2jesokm~B$z=0H=R_kpYHcWhY z{*{)+x}os5tCRhWH7y&rHwiTum@MV8`6H3T@E0>0yz3oX`n1`M@KLr^;RW8GGw5sp zBmqG80GA({y#c!#X@>WJm*F=f^R6Ke43dfSHFay3H|W0I@)6c%!<4b}hwa_bGpGq| zpL6*V;w1Kuq50d>O>@|!gR)n1r5Db`?%}d)FG-tgbLTZ!U1P5vcA0v|%u+pEnE7ll zZiiZQf3b)hd(pT%rhP868rf2nE88EI!gE}j=J#fNNt8kF=ku$;IZ9!a-r(MS#7(?l z8{m>UmT5P#KR3cG)Fxmq*7>!HHEiD4T+O!3x-=pHBWzdvrl~521rShWeiQlE`f>av zAmjZ}K#K$wJ$|T^PyVn+C5^lV9<^m)sh2&Z`QLSFo*lC+uoro}LVy_gy2X zPt1?AAg3v!B~nuNDi=Ipnw$<$_#R?JoG0SUT2rQZe|oxwmG z%=0d7s-?iI^$Ab**@A3(Cwzi6rs{hyBcMpOp?sZSPZ1#5;x73OJJsa=_ia(<@>t0G z|M-rDzqQJG6fp*zVu@koNc&t>SNbU$= zYy&eC`xakm$i81BU)OlK4=uSQG5AUW4^=5WDge43G!@K__7bHY*z1)ObUP)56Dnd##oU~F1-21B2f*8L-PB<)2WLYE@8y;GBEqSL@xzq?0 z@E~w6I44ksDyC5(aDAl8N`-?^whn^2dTfgL|Lx1L_i++)roR%GsEq|ZtXyM<#TXYF z=}bGRAXr4;#5Ye;6uyBRTx%%rn!SawT5RPht4b$}Rp@Oi8-uSWGBWn!LXU6uHgC*_;F?P-s2T*Hp_8M(U0x`Z zsirsn&&#F9_WxuzD!hRCGlK~Pf(ynn4|B;ax0-MSo5R>t{2sI7bsd;|SEoHtyeSI; zZ!8PRHUI${0Ey|2_$!vMgvE6n$#td%MyBWnQrW^A^nhCJ`nr~yxdYF2deT`#By@h3 zdo|NFpx>PNU~J%OvE%ITYeDsc<6DLDFx^W><|kUBqg-lAptIFUDMyj?=K_W-QhA)o z&9d`p^3==~sG#vJ=MBIOx2oK`1X8Y>>{6Po?@Pgv;e8?NjEz9s9d0hGd!%VK=~U{b z{(%=SZ32a!0Rf1I zhS-`1Bn!#4?-Lgh=zzTp(X@xCWW^-Kw+m~-EmD3|5H>Mr&|SAGoE5A$XS%H;URfk4 zqw`*?tbIINr!(aB>(JdFk!Nzk2_*}^dwSeJJuyVPeQZ|IaTa%fw+BWjalCLD%~Dxi zo8D9FhpL;sbC_AZ#qjfLM@5}|IX~Jah~u`gy&@6t<`5Rmz}u$6n3-^dTlk`} zaW3@@T1{bdN`;;+y7;Q{RLoEAYODlHYRPFD=;Fta4y_<{F7ggF*wez>sw(X(9Oz*7 zpEa*!z4OQ{lUE`1wJdn8D}%2q_eJ)nz15?!hcy5tAQv! zB^;%xq>N|U^{i170Mf*{Vg%?bk`-R-DERfZj%~vO<9k+@qb{6@aQ+>`+qp{ecCRjH zq(P5d&N40_6aCW24X$B=mA9u3GS{#z{i9VjTO*%y2V$#zWCI_9oc^}0_ca8i+ih*N zx-Jn5_nO%NB0jdXVR(o)!z`$vg7l0xH9?X(#g7LGyr%i#pBmhb)WX)A&A!1jD!&|*z$u-Z8tade;THm#EYiu>)ZULP?{ z^9i=WuQut(1+l7Z2l>iEjCr}=ML-}*d{ktZc5r_94VVS-rMw)G^zrmUTLWxp_f z^p$-OH3Uj`S^Pu6NZ)`HFJxS`t2P%0qd{yDW)~42glZED;oV)?(PR#PZZ9*>AyN0Q zD_K9mC!MPyGBS<8UZS?z*u?;@BVkW7v_ z1(>))AqBc`y~R%79t|}?!|6t(d~L-Vm4e`O4Sd0^K;XNqRzE3~8+EfJnsG}O}XraXu} z`_$n`48Wwhy)nd*TkdsWU6!KamWT85QPWEkpS)c#r86YKGCih$>tyHIZj z2xel@_Sq`iuF>0EkCvS_H?P$iaJPkr_(zRZ ze|~Zr>Injrt$on8LFtjlU=*<^ zRF3BSb1wmJ((a5TTzN~XfFC+&H`WHVq)|(_U_1m$+z_>0mJ%&wZktW;<}jkUF~sUE zK_dQG&l}14sB*n)T{@q0LI-LsGBuf(kMX7TQ zN4+Lz0Wu%uU(Z|*|xYVna(0xvOP2aaOwF!1!gs-Pu5@bR40WR#olBtMn)$nR&pnuM{T4TuvL z$M3O?5lp?P**>YDx!;FeVWT-}f4d>F(jIh)`ie=q0SbC*z7wYz>#e z0LV#U(ZJBc!lS;>v3UKo$SyvHx1V)~Wf1G{7Z9?g@!j8UDm8@G+Z5pRAuK^$Hjs&_ z^)9v0y^##@08kb0eNDX=$OQ;qvvU6aTtSRmcl>HjXPwI(6+cV+Yg+U{ZDOG}PTV~> zKDBVVyO!CT%L^+h#H6dTyKC#{4<1gAN%k1 z*(@w&J;K_~-8KgwkU6rW<#b$>x2GpEsgbLXK4>d50z6xnq5wbMUw6n};4tD@ETEjJM&ejY<0KxhDg+N4VCA<;sj0)6?PCiWt>6oj!tt#Lz z4tjr`e}{Lz&QzSCTS}py2Yd4+HsEq-G)xq0?A9F6l4LcnCkj5eTdVC)WmF>V>8UL)7+Bv#G zoBitq1jAW!+SAE^xyPgHpWwFtv%-b{y5BXOB*!wbgP@ET?2!dJYR9>Sqo4!xOSZ7Os!;hon!R$qPvmI12wD=G}Pej^OZ;E-+bI!JT%-% z|AdWw4^~AoS#Q^hgaA4RFb?``9&hCp3B~S#=;&R&B8pL48VxL9Kbq z%5_3R0H8eO>xqTPvgSjv77Ji*5dKbd$Dq1D{DJNO2rl*O#jX;IKwm_?ERTLDyy^%6 z;s04}f*w72N{_o%q=|9^?VcyUH?Oog@EDQE4zMZRfVMyfY<_{H+UadKx3;~U7L=YY zDwFM1@c3=Y*g<`^^buEMs{7LdJ(=)pbVumXPIx_Phx&q8+!WKYOH!RN8N9IKN0Y}S z*^5Tc&qgv6%+6`Yy#kZnc${ZS(mv5_m)~9b?^gn9*IWaj#4?aZM;~}VL{>Mm=uMGz zc*G|`N?At0y-qB8_1o`WATcueWU^%iIIAqausu3FM-0Gqku&Z^;Z+&4*ME!Jj)Kxh zi%KhYZd0G|4I*ChL{D>cCt@1BUq6smNv0iVM!lM-rETbN$q$Vte_LEt2#p$goZk;D z_jTBAg%hXrI?}tS+kNi^BCj6L@b*VSg~*55QwiR=EOWho@g(e>vJe`JPXVsn%{dF# z6lF{L06DHwvwCX>)AuLI3V-z_*0f6|Q@0@Do;z_~WSST3umVw~!z)DS!OYT58B0<9CbIoE)sHg1Bwj{k1 z07}heY#LXSfV=>%0)WiiFY=-2O>JP=cMs zlDyq?585RK7 zPQhc7ygaiL^o5@z9;hY0Qx!Ro8^k=jG4_G6SSK15ZaL!6#T<(*ecR)AVH=+UhDvIe zSTPli+DD$vSHzSY?Ic+C32~LjrMuK6%qi^z$rBKmfDkK)5kYTS=u&||QcEG3 zA85qT8`4l0@N)-Ni#t{?<~<6aZo=469TNMgcgMk%Ti?x2+*)w;Wa#tj09c6V{Cb2e z&Fk1D5k)y~n`h0UGe0XD8_*Sh;uc_824fj+Ek24e&g=rj>2U`@Est3dfjmQ_V(3m6 z^d~`%;;XEe7W;mSO(7Ex1OUhAN^U9c)ont64KjKAzC*Df zKsuFJ3s3DHN_`0#mSq1Hsn1xq?;B03F!}TQ~#8-%YV<`P0YrFgJnHD zXgCO1xwWrKniL|yP_i9k(Y7$@|h&p<`f$%R~HF$m{) zSmo?0|0XhVAU>oOCMR0{Q&6jw#B|UCA%2F^kvMcWnOaugXU0B#ARncSr>#qcOA|@ieAN2!72{d?>t`I24LN1k;!Q?iOQkx$u zFFlM!{e$zsoDToN@TDE<*Kj@?*;n^TrPp1CP{g$;`jF)#~K;{u{ni zoygk%%l#jJnOnX6@QU`4KDTI}URK8F;@*~0Chxw$q)s56(VzN-(Uz(ArP$z^5Bj~J zexm>t!A0NyJ%+MIT!LNM*t`ySsGVO%D}2v>d0p~N6{6&S+-_K2X*jqAhn^)I81ED{#x@OD~uON^X+AYR*hlN7Y$kMQ&@!z zmUJplGGMkgI$${8@2nw*lU_M}wZUGTmt^$KU!qgDRuG?=Y4Cx&t-(WO+C<3V6!?tUf;Yb{g?(G&4=KB2o!##9RbqV$)y6xb04)Tj~eacOYTbEvZH_?Rc{3{ z@Xdvr=0C2T{U$4xcscz-cWiCVL=|0p^|?&c)$T@@^jiF{_O33fsVfU-WFU?VMn?vy z7NUj0{wPdEfePfZib!b;IPJ7FrU)rhQjBOFG$D{5kt%g8)@53e2FU7IaAsK{5{O8E zfDuwek|mK6NRx;WV$4kfBqWfVpSc%Y)Teow)tQ%hyX)R__Sxs0@B8*X4`<(gJFh62 zAM?)=oz?;*x$E*uT(>;!bTxag*P|%~Kkeek)#66eoz?JYMN0;Q%1^G@cd6N^cW?QO zKFR#8jqz2sa1K+!!fk?UfG6M0cGeW$Rh*BN3lz;t&q%%xUl9hovka;p=L-&nx{%Cx zu`lA`i^@i-iwJT*X-J>F@)ppQkoyjWR((2^6YO=y86_J*!`ScPbs5?W$6GRX11L-c z61$_adf2R&RDN}oh;GGdM-r=40^lgWo5)-3C<^dR3Im-XaG%$$dsZ(6S30TmOsF=ZCt`AJru-@7_#=v z#K@0M43dl=2sQQXy5i0s@|svz1-NcWKITICA>Jtd+Z2CDtO2r(3JFU(5VK;SJpgK* zB?-`__dS}N!u~+`1V4}Lj^ODjmg}cNb*?yXH-%nrDU-6sI@gJi*5<)fAf57m3a0=|1y zzQe19ub)$0rHU&ivnW#qtaa#xg}P&tL=2x$!JfmPCibE`_MeLb#lXuvba@=&4Gd`% zc}yH7{|&_-+HhYIXu6TFW99Tkbi9wJs*pK8L5adwQVV-aw90S4UqRTj@B;7fgWj+J)K~Cp z6d4wXU4K0DtL2TqoR3Kj`cJz#ynWtVns|bk6+uH|cqi1~RVvgXVvBm7Nfntf>gk1r zBP5)4Ap*s0gB*_OCeLw|g_g0`Nl!4tzfM!B8HXkmVg=!R_eD4wE_x${ZJiZIfy_p#~yw1P`1y{$1?Yr(?1>hA|GXw&WQDcMH))%C2uY8jm- zZ8*O+kK=x$-?JFI_M?@ce=SBu=d0Uzn)We>ntZsm@%Vs=CbU=SAqrmhjhRL_>lIe5 zxnc3s>)@o=7SB62-ry$MAgsLhAk}3J*!*hXql~z5+Xpy|LD|7MAFQvD52dlOATQy| z`LioCN6^0R8QPD8%!SHL{78S_cnZz+IdIM;O>4^AeXp`S!X+~dN=PooVrZD2p2rS3 znS+m;atfc=_(`$-?y&$!X&A0#N$hg<_S3?xD?D9>|HC~G8~91Jxxis#lL8~%<~GJX zuIMT0(B8H+Q8DOgL$&TE5UZiMz4{x+NDC5w)WMJAsb0b<7KbU3d+cR{H_=dAl$=Ry zxQQtLvWU#boGrQi4qO+y%VINeCs|$Ev-!Y>&~bqdFML9G8gahcboA=X*V!R*T~TJ; z)GiP*g}0D(zOJ@u4;9g&rReoOOJH?Kc9gRsv_hM09lu8!HU$}UoU1Kps2&_|8e3Hw z7^^t1!}1kJ6p>{Kn|$pID9 zuD99O_2mTE5YroU>A4gV&L=+RRnbu~l|M%Z$OfaWX7CrJ+kcnb|86wHuOYs7+6fml z@bKZ|NQ@MK%h@}&O1x%x`S+heQrr3sAZK=_02%^(CsckXhb{~>^L>-q(g;-Q3rMO$ z%MxVA1uHME`g;nhW^*-3;u_M4eQBVKd8TbndwGJTzqJk*Yo&Pue->kr> b$cH8$9*ykFzw<4;52(!atUb+d=AZf(8+y@U literal 0 HcmV?d00001 diff --git a/samples/webrequest/.gitignore b/samples/webrequest/.gitignore new file mode 100644 index 0000000..b83d222 --- /dev/null +++ b/samples/webrequest/.gitignore @@ -0,0 +1 @@ +/target/ diff --git a/samples/webrequest/pom.xml b/samples/webrequest/pom.xml new file mode 100644 index 0000000..9a66390 --- /dev/null +++ b/samples/webrequest/pom.xml @@ -0,0 +1,84 @@ + + 4.0.0 + + com.dynatrace.oneagent.sdk.samples.webrequest + webrequest-sample + 1.3.0 + jar + + + + com.dynatrace.oneagent.sdk.java + oneagent-sdk + 1.3.0 + compile + + + + https://github.com/Dynatrace/OneAgent-SDK-Java + Dynatrace OneAgent SDK Java In-Process-Linking sample + + Dynatrace + http://www.dynatrace.com + + + + 1.6 + 1.6 + UTF-8 + UTF-8 + + + + + + + + + org.apache.maven.plugins + maven-jar-plugin + 2.4 + + + + true + com.dynatrace.oneagent.sdk.samples.webrequest.IncomingWebRequestApp + + + + + + org.codehaus.mojo + exec-maven-plugin + 1.6.0 + + + + exec + + + + + java + + ${agent.agentpath} + -classpath + + com.dynatrace.oneagent.sdk.samples.webrequest.IncomingWebRequestApp + + + + + + + \ No newline at end of file diff --git a/samples/webrequest/src/main/java/com/dynatrace/oneagent/sdk/samples/webrequest/FakedWebserver.java b/samples/webrequest/src/main/java/com/dynatrace/oneagent/sdk/samples/webrequest/FakedWebserver.java new file mode 100644 index 0000000..0edf80b --- /dev/null +++ b/samples/webrequest/src/main/java/com/dynatrace/oneagent/sdk/samples/webrequest/FakedWebserver.java @@ -0,0 +1,100 @@ +package com.dynatrace.oneagent.sdk.samples.webrequest; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import com.dynatrace.oneagent.sdk.api.IncomingWebRequestTracer; +import com.dynatrace.oneagent.sdk.api.OneAgentSDK; +import com.dynatrace.oneagent.sdk.api.infos.WebApplicationInfo; + +public class FakedWebserver { + + private final OneAgentSDK oneAgentSDK; + private final WebApplicationInfo webAppInfo; + + public FakedWebserver(OneAgentSDK oneAgentSDK) { + this.oneAgentSDK = oneAgentSDK; + webAppInfo = oneAgentSDK.createWebApplicationInfo("servername", "BillingService", "/billing"); + } + + public static class HttpResponse { + + public void setStatus(int i) { + + } + + } + + public static class HttpRequest { + private final String remoteHostName; + private final String uri; + private final String method; + + public HttpRequest(String uri, String method, String remoteHostName) { + this.uri = uri; + this.method = method; + this.remoteHostName = remoteHostName; + } + + public String getUri() { + return uri; + } + + public String getMethod() { + return method; + } + + public Map getHeaders() { + Map receivedHeaders = new HashMap(); + // receivedHeaders.put("x-Dynatrace", ""); + return receivedHeaders; + } + + public Map> getParameters() { + return new HashMap>(); + } + + public String getRemoteHostName() { + return remoteHostName; + } + + + } + + /** faked http request handling. shows usage of OneAgent SDK's incoming webrequest API */ + public HttpResponse serve(HttpRequest session) { + String url = session.getUri(); + + IncomingWebRequestTracer incomingWebrequestTracer = oneAgentSDK.traceIncomingWebRequest(webAppInfo, url, session.getMethod()); + + // add request header, parameter and remote address before start: + for (Entry headerField : session.getHeaders().entrySet()) { + incomingWebrequestTracer.addRequestHeader(headerField.getKey(), headerField.getValue()); + } + for (Entry> headerField : session.getParameters().entrySet()) { + for (String value : headerField.getValue()) { + incomingWebrequestTracer.addParameter(headerField.getKey(), value); + } + } + incomingWebrequestTracer.setRemoteAddress(session.getRemoteHostName()); + + incomingWebrequestTracer.start(); + HttpResponse response = new HttpResponse(); + try { + response.setStatus(200); + incomingWebrequestTracer.setStatusCode(200); + return response; + } catch (Exception e) { + // we assume, container is sending http 500 in case of exception is thrown while serving an request: + incomingWebrequestTracer.error(e); + e.printStackTrace(); + throw new RuntimeException(e); + } finally { + incomingWebrequestTracer.end(); + } + } + + +} diff --git a/samples/webrequest/src/main/java/com/dynatrace/oneagent/sdk/samples/webrequest/IncomingWebRequestApp.java b/samples/webrequest/src/main/java/com/dynatrace/oneagent/sdk/samples/webrequest/IncomingWebRequestApp.java new file mode 100644 index 0000000..dccb50e --- /dev/null +++ b/samples/webrequest/src/main/java/com/dynatrace/oneagent/sdk/samples/webrequest/IncomingWebRequestApp.java @@ -0,0 +1,80 @@ +package com.dynatrace.oneagent.sdk.samples.webrequest; + +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.io.IOException; +import java.sql.SQLException; + +import com.dynatrace.oneagent.sdk.OneAgentSDKFactory; +import com.dynatrace.oneagent.sdk.api.OneAgentSDK; +import com.dynatrace.oneagent.sdk.samples.webrequest.FakedWebserver.HttpRequest; + +/** + * Sample application shows how incoming webrequests should be traced. + * + * @author Alram.Lechner + * + */ +public class IncomingWebRequestApp { + + private final OneAgentSDK oneAgentSdk; + private final FakedWebserver webServer; + + private IncomingWebRequestApp() { + oneAgentSdk = OneAgentSDKFactory.createInstance(); + oneAgentSdk.setLoggingCallback(new StdErrLoggingCallback()); + switch (oneAgentSdk.getCurrentState()) { + case ACTIVE: + System.out.println("SDK is active and capturing."); + break; + case PERMANENTLY_INACTIVE: + System.err.println( + "SDK is PERMANENT_INACTIVE; Probably no OneAgent injected or OneAgent is incompatible with SDK."); + break; + case TEMPORARILY_INACTIVE: + System.err.println( + "SDK is TEMPORARY_INACTIVE; OneAgent has been deactivated - check OneAgent configuration."); + break; + default: + System.err.println("SDK is in unknown state."); + break; + } + webServer = new FakedWebserver(oneAgentSdk); + } + + public static void main(String args[]) { + System.out.println("*************************************************************"); + System.out.println("** Running incoming webrequests sample **"); + System.out.println("*************************************************************"); + try { + IncomingWebRequestApp app = new IncomingWebRequestApp(); + app.runIncomingWebrequest(); + System.out.println("sample application stopped. sleeping a while, so OneAgent is able to send data to server ..."); + Thread.sleep(15000); // we have to wait - so OneAgent is able to send data to server + } catch (Exception e) { + System.err.println("in-process-linking sample failed: " + e.getMessage()); + e.printStackTrace(); + System.exit(-1); + } + } + + private void runIncomingWebrequest() throws IOException, ClassNotFoundException, InterruptedException, SQLException { + System.out.println("run faked incoming webrequest ..."); + webServer.serve(new HttpRequest("/billing/showBill?id=234324", "GET", "192.168.13.14")); + } + +} \ No newline at end of file diff --git a/samples/webrequest/src/main/java/com/dynatrace/oneagent/sdk/samples/webrequest/StdErrLoggingCallback.java b/samples/webrequest/src/main/java/com/dynatrace/oneagent/sdk/samples/webrequest/StdErrLoggingCallback.java new file mode 100644 index 0000000..032047b --- /dev/null +++ b/samples/webrequest/src/main/java/com/dynatrace/oneagent/sdk/samples/webrequest/StdErrLoggingCallback.java @@ -0,0 +1,37 @@ +package com.dynatrace.oneagent.sdk.samples.webrequest; + +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import com.dynatrace.oneagent.sdk.api.LoggingCallback; + +/** + * Implementation of OneAgent Logging Callback. Just printing output messages to + * std err. + */ +public class StdErrLoggingCallback implements LoggingCallback { + + @Override + public void error(String message) { + System.err.println("[OneAgent SDK ERROR]: " + message); + } + + @Override + public void warn(String message) { + System.err.println("[OneAgent SDK WARNING]: " + message); + } + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingWebRequestTracer.java b/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingWebRequestTracer.java new file mode 100644 index 0000000..96f7355 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingWebRequestTracer.java @@ -0,0 +1,64 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.api; + +/** + * Interface for incoming webrequest tracer. + * https://github.com/Dynatrace/OneAgent-SDK#webrequests + * + * @since 1.3 + */ +public interface IncomingWebRequestTracer extends Tracer, IncomingTaggable { + + /** + * Validates and sets the remote IP address of the incoming web request. This information is very useful to gain information about Load balancers, Proxies and ultimately the end user that is sending the request. + * + * @param remoteAddress remote IP address + */ + void setRemoteAddress(String remoteAddress); + + /** + * All HTTP request headers should be provided to this method. Selective capturing will be done based on sensor configuration. + * + * @param name HTTP request header field name + * @param value HTTP request header field value + */ + void addRequestHeader(String name, String value); + + /** + * All HTTP parameters should be provided to this method. Selective capturing will be done based on sensor configuration. + * + * @param name HTTP parameter name + * @param value HTTP parameter value + */ + void addParameter(String name, String value); + + /** + * All HTTP response headers should be provided to this method. Selective capturing will be done based on sensor configuration. + * + * @param name HTTP response header field name + * @param value HTTP response header field value + */ + void addResponseHeader(String name, String value); + + /** + * Sets the HTTP response status code. + * + * @param statusCode HTTP status code returned to client + */ + void setStatusCode(int statusCode); + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/OneAgentSDK.java b/src/main/java/com/dynatrace/oneagent/sdk/api/OneAgentSDK.java index 25b5663..ed3e371 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/OneAgentSDK.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/OneAgentSDK.java @@ -15,8 +15,9 @@ */ package com.dynatrace.oneagent.sdk.api; -import com.dynatrace.oneagent.sdk.api.enums.SDKState; import com.dynatrace.oneagent.sdk.api.enums.ChannelType; +import com.dynatrace.oneagent.sdk.api.enums.SDKState; +import com.dynatrace.oneagent.sdk.api.infos.WebApplicationInfo; /** * Root interface contains provided Agent SDK API calls. Basically the whole API @@ -29,6 +30,39 @@ */ public interface OneAgentSDK { + /** + * Using this headername to transport Dynatrace tag inside an outgoing http request ensures compatibility to Dynatrace built-in sensors. + */ + public static final String DYNATRACE_HTTP_HEADERNAME = "X-dynaTrace"; + + // ***** Web Requests (incoming) ***** + + /** + * Initializes a WebApplicationInfo instance that is required for tracing incoming web requests. This information determines the identity and name of the resulting Web Request service in dynatrace. + * Also see https://www.dynatrace.com/support/help/server-side-services/introduction/how-does-dynatrace-detect-and-name-services/#web-request-services for detail description of the meaning of the parameters. + * + * @param webServerName logical name of the web server. In case of a cluster every node in the cluster must report the same name here. + * Attention: Make sure not to use the host header for this parameter. Host headers are often spoofed and contain things like google or baidoo which do not reflect your setup. + * @param applicationID application ID of the web application + * @param contextRoot context root of the application. + * All URLs traced with the returned WebApplicationInfo, should start with provided context root. + * @return {@link WebApplicationInfo} instance to work with + * @since 1.3 + */ + WebApplicationInfo createWebApplicationInfo(String webServerName, String applicationID, String contextRoot); + + /** + * Traces an incoming web request. + * + * @param webApplicationInfo information about web application + * @param url (parts of a) URL, which will be parsed into: scheme, hostname/port, path & query + * Note: the hostname will be resolved by the Agent at start() call + * @param method HTTP request method + * @return {@link IncomingWebRequestTracer} to work with + * @since 1.3 + */ + IncomingWebRequestTracer traceIncomingWebRequest(WebApplicationInfo webApplicationInfo, String url, String method); + // ***** Remote Calls (outgoing & incoming) ***** /** diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/infos/WebApplicationInfo.java b/src/main/java/com/dynatrace/oneagent/sdk/api/infos/WebApplicationInfo.java new file mode 100644 index 0000000..60b3c89 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/infos/WebApplicationInfo.java @@ -0,0 +1,28 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.api.infos; + +import com.dynatrace.oneagent.sdk.api.OneAgentSDK; + +/** + * Type returned by {@link OneAgentSDK#createWebApplicationInfo(String, String, String)} + * + * @since 1.3 + * + */ +public interface WebApplicationInfo { + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/OneAgentSDKFactoryImpl.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/OneAgentSDKFactoryImpl.java index 5a56296..8ed3a9c 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/OneAgentSDKFactoryImpl.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/OneAgentSDKFactoryImpl.java @@ -27,7 +27,7 @@ public class OneAgentSDKFactoryImpl { /* increase version with every change. in case of non breaking change (to OneAgent), increase oneSdkFix only. */ static final int oneSdkMajor = 1; - static final int oneSdkMinor = 2; + static final int oneSdkMinor = 3; static final int oneSdkFix = 0; /** the only SDK instance (one for every classLoader) */ diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/IncomingWebRequestTracerNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/IncomingWebRequestTracerNoop.java new file mode 100644 index 0000000..834217d --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/IncomingWebRequestTracerNoop.java @@ -0,0 +1,60 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.impl.noop; + +import com.dynatrace.oneagent.sdk.api.IncomingWebRequestTracer; + +public class IncomingWebRequestTracerNoop extends NodeNoop implements IncomingWebRequestTracer { + + public static final IncomingWebRequestTracer INSTANCE = new IncomingWebRequestTracerNoop(); + + private IncomingWebRequestTracerNoop() { + } + + @Override + public void setDynatraceStringTag(String tag) { + } + + @Override + public void setDynatraceByteTag(byte[] tag) { + } + + @Override + public void setRemoteAddress(String remoteAddress) { + + } + + @Override + public void addRequestHeader(String name, String value) { + + } + + @Override + public void addParameter(String name, String value) { + + } + + @Override + public void addResponseHeader(String name, String value) { + + } + + @Override + public void setStatusCode(int statusCode) { + + } + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OneAgentSDKNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OneAgentSDKNoop.java index 2a45a9f..42f4da5 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OneAgentSDKNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OneAgentSDKNoop.java @@ -18,10 +18,12 @@ import com.dynatrace.oneagent.sdk.api.InProcessLink; import com.dynatrace.oneagent.sdk.api.InProcessLinkTracer; import com.dynatrace.oneagent.sdk.api.IncomingRemoteCallTracer; +import com.dynatrace.oneagent.sdk.api.IncomingWebRequestTracer; import com.dynatrace.oneagent.sdk.api.LoggingCallback; import com.dynatrace.oneagent.sdk.api.OneAgentSDK; import com.dynatrace.oneagent.sdk.api.OutgoingRemoteCallTracer; import com.dynatrace.oneagent.sdk.api.enums.SDKState; +import com.dynatrace.oneagent.sdk.api.infos.WebApplicationInfo; import com.dynatrace.oneagent.sdk.api.enums.ChannelType; /** @@ -32,6 +34,19 @@ */ public class OneAgentSDKNoop implements OneAgentSDK { + // ***** Webrequests (incoming) ***** + @Override + public WebApplicationInfo createWebApplicationInfo(String webServerName, String applicationID, String contextRoot) { + return WebApplicationInfoNoop.INSTANCE; + } + + @Override + public IncomingWebRequestTracer traceIncomingWebRequest(WebApplicationInfo webApplicationInfo, String url, + String method) { + return IncomingWebRequestTracerNoop.INSTANCE; + } + + // ***** Remote Calls (outgoing & incoming) ***** @Override public IncomingRemoteCallTracer traceIncomingRemoteCall(String remoteMethod, String remoteService, diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/WebApplicationInfoNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/WebApplicationInfoNoop.java new file mode 100644 index 0000000..363ca4a --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/WebApplicationInfoNoop.java @@ -0,0 +1,24 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.impl.noop; + +import com.dynatrace.oneagent.sdk.api.infos.WebApplicationInfo; + +public class WebApplicationInfoNoop implements WebApplicationInfo { + + public static final WebApplicationInfo INSTANCE = new WebApplicationInfoNoop(); + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/IncomingWebRequestProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/IncomingWebRequestProxy.java new file mode 100644 index 0000000..252c929 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/IncomingWebRequestProxy.java @@ -0,0 +1,63 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.impl.proxy; + +import com.dynatrace.oneagent.sdk.api.IncomingWebRequestTracer; + +public class IncomingWebRequestProxy extends TraceableProxy implements IncomingWebRequestTracer { + + + public IncomingWebRequestProxy(SDK2AgentInternalApiProxy apiProxy, Object agentObject) { + super(apiProxy, agentObject); + } + + @Override + public void setDynatraceStringTag(String tag) { + apiProxy.incomingTaggable_setDynatraceStringTag(agentsNodeObject, tag); + } + + @Override + public void setDynatraceByteTag(byte[] tag) { + apiProxy.incomingTaggable_setDynatraceByteTag(agentsNodeObject, tag); + } + + @Override + public void setRemoteAddress(String remoteAddress) { + apiProxy.incomingWebRequestTracer_setRemoteAddress(agentsNodeObject, remoteAddress); + + } + + @Override + public void addRequestHeader(String name, String value) { + apiProxy.webRequestTracer_addRequestHeader(agentsNodeObject, name, value); + } + + @Override + public void addParameter(String name, String value) { + apiProxy.incomingWebRequestTracer_addParameter(agentsNodeObject, name, value); + } + + @Override + public void addResponseHeader(String name, String value) { + apiProxy.webRequestTracer_addResponseHeader(agentsNodeObject, name, value); + } + + @Override + public void setStatusCode(int statusCode) { + apiProxy.webRequestTracer_setStatusCode(agentsNodeObject, statusCode); + } + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OneAgentSDKProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OneAgentSDKProxy.java index aac78be..76bf1e3 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OneAgentSDKProxy.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OneAgentSDKProxy.java @@ -18,16 +18,20 @@ import com.dynatrace.oneagent.sdk.api.InProcessLink; import com.dynatrace.oneagent.sdk.api.InProcessLinkTracer; import com.dynatrace.oneagent.sdk.api.IncomingRemoteCallTracer; +import com.dynatrace.oneagent.sdk.api.IncomingWebRequestTracer; import com.dynatrace.oneagent.sdk.api.LoggingCallback; import com.dynatrace.oneagent.sdk.api.OneAgentSDK; import com.dynatrace.oneagent.sdk.api.OutgoingRemoteCallTracer; import com.dynatrace.oneagent.sdk.api.enums.SDKState; +import com.dynatrace.oneagent.sdk.api.infos.WebApplicationInfo; import com.dynatrace.oneagent.sdk.api.enums.ChannelType; import com.dynatrace.oneagent.sdk.impl.OneAgentSDKFactoryImpl; import com.dynatrace.oneagent.sdk.impl.noop.InProcessLinkNoop; import com.dynatrace.oneagent.sdk.impl.noop.InProcessLinkTracerNoop; +import com.dynatrace.oneagent.sdk.impl.noop.IncomingWebRequestTracerNoop; import com.dynatrace.oneagent.sdk.impl.noop.RemoteCallClientTracerNoop; import com.dynatrace.oneagent.sdk.impl.noop.RemoteCallServerTracerNoop; +import com.dynatrace.oneagent.sdk.impl.noop.WebApplicationInfoNoop; /** TODO: check if/how class could be generated */ public class OneAgentSDKProxy implements OneAgentSDK { @@ -138,4 +142,31 @@ public void addCustomRequestAttribute(String key, double value) { apiProxy.oneAgentSDK_addCustomRequestAttribute(agentSdkImpl, key, value); } + @Override + public WebApplicationInfo createWebApplicationInfo(String webServerName, String applicationID, String contextRoot) { + return new WebApplicationInfoImpl(webServerName, applicationID, contextRoot); + } + + @Override + public IncomingWebRequestTracer traceIncomingWebRequest(WebApplicationInfo webApplicationInfo, String url, + String method) { + if (webApplicationInfo instanceof WebApplicationInfoNoop) { + return IncomingWebRequestTracerNoop.INSTANCE; + } else if (!(webApplicationInfo instanceof WebApplicationInfoImpl)) { + if (OneAgentSDKFactoryImpl.debugOneAgentSdkStub) { + OneAgentSDKFactoryImpl.logDebug("- invalid WebApplicationInfo object provided: " + (webApplicationInfo == null ? "null" : webApplicationInfo.getClass().getName())); + } + return IncomingWebRequestTracerNoop.INSTANCE; + } + + Object agentObject = apiProxy.oneAgentSDK_traceIncomingWebRequest(agentSdkImpl, (WebApplicationInfoImpl) webApplicationInfo, url, method); + if (agentObject == null) { + if (OneAgentSDKFactoryImpl.debugOneAgentSdkStub) { + OneAgentSDKFactoryImpl.logDebug("- OneAgent failed to provide provide object"); + } + return IncomingWebRequestTracerNoop.INSTANCE; + } + return new IncomingWebRequestProxy(apiProxy, agentObject); + } + } diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/SDK2AgentInternalApiProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/SDK2AgentInternalApiProxy.java index b28aae3..500a2cc 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/SDK2AgentInternalApiProxy.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/SDK2AgentInternalApiProxy.java @@ -38,6 +38,7 @@ public class SDK2AgentInternalApiProxy { private final Method oneAgentSDK_addCustomRequestAttribute_1; // String, String private final Method oneAgentSDK_addCustomRequestAttribute_2; // String, long private final Method oneAgentSDK_addCustomRequestAttribute_3; // String, double + private final Method oneAgentSDK_traceIncomingWebRequest; private final Method tracer_start; private final Method tracer_end; private final Method tracer_error_1; // string @@ -48,6 +49,12 @@ public class SDK2AgentInternalApiProxy { private final Method incomingTaggable_setDynatraceByteTag; private final Method outgoingRemoteCallTracer_setProtocolName; private final Method incomingRemoteCallTracer_setProtocolName; + private final Method webRequestTracer_setStatusCode; + private final Method webRequestTracer_addResponseHeader; + private final Method webRequestTracer_addRequestHeader; + private final Method incomingWebRequestTracer_setRemoteAddress; + private final Method incomingWebRequestTracer_addParameter; + public SDK2AgentInternalApiProxy(Object agentImpl) throws NoSuchMethodException, SecurityException { this.agentImpl = agentImpl; @@ -61,6 +68,7 @@ public SDK2AgentInternalApiProxy(Object agentImpl) throws NoSuchMethodException, oneAgentSDK_addCustomRequestAttribute_1 = findMethod("oneAgentSDK_addCustomRequestAttribute", new Class[] {Object.class, String.class, String.class}); oneAgentSDK_addCustomRequestAttribute_2 = findMethod("oneAgentSDK_addCustomRequestAttribute", new Class[] {Object.class, String.class, Long.TYPE}); oneAgentSDK_addCustomRequestAttribute_3 = findMethod("oneAgentSDK_addCustomRequestAttribute", new Class[] {Object.class, String.class, Double.TYPE}); + oneAgentSDK_traceIncomingWebRequest = findMethod("oneAgentSDK_traceIncomingWebRequest", new Class[] {Object.class, String.class, String.class, String.class, String.class, String.class}); tracer_start = findMethod("tracer_start", new Class[]{Object.class}); tracer_end = findMethod("tracer_end", new Class[]{Object.class}); tracer_error_1 = findMethod("tracer_error", new Class[]{Object.class,String.class}); @@ -71,6 +79,11 @@ public SDK2AgentInternalApiProxy(Object agentImpl) throws NoSuchMethodException, incomingTaggable_setDynatraceByteTag = findMethod("incomingTaggable_setDynatraceByteTag", new Class[] {Object.class, byte[].class}); outgoingRemoteCallTracer_setProtocolName = findMethod("outgoingRemoteCallTracer_setProtocolName", new Class[] {Object.class, String.class}); incomingRemoteCallTracer_setProtocolName = findMethod("incomingRemoteCallTracer_setProtocolName", new Class[] {Object.class, String.class}); + webRequestTracer_setStatusCode= findMethod("webRequestTracer_setStatusCode", new Class[] {Object.class, Integer.TYPE}); + webRequestTracer_addResponseHeader= findMethod("webRequestTracer_addResponseHeader", new Class[] {Object.class, String.class, String.class}); + webRequestTracer_addRequestHeader= findMethod("webRequestTracer_addRequestHeader", new Class[] {Object.class, String.class, String.class}); + incomingWebRequestTracer_setRemoteAddress= findMethod("incomingWebRequestTracer_setRemoteAddress", new Class[] {Object.class, String.class}); + incomingWebRequestTracer_addParameter= findMethod("incomingWebRequestTracer_addParameter", new Class[] {Object.class, String.class, String.class}); } private Method findMethod(String name, Class... args) throws NoSuchMethodException, SecurityException { @@ -110,6 +123,12 @@ Object oneAgentSDK_traceInProcessLink(Object agentSdkImpl, InProcessLinkImpl inP return invoke(oneAgentSDK_traceInProcessLink, agentSdkImpl, inProcessLink.getAgentProvidedLink()); } + Object oneAgentSDK_traceIncomingWebRequest(Object agentSdkImpl, WebApplicationInfoImpl webApplicationInfo, + String url, String method) { + return invoke(oneAgentSDK_traceIncomingWebRequest, agentSdkImpl, webApplicationInfo.getWebServerName(), + webApplicationInfo.getApplicationID(), webApplicationInfo.getContextRoot(), url, method); + } + void oneAgentSDK_setLoggingCallback(Object sdk, Object loggingCallback) { invoke(oneAgentSDK_setLoggingCallback, sdk, loggingCallback); } @@ -169,4 +188,25 @@ void outgoingRemoteCallTracer_setProtocolName(Object remoteCallClient, String pr void incomingRemoteCallTracer_setProtocolName(Object remoteCallServer, String protocolname) { invoke(incomingRemoteCallTracer_setProtocolName, remoteCallServer, protocolname); } + + void webRequestTracer_setStatusCode(Object webRequestTracer, int statusCode) { + invoke(webRequestTracer_setStatusCode, webRequestTracer, statusCode); + } + + void webRequestTracer_addResponseHeader(Object webRequestTracer, String name, String value) { + invoke(webRequestTracer_addResponseHeader, webRequestTracer, name, value); + } + + void webRequestTracer_addRequestHeader(Object webRequestTracer, String name, String value) { + invoke(webRequestTracer_addRequestHeader, webRequestTracer, name, value); + } + + void incomingWebRequestTracer_setRemoteAddress(Object incomingWebRequestTracer, String remoteAddress) { + invoke(incomingWebRequestTracer_setRemoteAddress, incomingWebRequestTracer, remoteAddress); + } + + void incomingWebRequestTracer_addParameter(Object incomingWebRequestTracer, String name, String value) { + invoke(incomingWebRequestTracer_addParameter, incomingWebRequestTracer, name, value); + } + } diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/TraceableProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/TraceableProxy.java index c28f3ac..96f9f8d 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/TraceableProxy.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/TraceableProxy.java @@ -22,9 +22,9 @@ abstract class TraceableProxy implements Tracer { protected final SDK2AgentInternalApiProxy apiProxy; protected final Object agentsNodeObject; - TraceableProxy(SDK2AgentInternalApiProxy apiProxy, Object node) { + TraceableProxy(SDK2AgentInternalApiProxy apiProxy, Object agentsNodeObject) { this.apiProxy = apiProxy; - agentsNodeObject = node; + this.agentsNodeObject = agentsNodeObject; } @Override diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/WebApplicationInfoImpl.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/WebApplicationInfoImpl.java new file mode 100644 index 0000000..6eb8c9b --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/WebApplicationInfoImpl.java @@ -0,0 +1,44 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.impl.proxy; + +import com.dynatrace.oneagent.sdk.api.infos.WebApplicationInfo; + +class WebApplicationInfoImpl implements WebApplicationInfo { + + private final String webServerName; + private final String applicationID; + private final String contextRoot; + + WebApplicationInfoImpl(String webServerName, String applicationID, String contextRoot) { + this.webServerName = webServerName; + this.applicationID = applicationID; + this.contextRoot = contextRoot; + } + + String getWebServerName() { + return webServerName; + } + + String getApplicationID() { + return applicationID; + } + + String getContextRoot() { + return contextRoot; + } + +} From e0ec84e67edf61db970dfe886088474ebe52010c Mon Sep 17 00:00:00 2001 From: Alram Lechner Date: Mon, 11 Jun 2018 15:24:21 +0200 Subject: [PATCH 05/36] rename remoteHost to what is it really is: remoteIpAddress --- .../sdk/samples/webrequest/FakedWebserver.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/samples/webrequest/src/main/java/com/dynatrace/oneagent/sdk/samples/webrequest/FakedWebserver.java b/samples/webrequest/src/main/java/com/dynatrace/oneagent/sdk/samples/webrequest/FakedWebserver.java index 0edf80b..f2600f9 100644 --- a/samples/webrequest/src/main/java/com/dynatrace/oneagent/sdk/samples/webrequest/FakedWebserver.java +++ b/samples/webrequest/src/main/java/com/dynatrace/oneagent/sdk/samples/webrequest/FakedWebserver.java @@ -28,14 +28,14 @@ public void setStatus(int i) { } public static class HttpRequest { - private final String remoteHostName; + private final String remoteIpAddress; private final String uri; private final String method; - public HttpRequest(String uri, String method, String remoteHostName) { + public HttpRequest(String uri, String method, String remoteIpAddress) { this.uri = uri; this.method = method; - this.remoteHostName = remoteHostName; + this.remoteIpAddress = remoteIpAddress; } public String getUri() { @@ -56,8 +56,8 @@ public Map> getParameters() { return new HashMap>(); } - public String getRemoteHostName() { - return remoteHostName; + public String getRemoteIpAddress() { + return remoteIpAddress; } @@ -78,7 +78,7 @@ public HttpResponse serve(HttpRequest session) { incomingWebrequestTracer.addParameter(headerField.getKey(), value); } } - incomingWebrequestTracer.setRemoteAddress(session.getRemoteHostName()); + incomingWebrequestTracer.setRemoteAddress(session.getRemoteIpAddress()); incomingWebrequestTracer.start(); HttpResponse response = new HttpResponse(); From e7a7547c7ab6ddeae0e6a066de45a1568a9566b1 Mon Sep 17 00:00:00 2001 From: Alram Lechner Date: Tue, 12 Jun 2018 08:22:07 +0200 Subject: [PATCH 06/36] added links to maven central --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 73d6c20..4e22d07 100644 --- a/README.md +++ b/README.md @@ -252,6 +252,6 @@ see also https://github.com/Dynatrace/OneAgent-SDK-for-Java/releases |Version|Description |Links | |:------|:--------------------------------------|:----------------------------------------| -|1.2.0 |Added support for in-process-linking |not released| +|1.2.0 |Added support for in-process-linking |[binary](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.2.0/oneagent-sdk-1.2.0.jar) [source](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.2.0/oneagent-sdk-1.2.0-sources.jar) [javadoc](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.2.0/oneagent-sdk-1.2.0-javadoc.jar)| |1.1.0 |Added support for in-process-linking |[binary](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.1.0/oneagent-sdk-1.1.0.jar) [source](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.1.0/oneagent-sdk-1.1.0-sources.jar) [javadoc](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.1.0/oneagent-sdk-1.1.0-javadoc.jar)| |1.0.3 |Initial release |[binary](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.0.3/oneagent-sdk-1.0.3.jar) [source](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.0.3/oneagent-sdk-1.0.3-sources.jar) [javadoc](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.0.3/oneagent-sdk-1.0.3-javadoc.jar)| From 73faf80a95098fe82ec882ff9e3ef381bdb03a0e Mon Sep 17 00:00:00 2001 From: labuser Date: Tue, 12 Jun 2018 12:10:44 +0200 Subject: [PATCH 07/36] added more timout (stringresolution) --- .../sdk/samples/webrequest/IncomingWebRequestApp.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/webrequest/src/main/java/com/dynatrace/oneagent/sdk/samples/webrequest/IncomingWebRequestApp.java b/samples/webrequest/src/main/java/com/dynatrace/oneagent/sdk/samples/webrequest/IncomingWebRequestApp.java index dccb50e..0f9b7ff 100644 --- a/samples/webrequest/src/main/java/com/dynatrace/oneagent/sdk/samples/webrequest/IncomingWebRequestApp.java +++ b/samples/webrequest/src/main/java/com/dynatrace/oneagent/sdk/samples/webrequest/IncomingWebRequestApp.java @@ -64,7 +64,7 @@ public static void main(String args[]) { IncomingWebRequestApp app = new IncomingWebRequestApp(); app.runIncomingWebrequest(); System.out.println("sample application stopped. sleeping a while, so OneAgent is able to send data to server ..."); - Thread.sleep(15000); // we have to wait - so OneAgent is able to send data to server + Thread.sleep(15000 * 3); // we have to wait - so OneAgent is able to send data to server } catch (Exception e) { System.err.println("in-process-linking sample failed: " + e.getMessage()); e.printStackTrace(); @@ -77,4 +77,4 @@ private void runIncomingWebrequest() throws IOException, ClassNotFoundException, webServer.serve(new HttpRequest("/billing/showBill?id=234324", "GET", "192.168.13.14")); } -} \ No newline at end of file +} From 7dc7b664efde818b66f07edd4f2297cf86bb9e4c Mon Sep 17 00:00:00 2001 From: Alram Lechner Date: Thu, 12 Jul 2018 14:09:51 +0200 Subject: [PATCH 08/36] add support for custom request attributes (#7) * add support for custom request attributes --- README.md | 37 +++- docs/META-INF/MANIFEST.MF | 2 - docs/allclasses-frame.html | 6 +- docs/allclasses-noframe.html | 6 +- .../oneagent/sdk/OneAgentSDKFactory.html | 8 +- .../oneagent/sdk/api/InProcessLink.html | 8 +- .../oneagent/sdk/api/InProcessLinkTracer.html | 8 +- .../sdk/api/IncomingRemoteCallTracer.html | 8 +- .../oneagent/sdk/api/IncomingTaggable.html | 8 +- .../oneagent/sdk/api/LoggingCallback.html | 8 +- .../oneagent/sdk/api/OneAgentSDK.html | 85 ++++++++- .../sdk/api/OutgoingRemoteCallTracer.html | 8 +- .../oneagent/sdk/api/OutgoingTaggable.html | 8 +- .../dynatrace/oneagent/sdk/api/Tracer.html | 8 +- .../oneagent/sdk/api/enums/ChannelType.html | 8 +- .../oneagent/sdk/api/enums/SDKState.html | 8 +- .../oneagent/sdk/api/enums/package-frame.html | 6 +- .../sdk/api/enums/package-summary.html | 8 +- .../oneagent/sdk/api/enums/package-tree.html | 10 +- .../oneagent/sdk/api/package-frame.html | 6 +- .../oneagent/sdk/api/package-summary.html | 8 +- .../oneagent/sdk/api/package-tree.html | 8 +- .../dynatrace/oneagent/sdk/package-frame.html | 6 +- .../oneagent/sdk/package-summary.html | 8 +- .../dynatrace/oneagent/sdk/package-tree.html | 8 +- docs/constant-values.html | 8 +- docs/deprecated-list.html | 8 +- docs/help-doc.html | 8 +- docs/index-all.html | 26 ++- docs/index.html | 4 +- docs/overview-frame.html | 6 +- docs/overview-summary.html | 10 +- docs/overview-tree.html | 8 +- samples/README.md | 2 +- samples/in-process-linking/pom.xml | 4 +- .../inprocesslinking/InProcessLinkingApp.java | 12 +- samples/remotecall/parent/pom.xml | 5 +- samples/remotecall/pom.xml | 2 +- samples/remotecall/remotecall-client/pom.xml | 2 +- samples/remotecall/remotecall-server/pom.xml | 2 +- .../oneagent/sdk/OneAgentSDKFactory.java | 38 ++++ .../oneagent/sdk/api/InProcessLink.java | 26 +++ .../oneagent/sdk/api/InProcessLinkTracer.java | 26 +++ .../sdk/api/IncomingRemoteCallTracer.java | 35 ++++ .../oneagent/sdk/api/IncomingTaggable.java | 45 +++++ .../oneagent/sdk/api/LoggingCallback.java | 43 +++++ .../oneagent/sdk/api/OneAgentSDK.java | 137 ++++++++++++++ .../sdk/api/OutgoingRemoteCallTracer.java | 37 ++++ .../oneagent/sdk/api/OutgoingTaggable.java | 43 +++++ .../dynatrace/oneagent/sdk/api/Tracer.java | 86 +++++++++ .../oneagent/sdk/api/enums/ChannelType.java | 38 ++++ .../oneagent/sdk/api/enums/SDKState.java | 45 +++++ .../sdk/impl/OneAgentSDKFactoryImpl.java | 78 ++++++++ .../sdk/impl/SDKInstanceProvider.java | 29 +++ .../sdk/impl/noop/InProcessLinkNoop.java | 24 +++ .../impl/noop/InProcessLinkTracerNoop.java | 24 +++ .../oneagent/sdk/impl/noop/NodeNoop.java | 38 ++++ .../sdk/impl/noop/OneAgentSDKNoop.java | 79 ++++++++ .../impl/noop/RemoteCallClientTracerNoop.java | 45 +++++ .../impl/noop/RemoteCallServerTracerNoop.java | 39 ++++ .../sdk/impl/proxy/InProcessLinkImpl.java | 31 ++++ .../impl/proxy/InProcessLinkTracerProxy.java | 26 +++ .../sdk/impl/proxy/OneAgentSDKProxy.java | 141 ++++++++++++++ .../sdk/impl/proxy/RemoteCallClientProxy.java | 40 ++++ .../sdk/impl/proxy/RemoteCallServerProxy.java | 41 +++++ .../impl/proxy/SDK2AgentInternalApiProxy.java | 172 ++++++++++++++++++ .../sdk/impl/proxy/TraceableProxy.java | 53 ++++++ .../oneagent/sdk/impl/proxy/package-info.java | 20 ++ 68 files changed, 1730 insertions(+), 148 deletions(-) delete mode 100644 docs/META-INF/MANIFEST.MF create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/api/InProcessLink.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/api/IncomingTaggable.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/api/LoggingCallback.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/api/OneAgentSDK.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/api/Tracer.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/api/enums/ChannelType.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/api/enums/SDKState.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/impl/OneAgentSDKFactoryImpl.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/impl/SDKInstanceProvider.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/impl/noop/InProcessLinkNoop.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/impl/noop/InProcessLinkTracerNoop.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/impl/noop/NodeNoop.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OneAgentSDKNoop.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/impl/noop/RemoteCallClientTracerNoop.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/impl/noop/RemoteCallServerTracerNoop.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/InProcessLinkImpl.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/InProcessLinkTracerProxy.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OneAgentSDKProxy.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/RemoteCallClientProxy.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/RemoteCallServerProxy.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/SDK2AgentInternalApiProxy.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/TraceableProxy.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/package-info.java diff --git a/README.md b/README.md index a5e8cdc..2f35b41 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,7 @@ This is the official Java implementation of the [Dynatrace OneAgent SDK](https:/ * [Features](#features) * [Trace incoming and outgoing remote calls](#remoting) * [In process linking](#inprocess) + * [Add custom request attributes](#scav) * [Further reading](#furtherreading) * [Help & Support](#help) * [Release notes](#releasenotes) @@ -39,9 +40,10 @@ This is the official Java implementation of the [Dynatrace OneAgent SDK](https:/ - Dynatrace OneAgent (required versions see below) |OneAgent SDK for Java|Required OneAgent version| -|:------|:--------| -|1.1.0 |>=1.143 | -|1.0.3 |>=1.135 | +|:--------------------|:------------------------| +|1.2.0 |>=1.147 | +|1.1.0 |>=1.143 | +|1.0.3 |>=1.135 | @@ -55,7 +57,7 @@ If you want to integrate the OneAgent SDK into your application, just add the fo com.dynatrace.oneagent.sdk.java oneagent-sdk - 1.1.0 + 1.2.0 compile @@ -124,10 +126,11 @@ The feature sets differ slightly with each language implementation. More functio A more detailed specification of the features can be found in [Dynatrace OneAgent SDK](https://github.com/Dynatrace/OneAgent-SDK#features). -|Feature|Required OneAgent SDK for Java version| -|:------|:--------| -|In process linking |>=1.1.0 | -|Trace incoming and outgoing remote calls |>=1.0.3 | +|Feature |Required OneAgent SDK for Java version| +|:-----------------------------------------|:-------------------------------------| +|Custom request attributes |>=1.2.0 | +|In process linking |>=1.1.0 | +|Trace incoming and outgoing remote calls |>=1.0.3 | @@ -195,6 +198,21 @@ try { } ``` + + +### Add custom request attributes + +You can use the SDK to add custom request attributes to the current traced service. Custom request attributes allow you to do advanced filtering of your requests in Dynatrace. + +Adding custom request attributes to the currently traced service call is simple. Just call one of the addCustomRequestAttribute methods with your key and value: + +```Java +oneAgentSDK.addCustomRequestAttribute("region", "EMEA"); +oneAgentSDK.addCustomRequestAttribute("salesAmount", 2500); +``` + +When no service call is being traced, the custom request attributes are dropped. + ## Further readings @@ -232,7 +250,8 @@ SLAs apply according to the customer's support level. see also https://github.com/Dynatrace/OneAgent-SDK-for-Java/releases -|Version|Description|Links| +|Version|Description |Links | |:------|:--------------------------------------|:----------------------------------------| +|1.2.0 |Added support for in-process-linking |[binary](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.2.0/oneagent-sdk-1.2.0.jar) [source](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.2.0/oneagent-sdk-1.2.0-sources.jar) [javadoc](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.2.0/oneagent-sdk-1.2.0-javadoc.jar)| |1.1.0 |Added support for in-process-linking |[binary](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.1.0/oneagent-sdk-1.1.0.jar) [source](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.1.0/oneagent-sdk-1.1.0-sources.jar) [javadoc](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.1.0/oneagent-sdk-1.1.0-javadoc.jar)| |1.0.3 |Initial release |[binary](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.0.3/oneagent-sdk-1.0.3.jar) [source](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.0.3/oneagent-sdk-1.0.3-sources.jar) [javadoc](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.0.3/oneagent-sdk-1.0.3-javadoc.jar)| diff --git a/docs/META-INF/MANIFEST.MF b/docs/META-INF/MANIFEST.MF deleted file mode 100644 index 59499bc..0000000 --- a/docs/META-INF/MANIFEST.MF +++ /dev/null @@ -1,2 +0,0 @@ -Manifest-Version: 1.0 - diff --git a/docs/allclasses-frame.html b/docs/allclasses-frame.html index 456c13b..e83b6c9 100644 --- a/docs/allclasses-frame.html +++ b/docs/allclasses-frame.html @@ -2,12 +2,12 @@ - + -All Classes (sdk 1.1.0 API) +All Classes (sdk 1.2.0 API) - + diff --git a/docs/allclasses-noframe.html b/docs/allclasses-noframe.html index e8f5ced..b0a0dbc 100644 --- a/docs/allclasses-noframe.html +++ b/docs/allclasses-noframe.html @@ -2,12 +2,12 @@ - + -All Classes (sdk 1.1.0 API) +All Classes (sdk 1.2.0 API) - + diff --git a/docs/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.html b/docs/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.html index 8e5f9a3..36f7b0c 100644 --- a/docs/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.html +++ b/docs/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.html @@ -2,12 +2,12 @@ - + -OneAgentSDKFactory (sdk 1.1.0 API) +OneAgentSDKFactory (sdk 1.2.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="OneAgentSDKFactory (sdk 1.1.0 API)"; + parent.document.title="OneAgentSDKFactory (sdk 1.2.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/InProcessLink.html b/docs/com/dynatrace/oneagent/sdk/api/InProcessLink.html index aad6b0b..5a52290 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/InProcessLink.html +++ b/docs/com/dynatrace/oneagent/sdk/api/InProcessLink.html @@ -2,12 +2,12 @@ - + -InProcessLink (sdk 1.1.0 API) +InProcessLink (sdk 1.2.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="InProcessLink (sdk 1.1.0 API)"; + parent.document.title="InProcessLink (sdk 1.2.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.html b/docs/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.html index e812bdc..4dabbab 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.html +++ b/docs/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.html @@ -2,12 +2,12 @@ - + -InProcessLinkTracer (sdk 1.1.0 API) +InProcessLinkTracer (sdk 1.2.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="InProcessLinkTracer (sdk 1.1.0 API)"; + parent.document.title="InProcessLinkTracer (sdk 1.2.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.html b/docs/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.html index 091b8ba..dbf5a4f 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.html +++ b/docs/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.html @@ -2,12 +2,12 @@ - + -IncomingRemoteCallTracer (sdk 1.1.0 API) +IncomingRemoteCallTracer (sdk 1.2.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="IncomingRemoteCallTracer (sdk 1.1.0 API)"; + parent.document.title="IncomingRemoteCallTracer (sdk 1.2.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/IncomingTaggable.html b/docs/com/dynatrace/oneagent/sdk/api/IncomingTaggable.html index dc63092..ee532b9 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/IncomingTaggable.html +++ b/docs/com/dynatrace/oneagent/sdk/api/IncomingTaggable.html @@ -2,12 +2,12 @@ - + -IncomingTaggable (sdk 1.1.0 API) +IncomingTaggable (sdk 1.2.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="IncomingTaggable (sdk 1.1.0 API)"; + parent.document.title="IncomingTaggable (sdk 1.2.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/LoggingCallback.html b/docs/com/dynatrace/oneagent/sdk/api/LoggingCallback.html index 1618523..32f7f30 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/LoggingCallback.html +++ b/docs/com/dynatrace/oneagent/sdk/api/LoggingCallback.html @@ -2,12 +2,12 @@ - + -LoggingCallback (sdk 1.1.0 API) +LoggingCallback (sdk 1.2.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="LoggingCallback (sdk 1.1.0 API)"; + parent.document.title="LoggingCallback (sdk 1.2.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/OneAgentSDK.html b/docs/com/dynatrace/oneagent/sdk/api/OneAgentSDK.html index 2154cc0..1a232ab 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/OneAgentSDK.html +++ b/docs/com/dynatrace/oneagent/sdk/api/OneAgentSDK.html @@ -2,12 +2,12 @@ - + -OneAgentSDK (sdk 1.1.0 API) +OneAgentSDK (sdk 1.2.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="OneAgentSDK (sdk 1.1.0 API)"; + parent.document.title="OneAgentSDK (sdk 1.2.0 API)"; } } @@ -120,6 +120,33 @@

    + void +addCustomRequestAttribute(java.lang.String key, + double value) + +
    +          Does exactly the same as addCustomRequestAttribute(String, String), but request-attribute type double. + + + + void +addCustomRequestAttribute(java.lang.String key, + long value) + +
    +          Does exactly the same as addCustomRequestAttribute(String, String), but request-attribute type long. + + + + void +addCustomRequestAttribute(java.lang.String key, + java.lang.String value) + +
    +          Adds a custom request attribute to currently traced service call. + + +  InProcessLink createInProcessLink() @@ -262,6 +289,56 @@


    +

    +addCustomRequestAttribute

    +
    +void addCustomRequestAttribute(java.lang.String key,
    +                               java.lang.String value)
    +
    +
    Adds a custom request attribute to currently traced service call. Might be called multiple times, to add more than one attribute. + Check via setLoggingCallback(LoggingCallback) if error happened. If two attributes with same key are set, both + attribute-values are captured. +

    +

    +
    Parameters:
    key - key of the attribute. required parameter.
    value - value of the attribute. required parameter.
    Since:
    +
    1.2
    +
    +
    +
    +
    + +

    +addCustomRequestAttribute

    +
    +void addCustomRequestAttribute(java.lang.String key,
    +                               long value)
    +
    +
    Does exactly the same as addCustomRequestAttribute(String, String), but request-attribute type long. +

    +

    +
    Since:
    +
    1.2
    +
    +
    +
    +
    + +

    +addCustomRequestAttribute

    +
    +void addCustomRequestAttribute(java.lang.String key,
    +                               double value)
    +
    +
    Does exactly the same as addCustomRequestAttribute(String, String), but request-attribute type double. +

    +

    +
    Since:
    +
    1.2
    +
    +
    +
    +
    +

    setLoggingCallback

    diff --git a/docs/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.html b/docs/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.html
    index 35bbdc1..56ec2fb 100644
    --- a/docs/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.html
    +++ b/docs/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.html
    @@ -2,12 +2,12 @@
     
     
     
    -
    +
     
    -OutgoingRemoteCallTracer (sdk 1.1.0 API)
    +OutgoingRemoteCallTracer (sdk 1.2.0 API)
     
     
    -
    +
     
     
     
    @@ -15,7 +15,7 @@
     function windowTitle()
     {
         if (location.href.indexOf('is-external=true') == -1) {
    -        parent.document.title="OutgoingRemoteCallTracer (sdk 1.1.0 API)";
    +        parent.document.title="OutgoingRemoteCallTracer (sdk 1.2.0 API)";
         }
     }
     
    diff --git a/docs/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.html b/docs/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.html
    index dc3414e..b3042c1 100644
    --- a/docs/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.html
    +++ b/docs/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.html
    @@ -2,12 +2,12 @@
     
     
     
    -
    +
     
    -OutgoingTaggable (sdk 1.1.0 API)
    +OutgoingTaggable (sdk 1.2.0 API)
     
     
    -
    +
     
     
     
    @@ -15,7 +15,7 @@
     function windowTitle()
     {
         if (location.href.indexOf('is-external=true') == -1) {
    -        parent.document.title="OutgoingTaggable (sdk 1.1.0 API)";
    +        parent.document.title="OutgoingTaggable (sdk 1.2.0 API)";
         }
     }
     
    diff --git a/docs/com/dynatrace/oneagent/sdk/api/Tracer.html b/docs/com/dynatrace/oneagent/sdk/api/Tracer.html
    index f375cb2..418aa28 100644
    --- a/docs/com/dynatrace/oneagent/sdk/api/Tracer.html
    +++ b/docs/com/dynatrace/oneagent/sdk/api/Tracer.html
    @@ -2,12 +2,12 @@
     
     
     
    -
    +
     
    -Tracer (sdk 1.1.0 API)
    +Tracer (sdk 1.2.0 API)
     
     
    -
    +
     
     
     
    @@ -15,7 +15,7 @@
     function windowTitle()
     {
         if (location.href.indexOf('is-external=true') == -1) {
    -        parent.document.title="Tracer (sdk 1.1.0 API)";
    +        parent.document.title="Tracer (sdk 1.2.0 API)";
         }
     }
     
    diff --git a/docs/com/dynatrace/oneagent/sdk/api/enums/ChannelType.html b/docs/com/dynatrace/oneagent/sdk/api/enums/ChannelType.html
    index 6fc39c1..f608a20 100644
    --- a/docs/com/dynatrace/oneagent/sdk/api/enums/ChannelType.html
    +++ b/docs/com/dynatrace/oneagent/sdk/api/enums/ChannelType.html
    @@ -2,12 +2,12 @@
     
     
     
    -
    +
     
    -ChannelType (sdk 1.1.0 API)
    +ChannelType (sdk 1.2.0 API)
     
     
    -
    +
     
     
     
    @@ -15,7 +15,7 @@
     function windowTitle()
     {
         if (location.href.indexOf('is-external=true') == -1) {
    -        parent.document.title="ChannelType (sdk 1.1.0 API)";
    +        parent.document.title="ChannelType (sdk 1.2.0 API)";
         }
     }
     
    diff --git a/docs/com/dynatrace/oneagent/sdk/api/enums/SDKState.html b/docs/com/dynatrace/oneagent/sdk/api/enums/SDKState.html
    index 00651f6..ff49468 100644
    --- a/docs/com/dynatrace/oneagent/sdk/api/enums/SDKState.html
    +++ b/docs/com/dynatrace/oneagent/sdk/api/enums/SDKState.html
    @@ -2,12 +2,12 @@
     
     
     
    -
    +
     
    -SDKState (sdk 1.1.0 API)
    +SDKState (sdk 1.2.0 API)
     
     
    -
    +
     
     
     
    @@ -15,7 +15,7 @@
     function windowTitle()
     {
         if (location.href.indexOf('is-external=true') == -1) {
    -        parent.document.title="SDKState (sdk 1.1.0 API)";
    +        parent.document.title="SDKState (sdk 1.2.0 API)";
         }
     }
     
    diff --git a/docs/com/dynatrace/oneagent/sdk/api/enums/package-frame.html b/docs/com/dynatrace/oneagent/sdk/api/enums/package-frame.html
    index dbc7b53..7449539 100644
    --- a/docs/com/dynatrace/oneagent/sdk/api/enums/package-frame.html
    +++ b/docs/com/dynatrace/oneagent/sdk/api/enums/package-frame.html
    @@ -2,12 +2,12 @@
     
     
     
    -
    +
     
    -com.dynatrace.oneagent.sdk.api.enums (sdk 1.1.0 API)
    +com.dynatrace.oneagent.sdk.api.enums (sdk 1.2.0 API)
     
     
    -
    +
     
     
     
    diff --git a/docs/com/dynatrace/oneagent/sdk/api/enums/package-summary.html b/docs/com/dynatrace/oneagent/sdk/api/enums/package-summary.html
    index b693bea..f8e2ca1 100644
    --- a/docs/com/dynatrace/oneagent/sdk/api/enums/package-summary.html
    +++ b/docs/com/dynatrace/oneagent/sdk/api/enums/package-summary.html
    @@ -2,12 +2,12 @@
     
     
     
    -
    +
     
    -com.dynatrace.oneagent.sdk.api.enums (sdk 1.1.0 API)
    +com.dynatrace.oneagent.sdk.api.enums (sdk 1.2.0 API)
     
     
    -
    +
     
     
     
    @@ -15,7 +15,7 @@
     function windowTitle()
     {
         if (location.href.indexOf('is-external=true') == -1) {
    -        parent.document.title="com.dynatrace.oneagent.sdk.api.enums (sdk 1.1.0 API)";
    +        parent.document.title="com.dynatrace.oneagent.sdk.api.enums (sdk 1.2.0 API)";
         }
     }
     
    diff --git a/docs/com/dynatrace/oneagent/sdk/api/enums/package-tree.html b/docs/com/dynatrace/oneagent/sdk/api/enums/package-tree.html
    index 6a908c9..24902b7 100644
    --- a/docs/com/dynatrace/oneagent/sdk/api/enums/package-tree.html
    +++ b/docs/com/dynatrace/oneagent/sdk/api/enums/package-tree.html
    @@ -2,12 +2,12 @@
     
     
     
    -
    +
     
    -com.dynatrace.oneagent.sdk.api.enums Class Hierarchy (sdk 1.1.0 API)
    +com.dynatrace.oneagent.sdk.api.enums Class Hierarchy (sdk 1.2.0 API)
     
     
    -
    +
     
     
     
    @@ -15,7 +15,7 @@
     function windowTitle()
     {
         if (location.href.indexOf('is-external=true') == -1) {
    -        parent.document.title="com.dynatrace.oneagent.sdk.api.enums Class Hierarchy (sdk 1.1.0 API)";
    +        parent.document.title="com.dynatrace.oneagent.sdk.api.enums Class Hierarchy (sdk 1.2.0 API)";
         }
     }
     
    @@ -93,7 +93,7 @@ 

  • java.lang.Object
    • java.lang.Enum<E> (implements java.lang.Comparable<T>, java.io.Serializable)
        -
      • com.dynatrace.oneagent.sdk.api.enums.ChannelType
      • com.dynatrace.oneagent.sdk.api.enums.SDKState
      +
    • com.dynatrace.oneagent.sdk.api.enums.SDKState
    • com.dynatrace.oneagent.sdk.api.enums.ChannelType

    diff --git a/docs/com/dynatrace/oneagent/sdk/api/package-frame.html b/docs/com/dynatrace/oneagent/sdk/api/package-frame.html index 33777c0..1e457ab 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/package-frame.html +++ b/docs/com/dynatrace/oneagent/sdk/api/package-frame.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api (sdk 1.1.0 API) +com.dynatrace.oneagent.sdk.api (sdk 1.2.0 API) - + diff --git a/docs/com/dynatrace/oneagent/sdk/api/package-summary.html b/docs/com/dynatrace/oneagent/sdk/api/package-summary.html index 9b89bc7..ddc2bc6 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/package-summary.html +++ b/docs/com/dynatrace/oneagent/sdk/api/package-summary.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api (sdk 1.1.0 API) +com.dynatrace.oneagent.sdk.api (sdk 1.2.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.dynatrace.oneagent.sdk.api (sdk 1.1.0 API)"; + parent.document.title="com.dynatrace.oneagent.sdk.api (sdk 1.2.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/package-tree.html b/docs/com/dynatrace/oneagent/sdk/api/package-tree.html index cef32be..cdbbc65 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/package-tree.html +++ b/docs/com/dynatrace/oneagent/sdk/api/package-tree.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api Class Hierarchy (sdk 1.1.0 API) +com.dynatrace.oneagent.sdk.api Class Hierarchy (sdk 1.2.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.dynatrace.oneagent.sdk.api Class Hierarchy (sdk 1.1.0 API)"; + parent.document.title="com.dynatrace.oneagent.sdk.api Class Hierarchy (sdk 1.2.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/package-frame.html b/docs/com/dynatrace/oneagent/sdk/package-frame.html index 50d0e2b..d12a2c2 100644 --- a/docs/com/dynatrace/oneagent/sdk/package-frame.html +++ b/docs/com/dynatrace/oneagent/sdk/package-frame.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk (sdk 1.1.0 API) +com.dynatrace.oneagent.sdk (sdk 1.2.0 API) - + diff --git a/docs/com/dynatrace/oneagent/sdk/package-summary.html b/docs/com/dynatrace/oneagent/sdk/package-summary.html index bfd92d9..d5494e3 100644 --- a/docs/com/dynatrace/oneagent/sdk/package-summary.html +++ b/docs/com/dynatrace/oneagent/sdk/package-summary.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk (sdk 1.1.0 API) +com.dynatrace.oneagent.sdk (sdk 1.2.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.dynatrace.oneagent.sdk (sdk 1.1.0 API)"; + parent.document.title="com.dynatrace.oneagent.sdk (sdk 1.2.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/package-tree.html b/docs/com/dynatrace/oneagent/sdk/package-tree.html index 1888725..262f419 100644 --- a/docs/com/dynatrace/oneagent/sdk/package-tree.html +++ b/docs/com/dynatrace/oneagent/sdk/package-tree.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk Class Hierarchy (sdk 1.1.0 API) +com.dynatrace.oneagent.sdk Class Hierarchy (sdk 1.2.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.dynatrace.oneagent.sdk Class Hierarchy (sdk 1.1.0 API)"; + parent.document.title="com.dynatrace.oneagent.sdk Class Hierarchy (sdk 1.2.0 API)"; } } diff --git a/docs/constant-values.html b/docs/constant-values.html index f8b66bb..b28d4d2 100644 --- a/docs/constant-values.html +++ b/docs/constant-values.html @@ -2,12 +2,12 @@ - + -Constant Field Values (sdk 1.1.0 API) +Constant Field Values (sdk 1.2.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Constant Field Values (sdk 1.1.0 API)"; + parent.document.title="Constant Field Values (sdk 1.2.0 API)"; } } diff --git a/docs/deprecated-list.html b/docs/deprecated-list.html index a9e2370..9473a95 100644 --- a/docs/deprecated-list.html +++ b/docs/deprecated-list.html @@ -2,12 +2,12 @@ - + -Deprecated List (sdk 1.1.0 API) +Deprecated List (sdk 1.2.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Deprecated List (sdk 1.1.0 API)"; + parent.document.title="Deprecated List (sdk 1.2.0 API)"; } } diff --git a/docs/help-doc.html b/docs/help-doc.html index e47b561..e15e319 100644 --- a/docs/help-doc.html +++ b/docs/help-doc.html @@ -2,12 +2,12 @@ - + -API Help (sdk 1.1.0 API) +API Help (sdk 1.2.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="API Help (sdk 1.1.0 API)"; + parent.document.title="API Help (sdk 1.2.0 API)"; } } diff --git a/docs/index-all.html b/docs/index-all.html index 938b52b..f2d1001 100644 --- a/docs/index-all.html +++ b/docs/index-all.html @@ -2,12 +2,12 @@ - + -Index (sdk 1.1.0 API) +Index (sdk 1.2.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Index (sdk 1.1.0 API)"; + parent.document.title="Index (sdk 1.2.0 API)"; } } @@ -77,7 +77,21 @@ -C E G I L O S T V W
    +A C E G I L O S T V W
    +

    +A

    +
    +
    addCustomRequestAttribute(String, String) - +Method in interface com.dynatrace.oneagent.sdk.api.OneAgentSDK +
    Adds a custom request attribute to currently traced service call. +
    addCustomRequestAttribute(String, long) - +Method in interface com.dynatrace.oneagent.sdk.api.OneAgentSDK +
    Does exactly the same as OneAgentSDK.addCustomRequestAttribute(String, String), but request-attribute type long. +
    addCustomRequestAttribute(String, double) - +Method in interface com.dynatrace.oneagent.sdk.api.OneAgentSDK +
    Does exactly the same as OneAgentSDK.addCustomRequestAttribute(String, String), but request-attribute type double. +
    +

    C

    @@ -210,7 +224,7 @@
    Just a warning.

    -C E G I L O S T V W +A C E G I L O S T V W diff --git a/docs/index.html b/docs/index.html index 292323d..d2c5937 100644 --- a/docs/index.html +++ b/docs/index.html @@ -2,9 +2,9 @@ - + -sdk 1.1.0 API +sdk 1.2.0 API @@ -80,7 +80,7 @@

    -sdk 1.1.0 API +sdk 1.2.0 API

    diff --git a/docs/overview-tree.html b/docs/overview-tree.html index a766ddc..d77868b 100644 --- a/docs/overview-tree.html +++ b/docs/overview-tree.html @@ -2,12 +2,12 @@ - + -Class Hierarchy (sdk 1.1.0 API) +Class Hierarchy (sdk 1.2.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Class Hierarchy (sdk 1.1.0 API)"; + parent.document.title="Class Hierarchy (sdk 1.2.0 API)"; } } diff --git a/samples/README.md b/samples/README.md index c94f6cd..b079ed4 100644 --- a/samples/README.md +++ b/samples/README.md @@ -25,7 +25,7 @@ Check your Dynatrace environment for newly created service like that: ![remotecall-server](img/remotecall-service.png) ### Run InProcessLinking sample application -This Application shows how to in-process-linking is being sued. To run this sample you need to create a custom service for your tenant. and of course Dynatrace OneAgent must be installed. +This Application shows how to in-process-linking and custom service attributes are being used. To run this sample you need to create a custom service for your tenant - and of course Dynatrace OneAgent must be installed. - ensure you have custom service for method `startAsyncOperation` in class `com.dynatrace.oneagent.sdk.samples.inprocesslinking.InProcessLinkingApp` - run sample: `mvn exec:exec` diff --git a/samples/in-process-linking/pom.xml b/samples/in-process-linking/pom.xml index b2bc579..d8f7dcc 100644 --- a/samples/in-process-linking/pom.xml +++ b/samples/in-process-linking/pom.xml @@ -6,14 +6,14 @@ com.dynatrace.oneagent.sdk.samples.inprocesslinking in-process-linking-sample - 1.1.0 + 1.2.0 jar com.dynatrace.oneagent.sdk.java oneagent-sdk - 1.1.0 + 1.2.0 compile diff --git a/samples/in-process-linking/src/main/java/com/dynatrace/oneagent/sdk/samples/inprocesslinking/InProcessLinkingApp.java b/samples/in-process-linking/src/main/java/com/dynatrace/oneagent/sdk/samples/inprocesslinking/InProcessLinkingApp.java index eff7451..8d82c91 100644 --- a/samples/in-process-linking/src/main/java/com/dynatrace/oneagent/sdk/samples/inprocesslinking/InProcessLinkingApp.java +++ b/samples/in-process-linking/src/main/java/com/dynatrace/oneagent/sdk/samples/inprocesslinking/InProcessLinkingApp.java @@ -1,7 +1,5 @@ package com.dynatrace.oneagent.sdk.samples.inprocesslinking; -import java.io.BufferedReader; - /* * Copyright 2018 Dynatrace LLC * @@ -19,13 +17,8 @@ */ import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; import java.net.URL; import java.sql.SQLException; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; @@ -107,7 +100,10 @@ private String startAsyncOperation() throws IOException, ClassNotFoundException, // e. g.: https://github.com/Dynatrace/OneAgent-SDK-for-Java/releases/tag/v1.0.3 String location = url.getHeaderField("Location"); - String latestVersion = location.substring(location.lastIndexOf('/')+1); + String latestVersion = location.substring(location.lastIndexOf('/') + 1); + + // tag this request using the found SDK version: + oneAgentSdk.addCustomRequestAttribute("oneagentsdk.java.version", latestVersion); // download the big release archive asynchronously ... UrlDownloadItem asyncWorkItem = new UrlDownloadItem( diff --git a/samples/remotecall/parent/pom.xml b/samples/remotecall/parent/pom.xml index 038c009..a32ef25 100644 --- a/samples/remotecall/parent/pom.xml +++ b/samples/remotecall/parent/pom.xml @@ -6,15 +6,14 @@ com.dynatrace.oneagent.sdk.samples.remoting parent - 1.1.0 + 1.2.0 pom - com.dynatrace.oneagent.sdk.java oneagent-sdk - 1.1.0 + 1.2.0 compile diff --git a/samples/remotecall/pom.xml b/samples/remotecall/pom.xml index 73b0e51..aed81dc 100644 --- a/samples/remotecall/pom.xml +++ b/samples/remotecall/pom.xml @@ -6,7 +6,7 @@ com.dynatrace.oneagent.sdk.samples.remoting remotecall-sample - 1.1.0 + 1.2.0 pom diff --git a/samples/remotecall/remotecall-client/pom.xml b/samples/remotecall/remotecall-client/pom.xml index d888700..5a71fbb 100644 --- a/samples/remotecall/remotecall-client/pom.xml +++ b/samples/remotecall/remotecall-client/pom.xml @@ -7,7 +7,7 @@ com.dynatrace.oneagent.sdk.samples.remoting parent - 1.1.0 + 1.2.0 ../parent/pom.xml diff --git a/samples/remotecall/remotecall-server/pom.xml b/samples/remotecall/remotecall-server/pom.xml index 3381a0c..5b16126 100644 --- a/samples/remotecall/remotecall-server/pom.xml +++ b/samples/remotecall/remotecall-server/pom.xml @@ -7,7 +7,7 @@ com.dynatrace.oneagent.sdk.samples.remoting parent - 1.1.0 + 1.2.0 ../parent/pom.xml diff --git a/src/main/java/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.java b/src/main/java/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.java new file mode 100644 index 0000000..8327d42 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.java @@ -0,0 +1,38 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk; + +import com.dynatrace.oneagent.sdk.api.OneAgentSDK; +import com.dynatrace.oneagent.sdk.impl.OneAgentSDKFactoryImpl; + +/** + * Entry point for customer application. + */ +public class OneAgentSDKFactory { + + /** + * Provides a {@link OneAgentSDK} instance, that has to be used to create + * transactions. It is safe to use returned {@link OneAgentSDK} instance in + * multiple threads. Every application should only create one single SDK + * instance during its lifetime. + * + * @return never null. if no OneAgent present, NOOP implementation gets + * returned. + */ + public static OneAgentSDK createInstance() { + return OneAgentSDKFactoryImpl.createInstance(); + } +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/InProcessLink.java b/src/main/java/com/dynatrace/oneagent/sdk/api/InProcessLink.java new file mode 100644 index 0000000..8dc21dc --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/InProcessLink.java @@ -0,0 +1,26 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.api; + +/** + * Represents link used for in-process-tagging. See + * {@link OneAgentSDK#createInProcessLink()} and + * {@link OneAgentSDK#traceInProcessLink(InProcessLink)} for more details. + * @since 1.1 + */ +public interface InProcessLink { + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.java b/src/main/java/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.java new file mode 100644 index 0000000..538a10f --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.java @@ -0,0 +1,26 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.api; + +/** + * Tracer used to trace in-process-linking. See + * {@link OneAgentSDK#createInProcessLink()} and + * {@link OneAgentSDK#traceInProcessLink(InProcessLink)} for more details. + * @since 1.1 + */ +public interface InProcessLinkTracer extends Tracer { + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.java b/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.java new file mode 100644 index 0000000..ec8e604 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.java @@ -0,0 +1,35 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.api; + +/** + * Represents the server side of a remote call. + * This Interface extends {@link Tracer} - it is important to respect the + * mentioned requirements when working with {@link IncomingRemoteCallTracer}. + * + */ + +public interface IncomingRemoteCallTracer extends Tracer, IncomingTaggable { + + /** + * Sets the name of the used remoting protocol. + * + * @param protocolName protocol name + * @since 1.0 + */ + void setProtocolName(String protocolName); + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingTaggable.java b/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingTaggable.java new file mode 100644 index 0000000..0d53228 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingTaggable.java @@ -0,0 +1,45 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.api; + +/** + * Common interface for server-tagging-related methods. Not to be directly used + * by SDK user. + */ +public interface IncomingTaggable { + + /** + * Consumes a tag to continue a pure path. Must be set before a node is + * being started.
    + * See {@link OutgoingTaggable} to determine how to create a tag. + * + * @param tag + * the tag in String representation - must not be null. + * @since 1.0 + */ + void setDynatraceStringTag(String tag); + + /** + * Same as {@link #setDynatraceStringTag(String)} but consumes binary + * representation of tag. + * + * @param tag + * the tag in binary representation - must not be null. + * @since 1.0 + */ + void setDynatraceByteTag(byte[] tag); + +} \ No newline at end of file diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/LoggingCallback.java b/src/main/java/com/dynatrace/oneagent/sdk/api/LoggingCallback.java new file mode 100644 index 0000000..5cad2d3 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/LoggingCallback.java @@ -0,0 +1,43 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.api; + +/** + * LoggingCallback gets called only inside a OneAgentSDK API call when + * an error/warning has occurred.
    + * Never call any SDK API inside one of these callback methods. + */ +public interface LoggingCallback { + + /** + * Just a warning. Something is missing, but OneAgent is working normal. + * + * @param message + * message text. never null. + * @since 1.0 + */ + void warn(String message); + + /** + * Something that should be done can't be done. (e. g. PurePath could + * not be started) + * + * @param message + * message text. never null. + * @since 1.0 + */ + void error(String message); +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/OneAgentSDK.java b/src/main/java/com/dynatrace/oneagent/sdk/api/OneAgentSDK.java new file mode 100644 index 0000000..25b5663 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/OneAgentSDK.java @@ -0,0 +1,137 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.api; + +import com.dynatrace.oneagent.sdk.api.enums.SDKState; +import com.dynatrace.oneagent.sdk.api.enums.ChannelType; + +/** + * Root interface contains provided Agent SDK API calls. Basically the whole API + * is designed according to following rules: + *
      + *
    • API calls never throw any exception + *
    • API calls never return null values. e. g. they returning NOOP Objects in case of any issue or required parameters are null. + *
    + * Single API calls might differ from that rules. Those rules are explicitly documented.
    + */ +public interface OneAgentSDK { + + // ***** Remote Calls (outgoing & incoming) ***** + + /** + * Traces an incoming remote call. + * + * @param serviceMethod + * name of the called remote method. (required) + * @param serviceName + * name of the remote service. (required) + * @param serviceEndpoint + * endpoint on the server side. (required) + * @return {@link IncomingRemoteCallTracer} instance to work with + * @since 1.0 + */ + IncomingRemoteCallTracer traceIncomingRemoteCall(String serviceMethod, String serviceName, String serviceEndpoint); + + /** + * Traces an outgoing remote call. + * + * @param serviceMethod + * name of the called remote method. (required) + * @param serviceName + * name of the remote service. (required) + * @param serviceEndpoint + * endpoint on the server side. (required) + * @param channelType + * communication protocol used by remote call. See {@link ChannelType} for + * available types. (required) + * @param channelEndpoint + * optional and depending on channelType: + *
      + *
    • for TCP/IP: host name/IP of the server-side (can include port) + *
    • for UNIX domain sockets: path of domain socket file + *
    • for named pipes: name of pipe + *
    + * @return {@link OutgoingRemoteCallTracer} instance to work with + * @since 1.0 + */ + OutgoingRemoteCallTracer traceOutgoingRemoteCall(String serviceMethod, String serviceName, String serviceEndpoint, + ChannelType channelType, String channelEndpoint); + + // ***** in-process-linking ***** + /** + * Creates a link for in-process-linking. + * + * @return {@link InProcessLink} instance to work with. Use it with {@link #traceInProcessLink(InProcessLink)} + * @since 1.1 + */ + InProcessLink createInProcessLink(); + + /** + * Traces the start of in-process-linking. + * + * @param inProcessLink a InProcessLink received via {@link #createInProcessLink()} + * @return {@link InProcessLinkTracer} to work with. + * @since 1.1 + */ + InProcessLinkTracer traceInProcessLink(InProcessLink inProcessLink); + + // ***** Custom request attributes ***** + /** + * Adds a custom request attribute to currently traced service call. Might be called multiple times, to add more than one attribute. + * Check via {@link #setLoggingCallback(LoggingCallback)} if error happened. If two attributes with same key are set, both + * attribute-values are captured. + * + * @param key key of the attribute. required parameter. + * @param value value of the attribute. required parameter. + * @since 1.2 + */ + void addCustomRequestAttribute(String key, String value); + + /** + * Does exactly the same as {@link #addCustomRequestAttribute(String, String)}, but request-attribute type long. + * @since 1.2 + */ + void addCustomRequestAttribute(String key, long value); + + /** + * Does exactly the same as {@link #addCustomRequestAttribute(String, String)}, but request-attribute type double. + * @since 1.2 + */ + void addCustomRequestAttribute(String key, double value); + + // ***** various ***** + + /** + * Installs a callback that gets informed, if any SDK action has failed. + * For details see {@link LoggingCallback} interface. The provided callback must + * be thread-safe, when using this {@link OneAgentSDK} instance in multi-threaded + * environments. + * + * @param loggingCallback + * may be null, to remove current callback. provided callback + * replaces any previously set callback. + * @since 1.0 + */ + void setLoggingCallback(LoggingCallback loggingCallback); + + /** + * Returns the current SDKState. See {@link SDKState} for details. + * + * @return current state - never null. + * @since 1.0 + */ + SDKState getCurrentState(); +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.java b/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.java new file mode 100644 index 0000000..2ef7207 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.java @@ -0,0 +1,37 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.api; + +/** + * Represents the client side of a remote call. + * + * This Interface extends {@link Tracer} - it is important to respect the + * mentioned requirements when working with {@link OutgoingRemoteCallTracer}. + * + */ +public interface OutgoingRemoteCallTracer extends Tracer, OutgoingTaggable { + + /** + * Sets the name of the used remoting protocol. Setting the protocol name is + * optional. + * + * @param protocolName + * protocol name. null value is ignored. + * @since 1.0 + */ + void setProtocolName(String protocolName); + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.java b/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.java new file mode 100644 index 0000000..7b015d1 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.java @@ -0,0 +1,43 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.api; + +/** + * Common interface for client-tagging-related methods. Not to be directly used + * by SDK user. + */ +public interface OutgoingTaggable { + + /** + * Creates a Dynatrace tag and returns the String representation of it. This + * tag has to be transported with the remoting protocol to the destination.
    + * See {@link IncomingTaggable} how to continue a path with provided tag on the server side. + * + * @return the tag - never null. + * @since 1.0 + */ + String getDynatraceStringTag(); + + /** + * Same as {@link #getDynatraceStringTag()}, but returning the tag as + * binary representation. + * + * @return the tag - never null. + * @since 1.0 + */ + byte[] getDynatraceByteTag(); + +} \ No newline at end of file diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/Tracer.java b/src/main/java/com/dynatrace/oneagent/sdk/api/Tracer.java new file mode 100644 index 0000000..0f1e573 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/Tracer.java @@ -0,0 +1,86 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.api; + +/** + * Common interface for timing-related methods. Not to be directly used by SDK + * user. + */ +public interface Tracer { + + /** + * starts timing of a node. Every node that has been started, must be + * ended with {@link #end()} method. Consider using the following pattern: + * + *
    +     * {@code
    +     *   tracer.start();
    +     *   try {
    +     *     // do your work
    +     *   } catch (Exception e) {
    +     *     tracer.error(e);
    +     *   } finally {
    +     *     tracer.end();
    +     *   }
    +     * }
    +     * 
    + * + * {@link #start()}, {@link #end()}, {@link #error(String)}, + * {@link #error(Throwable)} are not thread-safe. They must be called from + * the same thread where {@link #start()} has been invoked. + * + * @since 1.0 + */ + void start(); + + /** + * Ends timing of a node. Typically this method is called via finally block. + *
    + * {@link #start()}, {@link #end()}, {@link #error(String)}, + * {@link #error(Throwable)} are not thread-safe. They must be called from + * the same thread where {@link #start()} has been invoked. + * + * @since 1.0 + */ + void end(); + + /** + * Marks the node as 'exited by exception'. An additional error message + * can be provided as String.
    + * {@link #start()}, {@link #end()}, {@link #error(String)}, + * {@link #error(Throwable)} are not thread-safe. They must be called from + * the same thread where {@link #start()} has been invoked. + * + * @param message + * error message with details about occurred error (eg. return + * code). must not be null. + * @since 1.0 + */ + void error(String message); + + /** + * Marks the node as 'exited by exception'.Additional information can + * be provided as Throwable.
    + * {@link #start()}, {@link #end()}, {@link #error(String)}, + * {@link #error(Throwable)} are not thread-safe. They must be called from + * the same thread where {@link #start()} has been invoked. + * + * @param throwable + * exception, that occurred. must not null. + * @since 1.0 + */ + void error(Throwable throwable); +} \ No newline at end of file diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/enums/ChannelType.java b/src/main/java/com/dynatrace/oneagent/sdk/api/enums/ChannelType.java new file mode 100644 index 0000000..8d25fec --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/enums/ChannelType.java @@ -0,0 +1,38 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.api.enums; + +/** + * Defines the type of communication channel being used. + * + * @author Alram.Lechner + * + */ +public enum ChannelType { + + OTHER(0), TCP_IP(1), UNIX_DOMAIN_SOCKET(2), NAMED_PIPE(3), IN_PROCESS(4); + + /** constant is being used in API call to OneAgent. don't change it! */ + private final int sdkConstant; + + private ChannelType(int sdkConstant) { + this.sdkConstant = sdkConstant; + } + + public int getSDKConstant() { + return sdkConstant; + } +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/enums/SDKState.java b/src/main/java/com/dynatrace/oneagent/sdk/api/enums/SDKState.java new file mode 100644 index 0000000..e78cd3d --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/enums/SDKState.java @@ -0,0 +1,45 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.api.enums; + +/** + * Defines the possible states of the SDK. + */ +public enum SDKState { + + /** + * SDK is connected to OneAgent and capturing data. + * @since 1.0 + */ + ACTIVE, + + /** + * SDK is connected to OneAgent, but capturing is disabled.It is good practice + * to skip creating SDK transactions to save resources. The SDK state should + * be checked regularly as it may change at every point in time. + * @since 1.0 + */ + TEMPORARILY_INACTIVE, + + /** + * SDK isn't connected to OneAgent, so it will never capture data. This SDK + * state will never change during the lifetime of a JVM. It is good practice + * to never call any SDK API to save resources. + * @since 1.0 + */ + PERMANENTLY_INACTIVE; + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/OneAgentSDKFactoryImpl.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/OneAgentSDKFactoryImpl.java new file mode 100644 index 0000000..5a56296 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/OneAgentSDKFactoryImpl.java @@ -0,0 +1,78 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.impl; + +import com.dynatrace.oneagent.sdk.api.OneAgentSDK; +import com.dynatrace.oneagent.sdk.impl.noop.OneAgentSDKNoop; +import com.dynatrace.oneagent.sdk.impl.proxy.OneAgentSDKProxy; +import com.dynatrace.oneagent.sdk.impl.proxy.SDK2AgentInternalApiProxy; + +/** + * Entry point for customer application. + */ +public class OneAgentSDKFactoryImpl { + + /* increase version with every change. in case of non breaking change (to OneAgent), increase oneSdkFix only. */ + static final int oneSdkMajor = 1; + static final int oneSdkMinor = 2; + static final int oneSdkFix = 0; + + /** the only SDK instance (one for every classLoader) */ + private static OneAgentSDK oneSDK = null; + + public static boolean debugOneAgentSdkStub = false; + + private static OneAgentSDK createOneSDK() { + Object agentApiImpl = SDKInstanceProvider.create(oneSdkMajor, oneSdkMinor, oneSdkFix); + if (agentApiImpl == null) { + // OneAgent not present or not compatible + if (debugOneAgentSdkStub) { + logDebug("- no OneAgent present or OneAgent declined to work with OneAgentSdk version " + oneSdkMajor + "." + + oneSdkMinor + "." + oneSdkFix); + } + return new OneAgentSDKNoop(); + } + try { + SDK2AgentInternalApiProxy agentApi = new SDK2AgentInternalApiProxy(agentApiImpl); + Object agentSdkImpl = agentApi.oneAgentSDKFactory_createSdk(); + if (agentSdkImpl != null) { + return new OneAgentSDKProxy(agentApi, agentSdkImpl); + } + if (debugOneAgentSdkStub) { + logDebug("- OneAgent failed to provide sdk object."); + } + return new OneAgentSDKNoop(); + } catch (Throwable e) { + if (debugOneAgentSdkStub) { + logDebug("- failed to contact OneAgent: " + e.getClass().getName() + ": " + e.getMessage()); + } + return new OneAgentSDKNoop(); + } + } + + public static synchronized OneAgentSDK createInstance() { + if (oneSDK == null) { + debugOneAgentSdkStub = Boolean + .parseBoolean(System.getProperty("com.dynatrace.oneagent.sdk.debug", "false")); + oneSDK = createOneSDK(); + } + return oneSDK; + } + + public static void logDebug(String msg) { + System.out.println("[onesdk ] " + msg); + } +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/SDKInstanceProvider.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/SDKInstanceProvider.java new file mode 100644 index 0000000..c5abff3 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/SDKInstanceProvider.java @@ -0,0 +1,29 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.impl; + +/** class gets replaced by OneAgent, if OneAgent is loaded. */ +class SDKInstanceProvider { + + /** + * @return SDK Object provided by OneAgent. null if no OneAgent is loaded or declines + * to work with current SDK. + */ + static Object create(int onesdkmajor, int onesdkminor, int onesdkfix) { + return null; + } + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/InProcessLinkNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/InProcessLinkNoop.java new file mode 100644 index 0000000..a543a4a --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/InProcessLinkNoop.java @@ -0,0 +1,24 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.impl.noop; + +import com.dynatrace.oneagent.sdk.api.InProcessLink; + +public class InProcessLinkNoop implements InProcessLink { + + public final static InProcessLink INSTANCE = new InProcessLinkNoop(); + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/InProcessLinkTracerNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/InProcessLinkTracerNoop.java new file mode 100644 index 0000000..a375fe3 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/InProcessLinkTracerNoop.java @@ -0,0 +1,24 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.impl.noop; + +import com.dynatrace.oneagent.sdk.api.InProcessLinkTracer; + +public class InProcessLinkTracerNoop extends NodeNoop implements InProcessLinkTracer { + + public final static InProcessLinkTracer INSTANCE = new InProcessLinkTracerNoop(); + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/NodeNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/NodeNoop.java new file mode 100644 index 0000000..354e7d4 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/NodeNoop.java @@ -0,0 +1,38 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.impl.noop; + +import com.dynatrace.oneagent.sdk.api.Tracer; + +class NodeNoop implements Tracer { + + @Override + public void start() { + } + + @Override + public void end() { + } + + @Override + public void error(String message) { + } + + @Override + public void error(Throwable throwable) { + } + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OneAgentSDKNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OneAgentSDKNoop.java new file mode 100644 index 0000000..2a45a9f --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OneAgentSDKNoop.java @@ -0,0 +1,79 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.impl.noop; + +import com.dynatrace.oneagent.sdk.api.InProcessLink; +import com.dynatrace.oneagent.sdk.api.InProcessLinkTracer; +import com.dynatrace.oneagent.sdk.api.IncomingRemoteCallTracer; +import com.dynatrace.oneagent.sdk.api.LoggingCallback; +import com.dynatrace.oneagent.sdk.api.OneAgentSDK; +import com.dynatrace.oneagent.sdk.api.OutgoingRemoteCallTracer; +import com.dynatrace.oneagent.sdk.api.enums.SDKState; +import com.dynatrace.oneagent.sdk.api.enums.ChannelType; + +/** + * This class provides an empty (NOOP) implementation of the {@link OneAgentSDK} interface. + * + * @author Alram.Lechner + * + */ +public class OneAgentSDKNoop implements OneAgentSDK { + + // ***** Remote Calls (outgoing & incoming) ***** + @Override + public IncomingRemoteCallTracer traceIncomingRemoteCall(String remoteMethod, String remoteService, + String clientEndpoint) { + return RemoteCallServerTracerNoop.INSTANCE; + } + + @Override + public OutgoingRemoteCallTracer traceOutgoingRemoteCall(String remoteMethod, String remoteService, String serviceEndpoint, ChannelType channelType, String channelEndpoint) { + return RemoteCallClientTracerNoop.INSTANCE; + } + + // ***** Common ***** + + @Override + public void setLoggingCallback(LoggingCallback loggingCallback) { + } + + @Override + public SDKState getCurrentState() { + return SDKState.PERMANENTLY_INACTIVE; + } + + @Override + public InProcessLink createInProcessLink() { + return InProcessLinkNoop.INSTANCE; + } + + @Override + public InProcessLinkTracer traceInProcessLink(InProcessLink inProcessLink) { + return InProcessLinkTracerNoop.INSTANCE; + } + + @Override + public void addCustomRequestAttribute(String key, String value) { + } + + @Override + public void addCustomRequestAttribute(String key, long value) { + } + + @Override + public void addCustomRequestAttribute(String key, double value) { + } +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/RemoteCallClientTracerNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/RemoteCallClientTracerNoop.java new file mode 100644 index 0000000..9bed376 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/RemoteCallClientTracerNoop.java @@ -0,0 +1,45 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.impl.noop; + +import com.dynatrace.oneagent.sdk.api.OutgoingRemoteCallTracer; + +public class RemoteCallClientTracerNoop extends NodeNoop implements OutgoingRemoteCallTracer { + + public static final OutgoingRemoteCallTracer INSTANCE = new RemoteCallClientTracerNoop(); + + private static final byte[] NO_TAG_BLOB = new byte[] {}; + private static final String NO_TAG_STRING = ""; + + + private RemoteCallClientTracerNoop() { + } + + @Override + public String getDynatraceStringTag() { + return NO_TAG_STRING; + } + + @Override + public byte[] getDynatraceByteTag() { + return NO_TAG_BLOB; + } + + @Override + public void setProtocolName(String protocolName) { + } + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/RemoteCallServerTracerNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/RemoteCallServerTracerNoop.java new file mode 100644 index 0000000..c97b2c5 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/RemoteCallServerTracerNoop.java @@ -0,0 +1,39 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.impl.noop; + +import com.dynatrace.oneagent.sdk.api.IncomingRemoteCallTracer; + +public class RemoteCallServerTracerNoop extends NodeNoop implements IncomingRemoteCallTracer { + + public static final IncomingRemoteCallTracer INSTANCE = new RemoteCallServerTracerNoop(); + + private RemoteCallServerTracerNoop() { + } + + @Override + public void setDynatraceStringTag(String tag) { + } + + @Override + public void setDynatraceByteTag(byte[] tag) { + } + + @Override + public void setProtocolName(String protocolName) { + } + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/InProcessLinkImpl.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/InProcessLinkImpl.java new file mode 100644 index 0000000..198bd96 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/InProcessLinkImpl.java @@ -0,0 +1,31 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.impl.proxy; + +import com.dynatrace.oneagent.sdk.api.InProcessLink; + +class InProcessLinkImpl implements InProcessLink { + + private final Object agentProvidedLink; + + public InProcessLinkImpl(Object agentProvidedLink) { + this.agentProvidedLink = agentProvidedLink; + } + + Object getAgentProvidedLink() { + return agentProvidedLink; + } +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/InProcessLinkTracerProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/InProcessLinkTracerProxy.java new file mode 100644 index 0000000..340f21b --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/InProcessLinkTracerProxy.java @@ -0,0 +1,26 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.impl.proxy; + +import com.dynatrace.oneagent.sdk.api.InProcessLinkTracer; + +public class InProcessLinkTracerProxy extends TraceableProxy implements InProcessLinkTracer { + + InProcessLinkTracerProxy(SDK2AgentInternalApiProxy apiProxy, Object node) { + super(apiProxy, node); + } + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OneAgentSDKProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OneAgentSDKProxy.java new file mode 100644 index 0000000..aac78be --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OneAgentSDKProxy.java @@ -0,0 +1,141 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.impl.proxy; + +import com.dynatrace.oneagent.sdk.api.InProcessLink; +import com.dynatrace.oneagent.sdk.api.InProcessLinkTracer; +import com.dynatrace.oneagent.sdk.api.IncomingRemoteCallTracer; +import com.dynatrace.oneagent.sdk.api.LoggingCallback; +import com.dynatrace.oneagent.sdk.api.OneAgentSDK; +import com.dynatrace.oneagent.sdk.api.OutgoingRemoteCallTracer; +import com.dynatrace.oneagent.sdk.api.enums.SDKState; +import com.dynatrace.oneagent.sdk.api.enums.ChannelType; +import com.dynatrace.oneagent.sdk.impl.OneAgentSDKFactoryImpl; +import com.dynatrace.oneagent.sdk.impl.noop.InProcessLinkNoop; +import com.dynatrace.oneagent.sdk.impl.noop.InProcessLinkTracerNoop; +import com.dynatrace.oneagent.sdk.impl.noop.RemoteCallClientTracerNoop; +import com.dynatrace.oneagent.sdk.impl.noop.RemoteCallServerTracerNoop; + +/** TODO: check if/how class could be generated */ +public class OneAgentSDKProxy implements OneAgentSDK { + + private final SDK2AgentInternalApiProxy apiProxy; + private final Object agentSdkImpl; + + public OneAgentSDKProxy(SDK2AgentInternalApiProxy apiProxy, Object agentSdkImpl) { + this.apiProxy = apiProxy; + this.agentSdkImpl = agentSdkImpl; + } + + @Override + public IncomingRemoteCallTracer traceIncomingRemoteCall(String remoteMethod, String remoteService, String serviceEndpoint) { + Object agentObject = apiProxy.oneAgentSDK_traceIncomingRemoteCall(agentSdkImpl, remoteMethod, remoteService, serviceEndpoint); + if (agentObject == null) { + if (OneAgentSDKFactoryImpl.debugOneAgentSdkStub) { + OneAgentSDKFactoryImpl.logDebug("- OneAgent failed to provide provide object"); + } + return RemoteCallServerTracerNoop.INSTANCE; + } + return new RemoteCallServerProxy(apiProxy, agentObject); + } + + @Override + public OutgoingRemoteCallTracer traceOutgoingRemoteCall(String remoteMethod, String remoteService, + String serverEndpoint, ChannelType channelType, String remoteHost) { + int iChannelType = -1; + if (channelType != null) { + iChannelType = channelType.getSDKConstant(); + } + Object agentObject = apiProxy.oneAgentSDK_traceOutgoingRemoteCall(agentSdkImpl, remoteMethod, remoteService, serverEndpoint, iChannelType, remoteHost); + if (agentObject == null) { + if (OneAgentSDKFactoryImpl.debugOneAgentSdkStub) { + OneAgentSDKFactoryImpl.logDebug("- OneAgent failed to provide provide object"); + } + return RemoteCallClientTracerNoop.INSTANCE; + } + return new RemoteCallClientProxy(apiProxy, agentObject); + } + + @Override + public void setLoggingCallback(LoggingCallback loggingCallback) { + apiProxy.oneAgentSDK_setLoggingCallback(agentSdkImpl, loggingCallback); + } + + @Override + public SDKState getCurrentState() { + Boolean isCapturing = apiProxy.oneAgentSDK_isCapturing(agentSdkImpl); + if (isCapturing == null) { + if (OneAgentSDKFactoryImpl.debugOneAgentSdkStub) { + OneAgentSDKFactoryImpl.logDebug("- OneAgent failed to provide provide object"); + } + return SDKState.PERMANENTLY_INACTIVE; + } + if (isCapturing.booleanValue()) { + return SDKState.ACTIVE; + } else { + return SDKState.TEMPORARILY_INACTIVE; + } + } + + @Override + public InProcessLink createInProcessLink() { + Object agentProvidedLink = apiProxy.oneAgentSDK_createInProcessLink(agentSdkImpl); + if (agentProvidedLink == null) { + if (OneAgentSDKFactoryImpl.debugOneAgentSdkStub) { + OneAgentSDKFactoryImpl.logDebug("- OneAgent failed to provide InProcessLink"); + } + return InProcessLinkNoop.INSTANCE; + } + return new InProcessLinkImpl(agentProvidedLink); + } + + @Override + public InProcessLinkTracer traceInProcessLink(InProcessLink inProcessLink) { + if (inProcessLink instanceof InProcessLinkNoop) { + return InProcessLinkTracerNoop.INSTANCE; + } else if (!(inProcessLink instanceof InProcessLinkImpl)) { + if (OneAgentSDKFactoryImpl.debugOneAgentSdkStub) { + OneAgentSDKFactoryImpl.logDebug("- invalid InProcessLink object provided: " + (inProcessLink == null ? "null" : inProcessLink.getClass().getName())); + } + return InProcessLinkTracerNoop.INSTANCE; + } + + Object agentObject = apiProxy.oneAgentSDK_traceInProcessLink(agentSdkImpl, (InProcessLinkImpl) inProcessLink); + if (agentObject == null) { + if (OneAgentSDKFactoryImpl.debugOneAgentSdkStub) { + OneAgentSDKFactoryImpl.logDebug("- OneAgent failed to provide provide InProcessLinkTracer"); + } + return InProcessLinkTracerNoop.INSTANCE; + } + return new InProcessLinkTracerProxy(apiProxy, agentObject); + } + + @Override + public void addCustomRequestAttribute(String key, String value) { + apiProxy.oneAgentSDK_addCustomRequestAttribute(agentSdkImpl, key, value); + } + + @Override + public void addCustomRequestAttribute(String key, long value) { + apiProxy.oneAgentSDK_addCustomRequestAttribute(agentSdkImpl, key, value); + } + + @Override + public void addCustomRequestAttribute(String key, double value) { + apiProxy.oneAgentSDK_addCustomRequestAttribute(agentSdkImpl, key, value); + } + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/RemoteCallClientProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/RemoteCallClientProxy.java new file mode 100644 index 0000000..dc7d472 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/RemoteCallClientProxy.java @@ -0,0 +1,40 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.impl.proxy; + +import com.dynatrace.oneagent.sdk.api.OutgoingRemoteCallTracer; + +public class RemoteCallClientProxy extends TraceableProxy implements OutgoingRemoteCallTracer { + + RemoteCallClientProxy(SDK2AgentInternalApiProxy apiProxy, Object oneAgentSDK_createLocalOutgoingRemoteCall) { + super(apiProxy, oneAgentSDK_createLocalOutgoingRemoteCall); + } + + @Override + public String getDynatraceStringTag() { + return apiProxy.outgoingTaggable_getDynatraceStringTag(agentsNodeObject); + } + + @Override + public byte[] getDynatraceByteTag() { + return apiProxy.outgoingTaggable_getDynatraceByteTag(agentsNodeObject); } + + @Override + public void setProtocolName(String protocolName) { + apiProxy.outgoingRemoteCallTracer_setProtocolName(agentsNodeObject, protocolName); + } + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/RemoteCallServerProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/RemoteCallServerProxy.java new file mode 100644 index 0000000..1035c01 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/RemoteCallServerProxy.java @@ -0,0 +1,41 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.impl.proxy; + +import com.dynatrace.oneagent.sdk.api.IncomingRemoteCallTracer; + +public class RemoteCallServerProxy extends TraceableProxy implements IncomingRemoteCallTracer { + + RemoteCallServerProxy(SDK2AgentInternalApiProxy apiProxy, Object remoteCallObject) { + super(apiProxy, remoteCallObject); + } + + @Override + public void setDynatraceStringTag(String tag) { + apiProxy.incomingTaggable_setDynatraceStringTag(agentsNodeObject, tag); + } + + @Override + public void setDynatraceByteTag(byte[] tag) { + apiProxy.incomingTaggable_setDynatraceByteTag(agentsNodeObject, tag); + } + + @Override + public void setProtocolName(String protocolName) { + apiProxy.incomingRemoteCallTracer_setProtocolName(agentsNodeObject, protocolName); + } + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/SDK2AgentInternalApiProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/SDK2AgentInternalApiProxy.java new file mode 100644 index 0000000..b28aae3 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/SDK2AgentInternalApiProxy.java @@ -0,0 +1,172 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.impl.proxy; + +import java.lang.reflect.Method; + +import com.dynatrace.oneagent.sdk.impl.OneAgentSDKFactoryImpl; + +/** + * class forwards every API call to OneAgent impl via pre loaded reflection calls. + * + * @author Alram.Lechner + * + */ +public class SDK2AgentInternalApiProxy { + + private Object agentImpl; + private final Method oneAgentSDKFactory_createSdk; + private final Method oneAgentSDK_traceIncomingRemoteCall; + private final Method oneAgentSDK_traceOutgoingRemoteCall; + private final Method oneAgentSDK_createInProcessLink; + private final Method oneAgentSDK_traceInProcessLink; + private final Method oneAgentSDK_setLoggingCallback; + private final Method oneAgentSDK_isCapturing; + private final Method oneAgentSDK_addCustomRequestAttribute_1; // String, String + private final Method oneAgentSDK_addCustomRequestAttribute_2; // String, long + private final Method oneAgentSDK_addCustomRequestAttribute_3; // String, double + private final Method tracer_start; + private final Method tracer_end; + private final Method tracer_error_1; // string + private final Method tracer_error_2; // throwable + private final Method outgoingTaggable_getDynatraceStringTag; + private final Method outgoingTaggable_getDynatraceByteTag; + private final Method incomingTaggable_setDynatraceStringTag; + private final Method incomingTaggable_setDynatraceByteTag; + private final Method outgoingRemoteCallTracer_setProtocolName; + private final Method incomingRemoteCallTracer_setProtocolName; + + public SDK2AgentInternalApiProxy(Object agentImpl) throws NoSuchMethodException, SecurityException { + this.agentImpl = agentImpl; + oneAgentSDKFactory_createSdk = findMethod("oneAgentSDKFactory_createSDK", new Class[]{}); + oneAgentSDK_traceIncomingRemoteCall = findMethod("oneAgentSDK_traceIncomingRemoteCall", new Class[]{Object.class, String.class, String.class, String.class}); + oneAgentSDK_traceOutgoingRemoteCall = findMethod("oneAgentSDK_traceOutgoingRemoteCall", new Class[]{Object.class, String.class, String.class, String.class,Integer.TYPE, String.class}); + oneAgentSDK_createInProcessLink = findMethod("oneAgentSDK_createInProcessLink", new Class[]{Object.class}); + oneAgentSDK_traceInProcessLink = findMethod("oneAgentSDK_traceInProcessLink", new Class[]{Object.class, Object.class}); + oneAgentSDK_setLoggingCallback = findMethod("oneAgentSDK_setLoggingCallback", new Class[] {Object.class, Object.class}); + oneAgentSDK_isCapturing = findMethod("oneAgentSDK_isCapturing", new Class[] {Object.class}); + oneAgentSDK_addCustomRequestAttribute_1 = findMethod("oneAgentSDK_addCustomRequestAttribute", new Class[] {Object.class, String.class, String.class}); + oneAgentSDK_addCustomRequestAttribute_2 = findMethod("oneAgentSDK_addCustomRequestAttribute", new Class[] {Object.class, String.class, Long.TYPE}); + oneAgentSDK_addCustomRequestAttribute_3 = findMethod("oneAgentSDK_addCustomRequestAttribute", new Class[] {Object.class, String.class, Double.TYPE}); + tracer_start = findMethod("tracer_start", new Class[]{Object.class}); + tracer_end = findMethod("tracer_end", new Class[]{Object.class}); + tracer_error_1 = findMethod("tracer_error", new Class[]{Object.class,String.class}); + tracer_error_2 = findMethod("tracer_error", new Class[]{Object.class,Throwable.class}); + outgoingTaggable_getDynatraceStringTag = findMethod("outgoingTaggable_getDynatraceStringTag", new Class[] {Object.class}); + outgoingTaggable_getDynatraceByteTag = findMethod("outgoingTaggable_getDynatraceByteTag", new Class[] {Object.class}); + incomingTaggable_setDynatraceStringTag = findMethod("incomingTaggable_setDynatraceStringTag", new Class[] {Object.class, String.class}); + incomingTaggable_setDynatraceByteTag = findMethod("incomingTaggable_setDynatraceByteTag", new Class[] {Object.class, byte[].class}); + outgoingRemoteCallTracer_setProtocolName = findMethod("outgoingRemoteCallTracer_setProtocolName", new Class[] {Object.class, String.class}); + incomingRemoteCallTracer_setProtocolName = findMethod("incomingRemoteCallTracer_setProtocolName", new Class[] {Object.class, String.class}); + } + + private Method findMethod(String name, Class... args) throws NoSuchMethodException, SecurityException { + return agentImpl.getClass().getMethod(name, args); + } + + private Object invoke(Method m, Object... args) { + try { + return m.invoke(agentImpl, args); + } catch (Exception e) { + if (OneAgentSDKFactoryImpl.debugOneAgentSdkStub) { + e.printStackTrace(); + } + return null; + } + } + + public Object oneAgentSDKFactory_createSdk() { + return invoke(oneAgentSDKFactory_createSdk); + } + + Object oneAgentSDK_traceIncomingRemoteCall(Object sdk, String remoteMethod, String remoteService, String serviceEndpoint) { + return invoke(oneAgentSDK_traceIncomingRemoteCall, sdk, remoteMethod, remoteService, serviceEndpoint); + } + + Object oneAgentSDK_traceOutgoingRemoteCall(Object sdk, String remoteMethod, String remoteService, + String serverEndpoint, int channelType, String channelEndpoint) { + return invoke(oneAgentSDK_traceOutgoingRemoteCall, sdk, remoteMethod, remoteService, serverEndpoint, + channelType, channelEndpoint); + } + + Object oneAgentSDK_createInProcessLink(Object agentSdkImpl) { + return invoke(oneAgentSDK_createInProcessLink, agentSdkImpl); + } + + Object oneAgentSDK_traceInProcessLink(Object agentSdkImpl, InProcessLinkImpl inProcessLink) { + return invoke(oneAgentSDK_traceInProcessLink, agentSdkImpl, inProcessLink.getAgentProvidedLink()); + } + + void oneAgentSDK_setLoggingCallback(Object sdk, Object loggingCallback) { + invoke(oneAgentSDK_setLoggingCallback, sdk, loggingCallback); + } + + Boolean oneAgentSDK_isCapturing(Object sdk) { + return (Boolean) invoke(oneAgentSDK_isCapturing, sdk); + } + + public void oneAgentSDK_addCustomRequestAttribute(Object agentSdkImpl, String key, String value) { + invoke(oneAgentSDK_addCustomRequestAttribute_1, agentSdkImpl, key, value); + } + + public void oneAgentSDK_addCustomRequestAttribute(Object agentSdkImpl, String key, long value) { + invoke(oneAgentSDK_addCustomRequestAttribute_2, agentSdkImpl, key, value); + } + + public void oneAgentSDK_addCustomRequestAttribute(Object agentSdkImpl, String key, double value) { + invoke(oneAgentSDK_addCustomRequestAttribute_3, agentSdkImpl, key, value); + } + + void tracer_start(Object node) { + invoke(tracer_start, node); + } + + void tracer_end(Object node) { + invoke(tracer_end, node); + } + + void tracer_error(Object node, String message) { + invoke(tracer_error_1, node, message); + } + + void tracer_error(Object node, Throwable error) { + invoke(tracer_error_2, node, error); + } + + String outgoingTaggable_getDynatraceStringTag(Object taggableClient) { + return (String) invoke(outgoingTaggable_getDynatraceStringTag, taggableClient); + } + + byte[] outgoingTaggable_getDynatraceByteTag(Object taggableClient) { + return (byte[]) invoke(outgoingTaggable_getDynatraceByteTag, taggableClient); + } + + void incomingTaggable_setDynatraceStringTag(Object taggableServer, String tag) { + invoke(incomingTaggable_setDynatraceStringTag, taggableServer, tag); + } + + void incomingTaggable_setDynatraceByteTag(Object taggableServer, byte[] tag) { + invoke(incomingTaggable_setDynatraceByteTag, taggableServer, tag); + } + + void outgoingRemoteCallTracer_setProtocolName(Object remoteCallClient, String protocolname) { + invoke(outgoingRemoteCallTracer_setProtocolName, remoteCallClient, protocolname); + } + + void incomingRemoteCallTracer_setProtocolName(Object remoteCallServer, String protocolname) { + invoke(incomingRemoteCallTracer_setProtocolName, remoteCallServer, protocolname); + } +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/TraceableProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/TraceableProxy.java new file mode 100644 index 0000000..c28f3ac --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/TraceableProxy.java @@ -0,0 +1,53 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.impl.proxy; + +import com.dynatrace.oneagent.sdk.api.Tracer; + +abstract class TraceableProxy implements Tracer { + + protected final SDK2AgentInternalApiProxy apiProxy; + protected final Object agentsNodeObject; + + TraceableProxy(SDK2AgentInternalApiProxy apiProxy, Object node) { + this.apiProxy = apiProxy; + agentsNodeObject = node; + } + + @Override + public void start() { + apiProxy.tracer_start(agentsNodeObject); + + } + + @Override + public void end() { + apiProxy.tracer_end(agentsNodeObject); + + } + + @Override + public void error(String message) { + apiProxy.tracer_error(agentsNodeObject, message); + + } + + @Override + public void error(Throwable throwable) { + apiProxy.tracer_error(agentsNodeObject, throwable); + } + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/package-info.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/package-info.java new file mode 100644 index 0000000..6d3936f --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/package-info.java @@ -0,0 +1,20 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * internal SDK implementation. direct usage is forbidden. package provides + * proxy classes for forwarding requests to OneAgent. + */ +package com.dynatrace.oneagent.sdk.impl.proxy; From 853e0331cc7eca9fe1e5ec338544306d0022ae17 Mon Sep 17 00:00:00 2001 From: Alram Lechner Date: Thu, 12 Jul 2018 15:39:27 +0200 Subject: [PATCH 09/36] add links to maven central --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a102233..d104bcf 100644 --- a/README.md +++ b/README.md @@ -297,7 +297,7 @@ see also https://github.com/Dynatrace/OneAgent-SDK-for-Java/releases |Version|Description |Links | |:------|:--------------------------------------|:----------------------------------------| -|1.3.0 |Added support for incoming webrequests |not released| +|1.3.0 |Added support for incoming webrequests |[binary](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.3.0/oneagent-sdk-1.3.0.jar) [source](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.3.0/oneagent-sdk-1.3.0-sources.jar) [javadoc](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.3.0/oneagent-sdk-1.3.0-javadoc.jar)| |1.2.0 |Added support for in-process-linking |[binary](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.2.0/oneagent-sdk-1.2.0.jar) [source](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.2.0/oneagent-sdk-1.2.0-sources.jar) [javadoc](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.2.0/oneagent-sdk-1.2.0-javadoc.jar)| |1.1.0 |Added support for in-process-linking |[binary](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.1.0/oneagent-sdk-1.1.0.jar) [source](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.1.0/oneagent-sdk-1.1.0-sources.jar) [javadoc](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.1.0/oneagent-sdk-1.1.0-javadoc.jar)| |1.0.3 |Initial release |[binary](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.0.3/oneagent-sdk-1.0.3.jar) [source](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.0.3/oneagent-sdk-1.0.3-sources.jar) [javadoc](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.0.3/oneagent-sdk-1.0.3-javadoc.jar)| From 41bb2b1dfb8ff4722afda73a3701bc9fced97846 Mon Sep 17 00:00:00 2001 From: Alram Lechner Date: Fri, 13 Jul 2018 13:16:12 +0200 Subject: [PATCH 10/36] modified sample to show outgoing webrequest usage also --- README.md | 48 +++++++++- samples/README.md | 2 +- samples/webrequest/pom.xml | 10 +- .../samples/webrequest/FakedHttpClient.java | 93 +++++++++++++++++++ .../samples/webrequest/FakedWebserver.java | 79 ++++++++++++---- .../webrequest/IncomingWebRequestApp.java | 80 ---------------- .../sdk/samples/webrequest/WebRequestApp.java | 92 ++++++++++++++++++ 7 files changed, 296 insertions(+), 108 deletions(-) create mode 100644 samples/webrequest/src/main/java/com/dynatrace/oneagent/sdk/samples/webrequest/FakedHttpClient.java delete mode 100644 samples/webrequest/src/main/java/com/dynatrace/oneagent/sdk/samples/webrequest/IncomingWebRequestApp.java create mode 100644 samples/webrequest/src/main/java/com/dynatrace/oneagent/sdk/samples/webrequest/WebRequestApp.java diff --git a/README.md b/README.md index d104bcf..9ca3b48 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,8 @@ This is the official Java implementation of the [Dynatrace OneAgent SDK](https:/ * [Trace incoming and outgoing remote calls](#remoting) * [In process linking](#inprocess) * [Add custom request attributes](#scav) - * [Trace incoming web requests](#webrequests) + * [Trace incoming web requests](#inwebrequests) + * [Trace outgoing web requests](#outwebrequests) * [Further reading](#furtherreading) * [Help & Support](#help) * [Release notes](#releasenotes) @@ -42,6 +43,7 @@ This is the official Java implementation of the [Dynatrace OneAgent SDK](https:/ |OneAgent SDK for Java|Required OneAgent version| |:--------------------|:------------------------| +|1.4.0 |>=1.151 | |1.3.0 |>=1.149 | |1.2.0 |>=1.147 | |1.1.0 |>=1.143 | @@ -59,7 +61,7 @@ If you want to integrate the OneAgent SDK into your application, just add the fo com.dynatrace.oneagent.sdk.java oneagent-sdk - 1.3.0 + 1.4.0 compile @@ -130,6 +132,7 @@ A more detailed specification of the features can be found in [Dynatrace OneAgen |Feature |Required OneAgent SDK for Java version| |:-----------------------------------------|:-------------------------------------| +|Outgoing webrequests |>=1.4.0 | |Incoming webrequests |>=1.3.0 | |Custom request attributes |>=1.2.0 | |In process linking |>=1.1.0 | @@ -216,7 +219,7 @@ oneAgentSDK.addCustomRequestAttribute("salesAmount", 2500); When no service call is being traced, the custom request attributes are dropped. - + ## Trace incoming web requests @@ -258,6 +261,44 @@ try { } ``` + + +## Trace outgoing web requests + +You can use the SDK to trace outgoing web requests. This might be useful if Dynatrace does not support the respective http library or language. + +To trace a outgoing web request you need to create a Tracer object. It is important to send the Dynatrace Header. This ensures that tagging with our built-in sensor is working. + +```Java +OutgoingWebRequestTracer outgoingWebRequestTracer = oneAgentSdk.traceOutgoingWebRequest(url, "GET"); +outgoingWebRequestTracer.start(); +try { + yourHttpClient.setUrl(url); + + // sending HTTP header OneAgentSDK.DYNATRACE_HTTP_HEADERNAME is necessary for tagging: + yourHttpClient.addRequestHeader(OneAgentSDK.DYNATRACE_HTTP_HEADERNAME, outgoingWebRequestTracer.getDynatraceStringTag()); + + // provide all request headers to outgoingWebRequestTracer (optional): + for (Entry entry : yourHttpClient.getRequestHeaders().entrySet()) { + outgoingWebRequestTracer.addRequestHeader(entry.getKey(), entry.getValue()); + } + + yourHttpClient.processHttpRequest(); + + for (Entry> entry : yourHttpClient.getHeaderFields().entrySet()) { + for (String value : entry.getValue()) { + outgoingWebRequestTracer.addResponseHeader(entry.getKey(), value); + } + } + outgoingWebRequestTracer.setStatusCode(yourHttpClient.getResponseCode()); + +} catch (Exception e) { + outgoingWebRequestTracer.error(e); +} finally { + outgoingWebRequestTracer.end(); +} +``` + ## Further readings @@ -297,6 +338,7 @@ see also https://github.com/Dynatrace/OneAgent-SDK-for-Java/releases |Version|Description |Links | |:------|:--------------------------------------|:----------------------------------------| +|1.4.0 |Added support for outgoing webrequests |[binary](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.4.0/oneagent-sdk-1.4.0.jar) [source](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.4.0/oneagent-sdk-1.4.0-sources.jar) [javadoc](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.4.0/oneagent-sdk-1.4.0-javadoc.jar)| |1.3.0 |Added support for incoming webrequests |[binary](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.3.0/oneagent-sdk-1.3.0.jar) [source](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.3.0/oneagent-sdk-1.3.0-sources.jar) [javadoc](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.3.0/oneagent-sdk-1.3.0-javadoc.jar)| |1.2.0 |Added support for in-process-linking |[binary](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.2.0/oneagent-sdk-1.2.0.jar) [source](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.2.0/oneagent-sdk-1.2.0-sources.jar) [javadoc](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.2.0/oneagent-sdk-1.2.0-javadoc.jar)| |1.1.0 |Added support for in-process-linking |[binary](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.1.0/oneagent-sdk-1.1.0.jar) [source](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.1.0/oneagent-sdk-1.1.0-sources.jar) [javadoc](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.1.0/oneagent-sdk-1.1.0-javadoc.jar)| diff --git a/samples/README.md b/samples/README.md index 3457498..9a1aa00 100644 --- a/samples/README.md +++ b/samples/README.md @@ -34,7 +34,7 @@ Check your Dynatrace environment for newly created services like that: ![in-process-linking-service](img/in-process-linking-service.png) ### Run WebRequest sample application -This Application shows how to trace incoming webrequests. To run this sample you just go into the sample directory and run the sample by typing: +This Application shows how to trace outgoing- and incoming webrequests. To run this sample you just go into the sample directory and run the sample by typing: - run sample: `mvn exec:exec` diff --git a/samples/webrequest/pom.xml b/samples/webrequest/pom.xml index 9a66390..64bf7c1 100644 --- a/samples/webrequest/pom.xml +++ b/samples/webrequest/pom.xml @@ -6,20 +6,20 @@ com.dynatrace.oneagent.sdk.samples.webrequest webrequest-sample - 1.3.0 + 1.4.0 jar com.dynatrace.oneagent.sdk.java oneagent-sdk - 1.3.0 + 1.4.0 compile https://github.com/Dynatrace/OneAgent-SDK-Java - Dynatrace OneAgent SDK Java In-Process-Linking sample + Dynatrace OneAgent SDK Java WebRequest sample Dynatrace http://www.dynatrace.com @@ -52,7 +52,7 @@ true - com.dynatrace.oneagent.sdk.samples.webrequest.IncomingWebRequestApp + com.dynatrace.oneagent.sdk.samples.webrequest.WebRequestApp @@ -74,7 +74,7 @@ ${agent.agentpath} -classpath - com.dynatrace.oneagent.sdk.samples.webrequest.IncomingWebRequestApp + com.dynatrace.oneagent.sdk.samples.webrequest.WebRequestApp diff --git a/samples/webrequest/src/main/java/com/dynatrace/oneagent/sdk/samples/webrequest/FakedHttpClient.java b/samples/webrequest/src/main/java/com/dynatrace/oneagent/sdk/samples/webrequest/FakedHttpClient.java new file mode 100644 index 0000000..1e8567b --- /dev/null +++ b/samples/webrequest/src/main/java/com/dynatrace/oneagent/sdk/samples/webrequest/FakedHttpClient.java @@ -0,0 +1,93 @@ +package com.dynatrace.oneagent.sdk.samples.webrequest; + +import java.net.InetAddress; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.UnknownHostException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.dynatrace.oneagent.sdk.samples.webrequest.FakedWebserver.HttpRequest; +import com.dynatrace.oneagent.sdk.samples.webrequest.FakedWebserver.HttpResponse; + +public class FakedHttpClient implements HttpResponse { + + // REQUEST + private URL url; + private String method; + private Map> requestHeaders = new HashMap>(); + + // RESPONSE + private int statusCode; + private Map> responseHeaders = new HashMap>(); + + public FakedHttpClient(String url, String method) throws MalformedURLException { + this.method = method; + this.url = new URL(url); + } + + public void addRequestHeader(String requestHeader, String value) { + List values = requestHeaders.get(requestHeader); + if (values == null) { + values = new ArrayList(); + requestHeaders.put(requestHeader, values); + } + values.add(value); + } + + public void addResponseHeader(String headerField, String value) { + List values = responseHeaders.get(headerField); + if (values == null) { + values = new ArrayList(); + responseHeaders.put(headerField, values); + } + values.add(value); + } + + public void executeRequest() { + // a normal HTTP client should open plain tcp socket and send the request now ... + // ... but we are putting them into non-blocking queue: + + // build the request object, as a standard web container would provide it ... + HttpRequest httpRequest; + String clientIp; + try { + clientIp = InetAddress.getLocalHost().getHostAddress(); + } catch (UnknownHostException e) { + clientIp = "192.168.4.5"; // fake IP + } + httpRequest = new HttpRequest(url.getPath() + "?" + url.getQuery(), method, clientIp); + + // ... and queue it for processing: + WebRequestApp.instance.webServer.enqeueHttpRequestForProcessing(httpRequest, this); + } + + public Map> getRequestHeaders() { + return requestHeaders; + } + + public Map> getResponseHeaders() { + return responseHeaders; + } + + public int getStatusCode() { + return statusCode; + } + + public void setResponseHeaders(Map> responseHeaders) { + this.responseHeaders = responseHeaders; + } + + @Override + public void setStatusCode(int statusCode) { + this.statusCode = statusCode; + } + + @Override + public void setContent(byte[] content) { + // ignore the content we got from server + } + +} diff --git a/samples/webrequest/src/main/java/com/dynatrace/oneagent/sdk/samples/webrequest/FakedWebserver.java b/samples/webrequest/src/main/java/com/dynatrace/oneagent/sdk/samples/webrequest/FakedWebserver.java index f2600f9..b2f4f9d 100644 --- a/samples/webrequest/src/main/java/com/dynatrace/oneagent/sdk/samples/webrequest/FakedWebserver.java +++ b/samples/webrequest/src/main/java/com/dynatrace/oneagent/sdk/samples/webrequest/FakedWebserver.java @@ -4,6 +4,8 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.BlockingQueue; import com.dynatrace.oneagent.sdk.api.IncomingWebRequestTracer; import com.dynatrace.oneagent.sdk.api.OneAgentSDK; @@ -14,23 +16,67 @@ public class FakedWebserver { private final OneAgentSDK oneAgentSDK; private final WebApplicationInfo webAppInfo; + private final BlockingQueue requestQueue = new ArrayBlockingQueue(10); + public FakedWebserver(OneAgentSDK oneAgentSDK) { this.oneAgentSDK = oneAgentSDK; webAppInfo = oneAgentSDK.createWebApplicationInfo("servername", "BillingService", "/billing"); + new RequestProcessor().start(); } - public static class HttpResponse { - - public void setStatus(int i) { - + private class RequestProcessor extends Thread { + private RequestProcessor() { + super("Webserver-Worker"); + setDaemon(true); } + @Override + public void run() { + while (true) { + Pair incomingRequest; + try { + incomingRequest = requestQueue.take(); + } catch (InterruptedException e) { + e.printStackTrace(); + return; + } + serve(incomingRequest.httpRequest, incomingRequest.httpResponse); + } + } + } + + private class Pair { + public HttpRequest httpRequest; + public HttpResponse httpResponse; + + public Pair(HttpRequest httpRequest, HttpResponse httpResponse) { + this.httpRequest = httpRequest; + this.httpResponse = httpResponse; + } + } + + public void enqeueHttpRequestForProcessing(HttpRequest httpRequest, HttpResponse httpResponse) { + try { + requestQueue.put(new Pair(httpRequest,httpResponse)); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + public static interface HttpResponse { + + public void setStatusCode(int statusCode); + + public void addResponseHeader(String headerField, String value); + + public void setContent(byte[] content); } public static class HttpRequest { private final String remoteIpAddress; private final String uri; private final String method; + Map requestHeaders = new HashMap(); public HttpRequest(String uri, String method, String remoteIpAddress) { this.uri = uri; @@ -47,9 +93,7 @@ public String getMethod() { } public Map getHeaders() { - Map receivedHeaders = new HashMap(); - // receivedHeaders.put("x-Dynatrace", ""); - return receivedHeaders; + return requestHeaders; } public Map> getParameters() { @@ -59,33 +103,30 @@ public Map> getParameters() { public String getRemoteIpAddress() { return remoteIpAddress; } - - } /** faked http request handling. shows usage of OneAgent SDK's incoming webrequest API */ - public HttpResponse serve(HttpRequest session) { - String url = session.getUri(); - - IncomingWebRequestTracer incomingWebrequestTracer = oneAgentSDK.traceIncomingWebRequest(webAppInfo, url, session.getMethod()); + private void serve(HttpRequest request, HttpResponse response) { + String url = request.getUri(); + System.out.println("[Server] serve " + url); + IncomingWebRequestTracer incomingWebrequestTracer = oneAgentSDK.traceIncomingWebRequest(webAppInfo, url, request.getMethod()); // add request header, parameter and remote address before start: - for (Entry headerField : session.getHeaders().entrySet()) { + for (Entry headerField : request.getHeaders().entrySet()) { incomingWebrequestTracer.addRequestHeader(headerField.getKey(), headerField.getValue()); } - for (Entry> headerField : session.getParameters().entrySet()) { + for (Entry> headerField : request.getParameters().entrySet()) { for (String value : headerField.getValue()) { incomingWebrequestTracer.addParameter(headerField.getKey(), value); } } - incomingWebrequestTracer.setRemoteAddress(session.getRemoteIpAddress()); + incomingWebrequestTracer.setRemoteAddress(request.getRemoteIpAddress()); incomingWebrequestTracer.start(); - HttpResponse response = new HttpResponse(); try { - response.setStatus(200); + response.setContent("Hello world!".getBytes()); + response.setStatusCode(200); incomingWebrequestTracer.setStatusCode(200); - return response; } catch (Exception e) { // we assume, container is sending http 500 in case of exception is thrown while serving an request: incomingWebrequestTracer.error(e); diff --git a/samples/webrequest/src/main/java/com/dynatrace/oneagent/sdk/samples/webrequest/IncomingWebRequestApp.java b/samples/webrequest/src/main/java/com/dynatrace/oneagent/sdk/samples/webrequest/IncomingWebRequestApp.java deleted file mode 100644 index 0f9b7ff..0000000 --- a/samples/webrequest/src/main/java/com/dynatrace/oneagent/sdk/samples/webrequest/IncomingWebRequestApp.java +++ /dev/null @@ -1,80 +0,0 @@ -package com.dynatrace.oneagent.sdk.samples.webrequest; - -/* - * Copyright 2018 Dynatrace LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import java.io.IOException; -import java.sql.SQLException; - -import com.dynatrace.oneagent.sdk.OneAgentSDKFactory; -import com.dynatrace.oneagent.sdk.api.OneAgentSDK; -import com.dynatrace.oneagent.sdk.samples.webrequest.FakedWebserver.HttpRequest; - -/** - * Sample application shows how incoming webrequests should be traced. - * - * @author Alram.Lechner - * - */ -public class IncomingWebRequestApp { - - private final OneAgentSDK oneAgentSdk; - private final FakedWebserver webServer; - - private IncomingWebRequestApp() { - oneAgentSdk = OneAgentSDKFactory.createInstance(); - oneAgentSdk.setLoggingCallback(new StdErrLoggingCallback()); - switch (oneAgentSdk.getCurrentState()) { - case ACTIVE: - System.out.println("SDK is active and capturing."); - break; - case PERMANENTLY_INACTIVE: - System.err.println( - "SDK is PERMANENT_INACTIVE; Probably no OneAgent injected or OneAgent is incompatible with SDK."); - break; - case TEMPORARILY_INACTIVE: - System.err.println( - "SDK is TEMPORARY_INACTIVE; OneAgent has been deactivated - check OneAgent configuration."); - break; - default: - System.err.println("SDK is in unknown state."); - break; - } - webServer = new FakedWebserver(oneAgentSdk); - } - - public static void main(String args[]) { - System.out.println("*************************************************************"); - System.out.println("** Running incoming webrequests sample **"); - System.out.println("*************************************************************"); - try { - IncomingWebRequestApp app = new IncomingWebRequestApp(); - app.runIncomingWebrequest(); - System.out.println("sample application stopped. sleeping a while, so OneAgent is able to send data to server ..."); - Thread.sleep(15000 * 3); // we have to wait - so OneAgent is able to send data to server - } catch (Exception e) { - System.err.println("in-process-linking sample failed: " + e.getMessage()); - e.printStackTrace(); - System.exit(-1); - } - } - - private void runIncomingWebrequest() throws IOException, ClassNotFoundException, InterruptedException, SQLException { - System.out.println("run faked incoming webrequest ..."); - webServer.serve(new HttpRequest("/billing/showBill?id=234324", "GET", "192.168.13.14")); - } - -} diff --git a/samples/webrequest/src/main/java/com/dynatrace/oneagent/sdk/samples/webrequest/WebRequestApp.java b/samples/webrequest/src/main/java/com/dynatrace/oneagent/sdk/samples/webrequest/WebRequestApp.java new file mode 100644 index 0000000..609e992 --- /dev/null +++ b/samples/webrequest/src/main/java/com/dynatrace/oneagent/sdk/samples/webrequest/WebRequestApp.java @@ -0,0 +1,92 @@ +package com.dynatrace.oneagent.sdk.samples.webrequest; + +import java.util.List; +import java.util.Map.Entry; + +import com.dynatrace.oneagent.sdk.OneAgentSDKFactory; +import com.dynatrace.oneagent.sdk.api.OneAgentSDK; +import com.dynatrace.oneagent.sdk.api.OutgoingWebRequestTracer; + +/** + * Sample application shows how incoming webrequests should be traced. + * + * @author Alram.Lechner + * + */ +public class WebRequestApp { + + private final OneAgentSDK oneAgentSdk; + final FakedWebserver webServer; + + static WebRequestApp instance; + + + private WebRequestApp() { + oneAgentSdk = OneAgentSDKFactory.createInstance(); + oneAgentSdk.setLoggingCallback(new StdErrLoggingCallback()); + switch (oneAgentSdk.getCurrentState()) { + case ACTIVE: + System.out.println("SDK is active and capturing."); + break; + case PERMANENTLY_INACTIVE: + System.err.println( + "SDK is PERMANENT_INACTIVE; Probably no OneAgent injected or OneAgent is incompatible with SDK."); + break; + case TEMPORARILY_INACTIVE: + System.err.println( + "SDK is TEMPORARY_INACTIVE; OneAgent has been deactivated - check OneAgent configuration."); + break; + default: + System.err.println("SDK is in unknown state."); + break; + } + webServer = new FakedWebserver(oneAgentSdk); + instance = this; + } + + public static void main(String args[]) { + System.out.println("*************************************************************"); + System.out.println("** Running webrequest sample **"); + System.out.println("*************************************************************"); + try { + WebRequestApp app = new WebRequestApp(); + app.runFakedWebrequest(); + // app.runIncomingWebrequest(); + System.out.println("sample application stopped. sleeping a while, so OneAgent is able to send data to server ..."); + Thread.sleep(15000 * 3); // we have to wait - so OneAgent is able to send data to server + } catch (Exception e) { + System.err.println("webrequest sample failed: " + e.getMessage()); + e.printStackTrace(); + System.exit(-1); + } + } + + private void runFakedWebrequest() { + String url = "http://localhost:80/my/path?param1=value1¶m2=value2"; + System.out.println("[Client] request " + url); + OutgoingWebRequestTracer outgoingWebRequestTracer = oneAgentSdk.traceOutgoingWebRequest(url, "GET"); + outgoingWebRequestTracer.start(); + try { + FakedHttpClient httpClient = new FakedHttpClient(url, "GET"); + + // add link to headers ... + httpClient.addRequestHeader(OneAgentSDK.DYNATRACE_HTTP_HEADERNAME, outgoingWebRequestTracer.getDynatraceStringTag()); + + httpClient.executeRequest(); + + // add response headers to tracer: + for (Entry> entry : httpClient.getResponseHeaders().entrySet()) { + for (String value : entry.getValue()) { + outgoingWebRequestTracer.addResponseHeader(entry.getKey(), value); + } + } + + outgoingWebRequestTracer.setStatusCode(httpClient.getStatusCode()); + } catch (Exception e) { + outgoingWebRequestTracer.error(e); + } finally { + outgoingWebRequestTracer.end(); + } + } + +} From 232b5a387c4b3bf99ad6b80f106d92322eebf187 Mon Sep 17 00:00:00 2001 From: Alram Lechner Date: Fri, 13 Jul 2018 13:44:21 +0200 Subject: [PATCH 11/36] fix sample --- .../samples/webrequest/FakedHttpClient.java | 2 +- .../samples/webrequest/FakedWebserver.java | 19 +++++++++++-------- .../sdk/samples/webrequest/WebRequestApp.java | 2 +- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/samples/webrequest/src/main/java/com/dynatrace/oneagent/sdk/samples/webrequest/FakedHttpClient.java b/samples/webrequest/src/main/java/com/dynatrace/oneagent/sdk/samples/webrequest/FakedHttpClient.java index 1e8567b..f760fbc 100644 --- a/samples/webrequest/src/main/java/com/dynatrace/oneagent/sdk/samples/webrequest/FakedHttpClient.java +++ b/samples/webrequest/src/main/java/com/dynatrace/oneagent/sdk/samples/webrequest/FakedHttpClient.java @@ -58,7 +58,7 @@ public void executeRequest() { } catch (UnknownHostException e) { clientIp = "192.168.4.5"; // fake IP } - httpRequest = new HttpRequest(url.getPath() + "?" + url.getQuery(), method, clientIp); + httpRequest = new HttpRequest(url.getPath() + "?" + url.getQuery(), method, clientIp, requestHeaders); // ... and queue it for processing: WebRequestApp.instance.webServer.enqeueHttpRequestForProcessing(httpRequest, this); diff --git a/samples/webrequest/src/main/java/com/dynatrace/oneagent/sdk/samples/webrequest/FakedWebserver.java b/samples/webrequest/src/main/java/com/dynatrace/oneagent/sdk/samples/webrequest/FakedWebserver.java index b2f4f9d..8f010eb 100644 --- a/samples/webrequest/src/main/java/com/dynatrace/oneagent/sdk/samples/webrequest/FakedWebserver.java +++ b/samples/webrequest/src/main/java/com/dynatrace/oneagent/sdk/samples/webrequest/FakedWebserver.java @@ -76,12 +76,13 @@ public static class HttpRequest { private final String remoteIpAddress; private final String uri; private final String method; - Map requestHeaders = new HashMap(); + private final Map> requestHeaders; - public HttpRequest(String uri, String method, String remoteIpAddress) { + public HttpRequest(String uri, String method, String remoteIpAddress, Map> requestHeaders) { this.uri = uri; this.method = method; this.remoteIpAddress = remoteIpAddress; + this.requestHeaders = requestHeaders; } public String getUri() { @@ -92,7 +93,7 @@ public String getMethod() { return method; } - public Map getHeaders() { + public Map> getHeaders() { return requestHeaders; } @@ -112,12 +113,14 @@ private void serve(HttpRequest request, HttpResponse response) { IncomingWebRequestTracer incomingWebrequestTracer = oneAgentSDK.traceIncomingWebRequest(webAppInfo, url, request.getMethod()); // add request header, parameter and remote address before start: - for (Entry headerField : request.getHeaders().entrySet()) { - incomingWebrequestTracer.addRequestHeader(headerField.getKey(), headerField.getValue()); - } - for (Entry> headerField : request.getParameters().entrySet()) { + for (Entry> headerField : request.getHeaders().entrySet()) { for (String value : headerField.getValue()) { - incomingWebrequestTracer.addParameter(headerField.getKey(), value); + incomingWebrequestTracer.addRequestHeader(headerField.getKey(), value); + } + } + for (Entry> parameter : request.getParameters().entrySet()) { + for (String value : parameter.getValue()) { + incomingWebrequestTracer.addParameter(parameter.getKey(), value); } } incomingWebrequestTracer.setRemoteAddress(request.getRemoteIpAddress()); diff --git a/samples/webrequest/src/main/java/com/dynatrace/oneagent/sdk/samples/webrequest/WebRequestApp.java b/samples/webrequest/src/main/java/com/dynatrace/oneagent/sdk/samples/webrequest/WebRequestApp.java index 609e992..aac1ae9 100644 --- a/samples/webrequest/src/main/java/com/dynatrace/oneagent/sdk/samples/webrequest/WebRequestApp.java +++ b/samples/webrequest/src/main/java/com/dynatrace/oneagent/sdk/samples/webrequest/WebRequestApp.java @@ -62,7 +62,7 @@ public static void main(String args[]) { } private void runFakedWebrequest() { - String url = "http://localhost:80/my/path?param1=value1¶m2=value2"; + String url = "http://localhost:80/billing/my/path?param1=value1¶m2=value2"; System.out.println("[Client] request " + url); OutgoingWebRequestTracer outgoingWebRequestTracer = oneAgentSdk.traceOutgoingWebRequest(url, "GET"); outgoingWebRequestTracer.start(); From 7494382cf5fc9a73df18ed7c621af0d705f944fc Mon Sep 17 00:00:00 2001 From: Alram Lechner Date: Mon, 16 Jul 2018 16:35:50 +0200 Subject: [PATCH 12/36] fix typo --- README.md | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 9ca3b48..b030a91 100644 --- a/README.md +++ b/README.md @@ -20,8 +20,9 @@ This is the official Java implementation of the [Dynatrace OneAgent SDK](https:/ * [Trace incoming and outgoing remote calls](#remoting) * [In process linking](#inprocess) * [Add custom request attributes](#scav) - * [Trace incoming web requests](#inwebrequests) - * [Trace outgoing web requests](#outwebrequests) + * [Trace web requests](#webrequests) + * [Trace incoming web requests](#inwebrequests) + * [Trace outgoing web requests](#outwebrequests) * [Further reading](#furtherreading) * [Help & Support](#help) * [Release notes](#releasenotes) @@ -219,19 +220,23 @@ oneAgentSDK.addCustomRequestAttribute("salesAmount", 2500); When no service call is being traced, the custom request attributes are dropped. + + +## Trace web requests + -## Trace incoming web requests +### Trace incoming web requests -You can use the SDK to trace incoming web requests. This might be useful if Dynatrace does not support the respective web server framework or language. +You can use the SDK to trace incoming web requests. This might be useful if Dynatrace does not support the respective web server framework or language processing the incoming web requests. -To trace any kind of incoming web request you first need to create a WebServerInfo object. The info object represents the endpoint of your web server (webservername, applicationname and context root). This object should be reused for all traced webrequests for the same application. +To trace an incoming web request you first need to create a WebServerInfo object. The info object represents the endpoint of your web server (web server name, application name and context root). This object should be reused for all traced web requests within for the same application. ```Java WebServerInfo wsInfo = OneAgentSDK.createWebServerInfo("WebShopProduction", "CheckoutService", "/api/service/checkout"); ``` -To trace a specific incoming web request you then need to create a Tracer object. It is important to provide all http headers from the request to the SDK by calling addRequestHeader(...). This ensures that tagging with our built-in sensor is working. +To trace a specific incoming web request you then need to create a Tracer object. Make sure you provide all http headers from the request to the SDK by calling addRequestHeader(...). This ensures that tagging with our built-in sensor is working. ```Java IncomingWebRequestTracer tracer = OneAgentSDK.traceIncomingWebRequest(wsInfo,"https://www.oursupershop.com/api/service/checkout/save","POST") @@ -263,7 +268,7 @@ try { -## Trace outgoing web requests +### Trace outgoing web requests You can use the SDK to trace outgoing web requests. This might be useful if Dynatrace does not support the respective http library or language. From 1b5a6ed5c780858055294334fa7c01120a171b23 Mon Sep 17 00:00:00 2001 From: Alram Lechner Date: Tue, 17 Jul 2018 12:19:08 +0200 Subject: [PATCH 13/36] add javadoc and source --- docs/allclasses-frame.html | 8 +- docs/allclasses-noframe.html | 8 +- .../oneagent/sdk/OneAgentSDKFactory.html | 8 +- .../oneagent/sdk/api/InProcessLink.html | 8 +- .../oneagent/sdk/api/InProcessLinkTracer.html | 8 +- .../sdk/api/IncomingRemoteCallTracer.html | 8 +- .../oneagent/sdk/api/IncomingTaggable.html | 8 +- .../sdk/api/IncomingWebRequestTracer.html | 8 +- .../oneagent/sdk/api/LoggingCallback.html | 8 +- .../oneagent/sdk/api/OneAgentSDK.html | 35 ++- .../sdk/api/OutgoingRemoteCallTracer.html | 8 +- .../oneagent/sdk/api/OutgoingTaggable.html | 14 +- .../sdk/api/OutgoingWebRequestTracer.html | 291 ++++++++++++++++++ .../dynatrace/oneagent/sdk/api/Tracer.html | 14 +- .../oneagent/sdk/api/enums/ChannelType.html | 8 +- .../oneagent/sdk/api/enums/SDKState.html | 8 +- .../oneagent/sdk/api/enums/package-frame.html | 6 +- .../sdk/api/enums/package-summary.html | 8 +- .../oneagent/sdk/api/enums/package-tree.html | 8 +- .../sdk/api/infos/WebApplicationInfo.html | 8 +- .../oneagent/sdk/api/infos/package-frame.html | 6 +- .../sdk/api/infos/package-summary.html | 8 +- .../oneagent/sdk/api/infos/package-tree.html | 8 +- .../oneagent/sdk/api/package-frame.html | 8 +- .../oneagent/sdk/api/package-summary.html | 12 +- .../oneagent/sdk/api/package-tree.html | 10 +- .../dynatrace/oneagent/sdk/package-frame.html | 6 +- .../oneagent/sdk/package-summary.html | 8 +- .../dynatrace/oneagent/sdk/package-tree.html | 8 +- docs/constant-values.html | 8 +- docs/deprecated-list.html | 8 +- docs/help-doc.html | 8 +- docs/index-all.html | 22 +- docs/index.html | 4 +- docs/overview-frame.html | 6 +- docs/overview-summary.html | 10 +- docs/overview-tree.html | 10 +- .../oneagent/sdk/api/OneAgentSDK.java | 11 + .../sdk/api/OutgoingWebRequestTracer.java | 50 +++ .../sdk/impl/OneAgentSDKFactoryImpl.java | 2 +- .../oneagent/sdk/impl/noop/NodeNoop.java | 4 + .../sdk/impl/noop/OneAgentSDKNoop.java | 6 + .../noop/OutgoingWebRequestTracerNoop.java | 45 +++ .../impl/noop/RemoteCallClientTracerNoop.java | 4 - .../sdk/impl/proxy/OneAgentSDKProxy.java | 14 + .../proxy/OutgoingWebRequestTracerProxy.java | 52 ++++ .../impl/proxy/SDK2AgentInternalApiProxy.java | 16 +- 47 files changed, 681 insertions(+), 153 deletions(-) create mode 100644 docs/com/dynatrace/oneagent/sdk/api/OutgoingWebRequestTracer.html create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingWebRequestTracer.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OutgoingWebRequestTracerNoop.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OutgoingWebRequestTracerProxy.java diff --git a/docs/allclasses-frame.html b/docs/allclasses-frame.html index 90c2c8a..16ce9bc 100644 --- a/docs/allclasses-frame.html +++ b/docs/allclasses-frame.html @@ -2,12 +2,12 @@ - + -All Classes (sdk 1.3.0 API) +All Classes (sdk 1.4.0 API) - + @@ -43,6 +43,8 @@
    OutgoingTaggable
    +OutgoingWebRequestTracer +
    SDKState
    Tracer diff --git a/docs/allclasses-noframe.html b/docs/allclasses-noframe.html index fc34028..823e43b 100644 --- a/docs/allclasses-noframe.html +++ b/docs/allclasses-noframe.html @@ -2,12 +2,12 @@ - + -All Classes (sdk 1.3.0 API) +All Classes (sdk 1.4.0 API) - + @@ -43,6 +43,8 @@
    OutgoingTaggable
    +OutgoingWebRequestTracer +
    SDKState
    Tracer diff --git a/docs/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.html b/docs/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.html index ef8a5fc..54e4f40 100644 --- a/docs/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.html +++ b/docs/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.html @@ -2,12 +2,12 @@ - + -OneAgentSDKFactory (sdk 1.3.0 API) +OneAgentSDKFactory (sdk 1.4.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="OneAgentSDKFactory (sdk 1.3.0 API)"; + parent.document.title="OneAgentSDKFactory (sdk 1.4.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/InProcessLink.html b/docs/com/dynatrace/oneagent/sdk/api/InProcessLink.html index c517369..dc1ea90 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/InProcessLink.html +++ b/docs/com/dynatrace/oneagent/sdk/api/InProcessLink.html @@ -2,12 +2,12 @@ - + -InProcessLink (sdk 1.3.0 API) +InProcessLink (sdk 1.4.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="InProcessLink (sdk 1.3.0 API)"; + parent.document.title="InProcessLink (sdk 1.4.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.html b/docs/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.html index 611e954..76c2133 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.html +++ b/docs/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.html @@ -2,12 +2,12 @@ - + -InProcessLinkTracer (sdk 1.3.0 API) +InProcessLinkTracer (sdk 1.4.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="InProcessLinkTracer (sdk 1.3.0 API)"; + parent.document.title="InProcessLinkTracer (sdk 1.4.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.html b/docs/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.html index 39156ba..cd0edb0 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.html +++ b/docs/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.html @@ -2,12 +2,12 @@ - + -IncomingRemoteCallTracer (sdk 1.3.0 API) +IncomingRemoteCallTracer (sdk 1.4.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="IncomingRemoteCallTracer (sdk 1.3.0 API)"; + parent.document.title="IncomingRemoteCallTracer (sdk 1.4.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/IncomingTaggable.html b/docs/com/dynatrace/oneagent/sdk/api/IncomingTaggable.html index 54cd5a5..f099b9f 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/IncomingTaggable.html +++ b/docs/com/dynatrace/oneagent/sdk/api/IncomingTaggable.html @@ -2,12 +2,12 @@ - + -IncomingTaggable (sdk 1.3.0 API) +IncomingTaggable (sdk 1.4.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="IncomingTaggable (sdk 1.3.0 API)"; + parent.document.title="IncomingTaggable (sdk 1.4.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/IncomingWebRequestTracer.html b/docs/com/dynatrace/oneagent/sdk/api/IncomingWebRequestTracer.html index bd95104..8ed6814 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/IncomingWebRequestTracer.html +++ b/docs/com/dynatrace/oneagent/sdk/api/IncomingWebRequestTracer.html @@ -2,12 +2,12 @@ - + -IncomingWebRequestTracer (sdk 1.3.0 API) +IncomingWebRequestTracer (sdk 1.4.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="IncomingWebRequestTracer (sdk 1.3.0 API)"; + parent.document.title="IncomingWebRequestTracer (sdk 1.4.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/LoggingCallback.html b/docs/com/dynatrace/oneagent/sdk/api/LoggingCallback.html index 81647e0..5c44d86 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/LoggingCallback.html +++ b/docs/com/dynatrace/oneagent/sdk/api/LoggingCallback.html @@ -2,12 +2,12 @@ - + -LoggingCallback (sdk 1.3.0 API) +LoggingCallback (sdk 1.4.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="LoggingCallback (sdk 1.3.0 API)"; + parent.document.title="LoggingCallback (sdk 1.4.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/OneAgentSDK.html b/docs/com/dynatrace/oneagent/sdk/api/OneAgentSDK.html index bd806c6..0c01b3a 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/OneAgentSDK.html +++ b/docs/com/dynatrace/oneagent/sdk/api/OneAgentSDK.html @@ -2,12 +2,12 @@ - + -OneAgentSDK (sdk 1.3.0 API) +OneAgentSDK (sdk 1.4.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="OneAgentSDK (sdk 1.3.0 API)"; + parent.document.title="OneAgentSDK (sdk 1.4.0 API)"; } } @@ -236,6 +236,15 @@


              Traces an outgoing remote call. + + + OutgoingWebRequestTracer +traceOutgoingWebRequest(java.lang.String url, + java.lang.String method) + +
    +          Traces an outgoing web request. +  

    @@ -311,6 +320,24 @@


    +

    +traceOutgoingWebRequest

    +
    +OutgoingWebRequestTracer traceOutgoingWebRequest(java.lang.String url,
    +                                                 java.lang.String method)
    +
    +
    Traces an outgoing web request. +

    +

    +
    Parameters:
    url - URL, which will be parsed into: scheme, hostname/port, path & query + Note: the hostname will be resolved by the Agent at start() call
    method - HTTP request method +
    Returns:
    OutgoingWebRequestTracer to work with
    Since:
    +
    1.4
    +
    +
    +
    +
    +

    traceIncomingRemoteCall

    diff --git a/docs/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.html b/docs/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.html
    index 169e190..3e1fc99 100644
    --- a/docs/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.html
    +++ b/docs/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.html
    @@ -2,12 +2,12 @@
     
     
     
    -
    +
     
    -OutgoingRemoteCallTracer (sdk 1.3.0 API)
    +OutgoingRemoteCallTracer (sdk 1.4.0 API)
     
     
    -
    +
     
     
     
    @@ -15,7 +15,7 @@
     function windowTitle()
     {
         if (location.href.indexOf('is-external=true') == -1) {
    -        parent.document.title="OutgoingRemoteCallTracer (sdk 1.3.0 API)";
    +        parent.document.title="OutgoingRemoteCallTracer (sdk 1.4.0 API)";
         }
     }
     
    diff --git a/docs/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.html b/docs/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.html
    index dd7f3e1..8a3dc12 100644
    --- a/docs/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.html
    +++ b/docs/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.html
    @@ -2,12 +2,12 @@
     
     
     
    -
    +
     
    -OutgoingTaggable (sdk 1.3.0 API)
    +OutgoingTaggable (sdk 1.4.0 API)
     
     
    -
    +
     
     
     
    @@ -15,7 +15,7 @@
     function windowTitle()
     {
         if (location.href.indexOf('is-external=true') == -1) {
    -        parent.document.title="OutgoingTaggable (sdk 1.3.0 API)";
    +        parent.document.title="OutgoingTaggable (sdk 1.4.0 API)";
         }
     }
     
    @@ -55,7 +55,7 @@
     
     
      PREV CLASS 
    - NEXT CLASSNEXT CLASS
     
       FRAMES   
      NO FRAMES   
    @@ -91,7 +91,7 @@ 


    Interface OutgoingTaggable

    -
    All Known Subinterfaces:
    OutgoingRemoteCallTracer
    +
    All Known Subinterfaces:
    OutgoingRemoteCallTracer, OutgoingWebRequestTracer

    @@ -211,7 +211,7 @@

     PREV CLASS  - NEXT CLASSNEXT CLASS FRAMES    NO FRAMES   diff --git a/docs/com/dynatrace/oneagent/sdk/api/OutgoingWebRequestTracer.html b/docs/com/dynatrace/oneagent/sdk/api/OutgoingWebRequestTracer.html new file mode 100644 index 0000000..f5ec410 --- /dev/null +++ b/docs/com/dynatrace/oneagent/sdk/api/OutgoingWebRequestTracer.html @@ -0,0 +1,291 @@ + + + + + + +OutgoingWebRequestTracer (sdk 1.4.0 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +com.dynatrace.oneagent.sdk.api +
    +Interface OutgoingWebRequestTracer

    +
    +
    All Superinterfaces:
    OutgoingTaggable, Tracer
    +
    +
    +
    +
    public interface OutgoingWebRequestTracer
    extends Tracer, OutgoingTaggable
    +

    + +

    +Represents client side of an outgoing webrequest. +

    + +

    +

    +
    Since:
    +
    1.4
    +
    +
    + +

    + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + voidaddRequestHeader(java.lang.String name, + java.lang.String value) + +
    +          All HTTP request headers should be provided to this method.
    + voidaddResponseHeader(java.lang.String name, + java.lang.String value) + +
    +          All HTTP response headers returned by the server should be provided to this method.
    + voidsetStatusCode(int statusCode) + +
    +          Sets the HTTP response status code.
    + + + + + + + +
    Methods inherited from interface com.dynatrace.oneagent.sdk.api.Tracer
    end, error, error, start
    + + + + + + + +
    Methods inherited from interface com.dynatrace.oneagent.sdk.api.OutgoingTaggable
    getDynatraceByteTag, getDynatraceStringTag
    +  +

    + + + + + + + + +
    +Method Detail
    + +

    +addRequestHeader

    +
    +void addRequestHeader(java.lang.String name,
    +                      java.lang.String value)
    +
    +
    All HTTP request headers should be provided to this method. Selective capturing will be done based on sensor configuration. +

    +

    +
    +
    +
    +
    Parameters:
    name - HTTP request header field name
    value - HTTP request header field value
    +
    +
    +
    + +

    +addResponseHeader

    +
    +void addResponseHeader(java.lang.String name,
    +                       java.lang.String value)
    +
    +
    All HTTP response headers returned by the server should be provided to this method. Selective capturing will + be done based on sensor configuration. +

    +

    +
    +
    +
    +
    Parameters:
    name - HTTP response header field name
    value - HTTP response header field value
    +
    +
    +
    + +

    +setStatusCode

    +
    +void setStatusCode(int statusCode)
    +
    +
    Sets the HTTP response status code. +

    +

    +
    +
    +
    +
    Parameters:
    statusCode - HTTP status code retrieved from server
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + + + diff --git a/docs/com/dynatrace/oneagent/sdk/api/Tracer.html b/docs/com/dynatrace/oneagent/sdk/api/Tracer.html index 2a1e13e..b4c7f42 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/Tracer.html +++ b/docs/com/dynatrace/oneagent/sdk/api/Tracer.html @@ -2,12 +2,12 @@ - + -Tracer (sdk 1.3.0 API) +Tracer (sdk 1.4.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Tracer (sdk 1.3.0 API)"; + parent.document.title="Tracer (sdk 1.4.0 API)"; } } @@ -54,7 +54,7 @@ PREV CLASS  + PREV CLASS   NEXT CLASS FRAMES   @@ -91,7 +91,7 @@


    Interface Tracer

    -
    All Known Subinterfaces:
    IncomingRemoteCallTracer, IncomingWebRequestTracer, InProcessLinkTracer, OutgoingRemoteCallTracer
    +
    All Known Subinterfaces:
    IncomingRemoteCallTracer, IncomingWebRequestTracer, InProcessLinkTracer, OutgoingRemoteCallTracer, OutgoingWebRequestTracer

    @@ -281,7 +281,7 @@

    PREV CLASS  + PREV CLASS   NEXT CLASS FRAMES   diff --git a/docs/com/dynatrace/oneagent/sdk/api/enums/ChannelType.html b/docs/com/dynatrace/oneagent/sdk/api/enums/ChannelType.html index 2c4bfe4..8325139 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/enums/ChannelType.html +++ b/docs/com/dynatrace/oneagent/sdk/api/enums/ChannelType.html @@ -2,12 +2,12 @@ - + -ChannelType (sdk 1.3.0 API) +ChannelType (sdk 1.4.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="ChannelType (sdk 1.3.0 API)"; + parent.document.title="ChannelType (sdk 1.4.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/enums/SDKState.html b/docs/com/dynatrace/oneagent/sdk/api/enums/SDKState.html index 670c81e..ed780bf 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/enums/SDKState.html +++ b/docs/com/dynatrace/oneagent/sdk/api/enums/SDKState.html @@ -2,12 +2,12 @@ - + -SDKState (sdk 1.3.0 API) +SDKState (sdk 1.4.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="SDKState (sdk 1.3.0 API)"; + parent.document.title="SDKState (sdk 1.4.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/enums/package-frame.html b/docs/com/dynatrace/oneagent/sdk/api/enums/package-frame.html index 989ed4c..6e89aae 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/enums/package-frame.html +++ b/docs/com/dynatrace/oneagent/sdk/api/enums/package-frame.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api.enums (sdk 1.3.0 API) +com.dynatrace.oneagent.sdk.api.enums (sdk 1.4.0 API) - + diff --git a/docs/com/dynatrace/oneagent/sdk/api/enums/package-summary.html b/docs/com/dynatrace/oneagent/sdk/api/enums/package-summary.html index b541ed4..53ceedf 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/enums/package-summary.html +++ b/docs/com/dynatrace/oneagent/sdk/api/enums/package-summary.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api.enums (sdk 1.3.0 API) +com.dynatrace.oneagent.sdk.api.enums (sdk 1.4.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.dynatrace.oneagent.sdk.api.enums (sdk 1.3.0 API)"; + parent.document.title="com.dynatrace.oneagent.sdk.api.enums (sdk 1.4.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/enums/package-tree.html b/docs/com/dynatrace/oneagent/sdk/api/enums/package-tree.html index ef2821c..79c751d 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/enums/package-tree.html +++ b/docs/com/dynatrace/oneagent/sdk/api/enums/package-tree.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api.enums Class Hierarchy (sdk 1.3.0 API) +com.dynatrace.oneagent.sdk.api.enums Class Hierarchy (sdk 1.4.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.dynatrace.oneagent.sdk.api.enums Class Hierarchy (sdk 1.3.0 API)"; + parent.document.title="com.dynatrace.oneagent.sdk.api.enums Class Hierarchy (sdk 1.4.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/infos/WebApplicationInfo.html b/docs/com/dynatrace/oneagent/sdk/api/infos/WebApplicationInfo.html index 9fb24c3..50fe833 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/infos/WebApplicationInfo.html +++ b/docs/com/dynatrace/oneagent/sdk/api/infos/WebApplicationInfo.html @@ -2,12 +2,12 @@ - + -WebApplicationInfo (sdk 1.3.0 API) +WebApplicationInfo (sdk 1.4.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="WebApplicationInfo (sdk 1.3.0 API)"; + parent.document.title="WebApplicationInfo (sdk 1.4.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/infos/package-frame.html b/docs/com/dynatrace/oneagent/sdk/api/infos/package-frame.html index 46bfeb4..7c465a6 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/infos/package-frame.html +++ b/docs/com/dynatrace/oneagent/sdk/api/infos/package-frame.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api.infos (sdk 1.3.0 API) +com.dynatrace.oneagent.sdk.api.infos (sdk 1.4.0 API) - + diff --git a/docs/com/dynatrace/oneagent/sdk/api/infos/package-summary.html b/docs/com/dynatrace/oneagent/sdk/api/infos/package-summary.html index 1fd737b..6d61100 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/infos/package-summary.html +++ b/docs/com/dynatrace/oneagent/sdk/api/infos/package-summary.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api.infos (sdk 1.3.0 API) +com.dynatrace.oneagent.sdk.api.infos (sdk 1.4.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.dynatrace.oneagent.sdk.api.infos (sdk 1.3.0 API)"; + parent.document.title="com.dynatrace.oneagent.sdk.api.infos (sdk 1.4.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/infos/package-tree.html b/docs/com/dynatrace/oneagent/sdk/api/infos/package-tree.html index 773a30e..3dc5728 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/infos/package-tree.html +++ b/docs/com/dynatrace/oneagent/sdk/api/infos/package-tree.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api.infos Class Hierarchy (sdk 1.3.0 API) +com.dynatrace.oneagent.sdk.api.infos Class Hierarchy (sdk 1.4.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.dynatrace.oneagent.sdk.api.infos Class Hierarchy (sdk 1.3.0 API)"; + parent.document.title="com.dynatrace.oneagent.sdk.api.infos Class Hierarchy (sdk 1.4.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/package-frame.html b/docs/com/dynatrace/oneagent/sdk/api/package-frame.html index a9a1dc6..cbf7d14 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/package-frame.html +++ b/docs/com/dynatrace/oneagent/sdk/api/package-frame.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api (sdk 1.3.0 API) +com.dynatrace.oneagent.sdk.api (sdk 1.4.0 API) - + @@ -41,6 +41,8 @@
    OutgoingTaggable
    +OutgoingWebRequestTracer +
    Tracer
    diff --git a/docs/com/dynatrace/oneagent/sdk/api/package-summary.html b/docs/com/dynatrace/oneagent/sdk/api/package-summary.html index 3922815..2fedb45 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/package-summary.html +++ b/docs/com/dynatrace/oneagent/sdk/api/package-summary.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api (sdk 1.3.0 API) +com.dynatrace.oneagent.sdk.api (sdk 1.4.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.dynatrace.oneagent.sdk.api (sdk 1.3.0 API)"; + parent.document.title="com.dynatrace.oneagent.sdk.api (sdk 1.4.0 API)"; } } @@ -125,6 +125,10 @@

    Common interface for client-tagging-related methods. +OutgoingWebRequestTracer +Represents client side of an outgoing webrequest. + + Tracer Common interface for timing-related methods. diff --git a/docs/com/dynatrace/oneagent/sdk/api/package-tree.html b/docs/com/dynatrace/oneagent/sdk/api/package-tree.html index 800bedd..30ff0c8 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/package-tree.html +++ b/docs/com/dynatrace/oneagent/sdk/api/package-tree.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api Class Hierarchy (sdk 1.3.0 API) +com.dynatrace.oneagent.sdk.api Class Hierarchy (sdk 1.4.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.dynatrace.oneagent.sdk.api Class Hierarchy (sdk 1.3.0 API)"; + parent.document.title="com.dynatrace.oneagent.sdk.api Class Hierarchy (sdk 1.4.0 API)"; } } @@ -96,11 +96,13 @@

  • com.dynatrace.oneagent.sdk.api.InProcessLink
  • com.dynatrace.oneagent.sdk.api.LoggingCallback
  • com.dynatrace.oneagent.sdk.api.OneAgentSDK
  • com.dynatrace.oneagent.sdk.api.OutgoingTaggable
  • com.dynatrace.oneagent.sdk.api.Tracer
    diff --git a/docs/com/dynatrace/oneagent/sdk/package-frame.html b/docs/com/dynatrace/oneagent/sdk/package-frame.html index abb9b3a..cfbdf69 100644 --- a/docs/com/dynatrace/oneagent/sdk/package-frame.html +++ b/docs/com/dynatrace/oneagent/sdk/package-frame.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk (sdk 1.3.0 API) +com.dynatrace.oneagent.sdk (sdk 1.4.0 API) - + diff --git a/docs/com/dynatrace/oneagent/sdk/package-summary.html b/docs/com/dynatrace/oneagent/sdk/package-summary.html index 9172ac1..6378ae7 100644 --- a/docs/com/dynatrace/oneagent/sdk/package-summary.html +++ b/docs/com/dynatrace/oneagent/sdk/package-summary.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk (sdk 1.3.0 API) +com.dynatrace.oneagent.sdk (sdk 1.4.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.dynatrace.oneagent.sdk (sdk 1.3.0 API)"; + parent.document.title="com.dynatrace.oneagent.sdk (sdk 1.4.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/package-tree.html b/docs/com/dynatrace/oneagent/sdk/package-tree.html index 258764c..7fed654 100644 --- a/docs/com/dynatrace/oneagent/sdk/package-tree.html +++ b/docs/com/dynatrace/oneagent/sdk/package-tree.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk Class Hierarchy (sdk 1.3.0 API) +com.dynatrace.oneagent.sdk Class Hierarchy (sdk 1.4.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.dynatrace.oneagent.sdk Class Hierarchy (sdk 1.3.0 API)"; + parent.document.title="com.dynatrace.oneagent.sdk Class Hierarchy (sdk 1.4.0 API)"; } } diff --git a/docs/constant-values.html b/docs/constant-values.html index 2cf137c..227ffc3 100644 --- a/docs/constant-values.html +++ b/docs/constant-values.html @@ -2,12 +2,12 @@ - + -Constant Field Values (sdk 1.3.0 API) +Constant Field Values (sdk 1.4.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Constant Field Values (sdk 1.3.0 API)"; + parent.document.title="Constant Field Values (sdk 1.4.0 API)"; } } diff --git a/docs/deprecated-list.html b/docs/deprecated-list.html index 0cc8a1c..d228476 100644 --- a/docs/deprecated-list.html +++ b/docs/deprecated-list.html @@ -2,12 +2,12 @@ - + -Deprecated List (sdk 1.3.0 API) +Deprecated List (sdk 1.4.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Deprecated List (sdk 1.3.0 API)"; + parent.document.title="Deprecated List (sdk 1.4.0 API)"; } } diff --git a/docs/help-doc.html b/docs/help-doc.html index 94e3b26..97e2d8a 100644 --- a/docs/help-doc.html +++ b/docs/help-doc.html @@ -2,12 +2,12 @@ - + -API Help (sdk 1.3.0 API) +API Help (sdk 1.4.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="API Help (sdk 1.3.0 API)"; + parent.document.title="API Help (sdk 1.4.0 API)"; } } diff --git a/docs/index-all.html b/docs/index-all.html index 65e316a..a9421e4 100644 --- a/docs/index-all.html +++ b/docs/index-all.html @@ -2,12 +2,12 @@ - + -Index (sdk 1.3.0 API) +Index (sdk 1.4.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Index (sdk 1.3.0 API)"; + parent.document.title="Index (sdk 1.4.0 API)"; } } @@ -96,9 +96,15 @@
    addRequestHeader(String, String) - Method in interface com.dynatrace.oneagent.sdk.api.IncomingWebRequestTracer
    All HTTP request headers should be provided to this method. +
    addRequestHeader(String, String) - +Method in interface com.dynatrace.oneagent.sdk.api.OutgoingWebRequestTracer +
    All HTTP request headers should be provided to this method.
    addResponseHeader(String, String) - Method in interface com.dynatrace.oneagent.sdk.api.IncomingWebRequestTracer
    All HTTP response headers should be provided to this method. +
    addResponseHeader(String, String) - +Method in interface com.dynatrace.oneagent.sdk.api.OutgoingWebRequestTracer +
    All HTTP response headers returned by the server should be provided to this method.

  • @@ -177,7 +183,7 @@
    OneAgentSDK - Interface in com.dynatrace.oneagent.sdk.api
    Root interface contains provided Agent SDK API calls.
    OneAgentSDKFactory - Class in com.dynatrace.oneagent.sdk
    Entry point for customer application.
    OneAgentSDKFactory() - Constructor for class com.dynatrace.oneagent.sdk.OneAgentSDKFactory
      -
    OutgoingRemoteCallTracer - Interface in com.dynatrace.oneagent.sdk.api
    Represents the client side of a remote call.
    OutgoingTaggable - Interface in com.dynatrace.oneagent.sdk.api
    Common interface for client-tagging-related methods. +
    OutgoingRemoteCallTracer - Interface in com.dynatrace.oneagent.sdk.api
    Represents the client side of a remote call.
    OutgoingTaggable - Interface in com.dynatrace.oneagent.sdk.api
    Common interface for client-tagging-related methods.
    OutgoingWebRequestTracer - Interface in com.dynatrace.oneagent.sdk.api
    Represents client side of an outgoing webrequest.

    S

    @@ -204,6 +210,9 @@
    setStatusCode(int) - Method in interface com.dynatrace.oneagent.sdk.api.IncomingWebRequestTracer
    Sets the HTTP response status code. +
    setStatusCode(int) - +Method in interface com.dynatrace.oneagent.sdk.api.OutgoingWebRequestTracer +
    Sets the HTTP response status code.
    start() - Method in interface com.dynatrace.oneagent.sdk.api.Tracer
    starts timing of a node. @@ -224,6 +233,9 @@
    traceOutgoingRemoteCall(String, String, String, ChannelType, String) - Method in interface com.dynatrace.oneagent.sdk.api.OneAgentSDK
    Traces an outgoing remote call. +
    traceOutgoingWebRequest(String, String) - +Method in interface com.dynatrace.oneagent.sdk.api.OneAgentSDK +
    Traces an outgoing web request.
    Tracer - Interface in com.dynatrace.oneagent.sdk.api
    Common interface for timing-related methods.

    diff --git a/docs/index.html b/docs/index.html index 1bc31b3..33ddefa 100644 --- a/docs/index.html +++ b/docs/index.html @@ -2,9 +2,9 @@ - + -sdk 1.3.0 API +sdk 1.4.0 API @@ -80,7 +80,7 @@

    -sdk 1.3.0 API +sdk 1.4.0 API

    diff --git a/docs/overview-tree.html b/docs/overview-tree.html index 663fc58..69e579d 100644 --- a/docs/overview-tree.html +++ b/docs/overview-tree.html @@ -2,12 +2,12 @@ - + -Class Hierarchy (sdk 1.3.0 API) +Class Hierarchy (sdk 1.4.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Class Hierarchy (sdk 1.3.0 API)"; + parent.document.title="Class Hierarchy (sdk 1.4.0 API)"; } } @@ -102,11 +102,13 @@

  • com.dynatrace.oneagent.sdk.api.InProcessLink
  • com.dynatrace.oneagent.sdk.api.LoggingCallback
  • com.dynatrace.oneagent.sdk.api.OneAgentSDK
  • com.dynatrace.oneagent.sdk.api.OutgoingTaggable
  • com.dynatrace.oneagent.sdk.api.Tracer
  • com.dynatrace.oneagent.sdk.api.infos.WebApplicationInfo

    diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/OneAgentSDK.java b/src/main/java/com/dynatrace/oneagent/sdk/api/OneAgentSDK.java index ed3e371..9b91524 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/OneAgentSDK.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/OneAgentSDK.java @@ -63,6 +63,17 @@ public interface OneAgentSDK { */ IncomingWebRequestTracer traceIncomingWebRequest(WebApplicationInfo webApplicationInfo, String url, String method); + /** + * Traces an outgoing web request. + * + * @param url URL, which will be parsed into: scheme, hostname/port, path & query + * Note: the hostname will be resolved by the Agent at start() call + * @param method HTTP request method + * @return {@link OutgoingWebRequestTracer} to work with + * @since 1.4 + */ + OutgoingWebRequestTracer traceOutgoingWebRequest(String url, String method); + // ***** Remote Calls (outgoing & incoming) ***** /** diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingWebRequestTracer.java b/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingWebRequestTracer.java new file mode 100644 index 0000000..6515a11 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingWebRequestTracer.java @@ -0,0 +1,50 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.api; + +/** + * Represents client side of an outgoing webrequest. + * + * @since 1.4 + * + */ +public interface OutgoingWebRequestTracer extends Tracer, OutgoingTaggable { + + /** + * All HTTP request headers should be provided to this method. Selective capturing will be done based on sensor configuration. + * + * @param name HTTP request header field name + * @param value HTTP request header field value + */ + void addRequestHeader(String name, String value); + + /** + * All HTTP response headers returned by the server should be provided to this method. Selective capturing will + * be done based on sensor configuration. + * + * @param name HTTP response header field name + * @param value HTTP response header field value + */ + void addResponseHeader(String name, String value); + + /** + * Sets the HTTP response status code. + * + * @param statusCode HTTP status code retrieved from server + */ + void setStatusCode(int statusCode); + +} \ No newline at end of file diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/OneAgentSDKFactoryImpl.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/OneAgentSDKFactoryImpl.java index 8ed3a9c..6064b32 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/OneAgentSDKFactoryImpl.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/OneAgentSDKFactoryImpl.java @@ -27,7 +27,7 @@ public class OneAgentSDKFactoryImpl { /* increase version with every change. in case of non breaking change (to OneAgent), increase oneSdkFix only. */ static final int oneSdkMajor = 1; - static final int oneSdkMinor = 3; + static final int oneSdkMinor = 4; static final int oneSdkFix = 0; /** the only SDK instance (one for every classLoader) */ diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/NodeNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/NodeNoop.java index 354e7d4..df8b9b5 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/NodeNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/NodeNoop.java @@ -19,6 +19,10 @@ class NodeNoop implements Tracer { + protected static final byte[] NO_TAG_BLOB = new byte[] {}; + protected static final String NO_TAG_STRING = ""; + + @Override public void start() { } diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OneAgentSDKNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OneAgentSDKNoop.java index 42f4da5..d86dce2 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OneAgentSDKNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OneAgentSDKNoop.java @@ -22,6 +22,7 @@ import com.dynatrace.oneagent.sdk.api.LoggingCallback; import com.dynatrace.oneagent.sdk.api.OneAgentSDK; import com.dynatrace.oneagent.sdk.api.OutgoingRemoteCallTracer; +import com.dynatrace.oneagent.sdk.api.OutgoingWebRequestTracer; import com.dynatrace.oneagent.sdk.api.enums.SDKState; import com.dynatrace.oneagent.sdk.api.infos.WebApplicationInfo; import com.dynatrace.oneagent.sdk.api.enums.ChannelType; @@ -91,4 +92,9 @@ public void addCustomRequestAttribute(String key, long value) { @Override public void addCustomRequestAttribute(String key, double value) { } + + @Override + public OutgoingWebRequestTracer traceOutgoingWebRequest(String url, String method) { + return OutgoingWebRequestTracerNoop.INSTANCE; + } } diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OutgoingWebRequestTracerNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OutgoingWebRequestTracerNoop.java new file mode 100644 index 0000000..95ca020 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OutgoingWebRequestTracerNoop.java @@ -0,0 +1,45 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.impl.noop; + +import com.dynatrace.oneagent.sdk.api.OutgoingWebRequestTracer; + +public class OutgoingWebRequestTracerNoop extends NodeNoop implements OutgoingWebRequestTracer { + public static final OutgoingWebRequestTracerNoop INSTANCE = new OutgoingWebRequestTracerNoop(); + + @Override + public String getDynatraceStringTag() { + return NO_TAG_STRING; + } + + @Override + public byte[] getDynatraceByteTag() { + return NO_TAG_BLOB; + } + + @Override + public void addRequestHeader(String name, String value) { + } + + @Override + public void addResponseHeader(String name, String value) { + } + + @Override + public void setStatusCode(int statusCode) { + } + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/RemoteCallClientTracerNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/RemoteCallClientTracerNoop.java index 9bed376..d70847a 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/RemoteCallClientTracerNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/RemoteCallClientTracerNoop.java @@ -21,10 +21,6 @@ public class RemoteCallClientTracerNoop extends NodeNoop implements OutgoingRemo public static final OutgoingRemoteCallTracer INSTANCE = new RemoteCallClientTracerNoop(); - private static final byte[] NO_TAG_BLOB = new byte[] {}; - private static final String NO_TAG_STRING = ""; - - private RemoteCallClientTracerNoop() { } diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OneAgentSDKProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OneAgentSDKProxy.java index 76bf1e3..963d0aa 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OneAgentSDKProxy.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OneAgentSDKProxy.java @@ -22,6 +22,7 @@ import com.dynatrace.oneagent.sdk.api.LoggingCallback; import com.dynatrace.oneagent.sdk.api.OneAgentSDK; import com.dynatrace.oneagent.sdk.api.OutgoingRemoteCallTracer; +import com.dynatrace.oneagent.sdk.api.OutgoingWebRequestTracer; import com.dynatrace.oneagent.sdk.api.enums.SDKState; import com.dynatrace.oneagent.sdk.api.infos.WebApplicationInfo; import com.dynatrace.oneagent.sdk.api.enums.ChannelType; @@ -29,6 +30,7 @@ import com.dynatrace.oneagent.sdk.impl.noop.InProcessLinkNoop; import com.dynatrace.oneagent.sdk.impl.noop.InProcessLinkTracerNoop; import com.dynatrace.oneagent.sdk.impl.noop.IncomingWebRequestTracerNoop; +import com.dynatrace.oneagent.sdk.impl.noop.OutgoingWebRequestTracerNoop; import com.dynatrace.oneagent.sdk.impl.noop.RemoteCallClientTracerNoop; import com.dynatrace.oneagent.sdk.impl.noop.RemoteCallServerTracerNoop; import com.dynatrace.oneagent.sdk.impl.noop.WebApplicationInfoNoop; @@ -169,4 +171,16 @@ public IncomingWebRequestTracer traceIncomingWebRequest(WebApplicationInfo webAp return new IncomingWebRequestProxy(apiProxy, agentObject); } + @Override + public OutgoingWebRequestTracer traceOutgoingWebRequest(String url, String method) { + Object agentObject = apiProxy.oneAgentSDK_traceOutgoingWebRequest(agentSdkImpl, url, method); + if (agentObject == null) { + if (OneAgentSDKFactoryImpl.debugOneAgentSdkStub) { + OneAgentSDKFactoryImpl.logDebug("- OneAgent failed to provide provide object"); + } + return OutgoingWebRequestTracerNoop.INSTANCE; + } + return new OutgoingWebRequestTracerProxy(apiProxy, agentObject); + } + } diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OutgoingWebRequestTracerProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OutgoingWebRequestTracerProxy.java new file mode 100644 index 0000000..05196a4 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OutgoingWebRequestTracerProxy.java @@ -0,0 +1,52 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.impl.proxy; + +import com.dynatrace.oneagent.sdk.api.OutgoingWebRequestTracer; + +public class OutgoingWebRequestTracerProxy extends TraceableProxy implements OutgoingWebRequestTracer { + + OutgoingWebRequestTracerProxy(SDK2AgentInternalApiProxy apiProxy, Object oneAgentSDK_createOutgoingWebreqeustTracer) { + super(apiProxy, oneAgentSDK_createOutgoingWebreqeustTracer); + } + + @Override + public String getDynatraceStringTag() { + return apiProxy.outgoingTaggable_getDynatraceStringTag(agentsNodeObject); + } + + @Override + public byte[] getDynatraceByteTag() { + return apiProxy.outgoingTaggable_getDynatraceByteTag(agentsNodeObject); + } + + @Override + public void addRequestHeader(String name, String value) { + apiProxy.webRequestTracer_addRequestHeader(agentsNodeObject, name, value); + } + + @Override + public void addResponseHeader(String name, String value) { + apiProxy.webRequestTracer_addResponseHeader(agentsNodeObject, name, value); + } + + @Override + public void setStatusCode(int statusCode) { + apiProxy.webRequestTracer_setStatusCode(agentsNodeObject, statusCode); + } + + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/SDK2AgentInternalApiProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/SDK2AgentInternalApiProxy.java index 500a2cc..da144b8 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/SDK2AgentInternalApiProxy.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/SDK2AgentInternalApiProxy.java @@ -39,6 +39,7 @@ public class SDK2AgentInternalApiProxy { private final Method oneAgentSDK_addCustomRequestAttribute_2; // String, long private final Method oneAgentSDK_addCustomRequestAttribute_3; // String, double private final Method oneAgentSDK_traceIncomingWebRequest; + private final Method oneAgentSDK_traceOutgoingWebRequest; private final Method tracer_start; private final Method tracer_end; private final Method tracer_error_1; // string @@ -69,6 +70,7 @@ public SDK2AgentInternalApiProxy(Object agentImpl) throws NoSuchMethodException, oneAgentSDK_addCustomRequestAttribute_2 = findMethod("oneAgentSDK_addCustomRequestAttribute", new Class[] {Object.class, String.class, Long.TYPE}); oneAgentSDK_addCustomRequestAttribute_3 = findMethod("oneAgentSDK_addCustomRequestAttribute", new Class[] {Object.class, String.class, Double.TYPE}); oneAgentSDK_traceIncomingWebRequest = findMethod("oneAgentSDK_traceIncomingWebRequest", new Class[] {Object.class, String.class, String.class, String.class, String.class, String.class}); + oneAgentSDK_traceOutgoingWebRequest = findMethod("oneAgentSDK_traceOutgoingWebRequest", new Class[] {Object.class, String.class, String.class}); tracer_start = findMethod("tracer_start", new Class[]{Object.class}); tracer_end = findMethod("tracer_end", new Class[]{Object.class}); tracer_error_1 = findMethod("tracer_error", new Class[]{Object.class,String.class}); @@ -79,11 +81,11 @@ public SDK2AgentInternalApiProxy(Object agentImpl) throws NoSuchMethodException, incomingTaggable_setDynatraceByteTag = findMethod("incomingTaggable_setDynatraceByteTag", new Class[] {Object.class, byte[].class}); outgoingRemoteCallTracer_setProtocolName = findMethod("outgoingRemoteCallTracer_setProtocolName", new Class[] {Object.class, String.class}); incomingRemoteCallTracer_setProtocolName = findMethod("incomingRemoteCallTracer_setProtocolName", new Class[] {Object.class, String.class}); - webRequestTracer_setStatusCode= findMethod("webRequestTracer_setStatusCode", new Class[] {Object.class, Integer.TYPE}); - webRequestTracer_addResponseHeader= findMethod("webRequestTracer_addResponseHeader", new Class[] {Object.class, String.class, String.class}); - webRequestTracer_addRequestHeader= findMethod("webRequestTracer_addRequestHeader", new Class[] {Object.class, String.class, String.class}); - incomingWebRequestTracer_setRemoteAddress= findMethod("incomingWebRequestTracer_setRemoteAddress", new Class[] {Object.class, String.class}); - incomingWebRequestTracer_addParameter= findMethod("incomingWebRequestTracer_addParameter", new Class[] {Object.class, String.class, String.class}); + webRequestTracer_setStatusCode = findMethod("webRequestTracer_setStatusCode", new Class[] {Object.class, Integer.TYPE}); + webRequestTracer_addResponseHeader = findMethod("webRequestTracer_addResponseHeader", new Class[] {Object.class, String.class, String.class}); + webRequestTracer_addRequestHeader = findMethod("webRequestTracer_addRequestHeader", new Class[] {Object.class, String.class, String.class}); + incomingWebRequestTracer_setRemoteAddress = findMethod("incomingWebRequestTracer_setRemoteAddress", new Class[] {Object.class, String.class}); + incomingWebRequestTracer_addParameter = findMethod("incomingWebRequestTracer_addParameter", new Class[] {Object.class, String.class, String.class}); } private Method findMethod(String name, Class... args) throws NoSuchMethodException, SecurityException { @@ -129,6 +131,10 @@ Object oneAgentSDK_traceIncomingWebRequest(Object agentSdkImpl, WebApplicationIn webApplicationInfo.getApplicationID(), webApplicationInfo.getContextRoot(), url, method); } + Object oneAgentSDK_traceOutgoingWebRequest(Object agentSdkImpl, String url, String method) { + return invoke(oneAgentSDK_traceOutgoingWebRequest, agentSdkImpl, url, method); + } + void oneAgentSDK_setLoggingCallback(Object sdk, Object loggingCallback) { invoke(oneAgentSDK_setLoggingCallback, sdk, loggingCallback); } From 71872b4ebc986f82dafa4da7473563468f8e7f50 Mon Sep 17 00:00:00 2001 From: Alram Lechner Date: Tue, 17 Jul 2018 12:43:56 +0200 Subject: [PATCH 14/36] code format --- .../oneagent/sdk/OneAgentSDKFactory.java | 24 +- .../oneagent/sdk/api/InProcessLink.java | 1 + .../oneagent/sdk/api/InProcessLinkTracer.java | 1 + .../sdk/api/IncomingRemoteCallTracer.java | 21 +- .../oneagent/sdk/api/IncomingTaggable.java | 38 +- .../sdk/api/IncomingWebRequestTracer.java | 41 ++- .../oneagent/sdk/api/LoggingCallback.java | 38 +- .../oneagent/sdk/api/OneAgentSDK.java | 220 +++++++----- .../sdk/api/OutgoingRemoteCallTracer.java | 20 +- .../oneagent/sdk/api/OutgoingTaggable.java | 35 +- .../sdk/api/OutgoingWebRequestTracer.java | 22 +- .../dynatrace/oneagent/sdk/api/Tracer.java | 118 +++--- .../oneagent/sdk/api/enums/ChannelType.java | 18 +- .../oneagent/sdk/api/enums/SDKState.java | 41 ++- .../sdk/api/infos/WebApplicationInfo.java | 3 +- .../sdk/impl/OneAgentSDKFactoryImpl.java | 93 ++--- .../sdk/impl/SDKInstanceProvider.java | 4 +- .../sdk/impl/noop/InProcessLinkNoop.java | 4 +- .../impl/noop/InProcessLinkTracerNoop.java | 2 +- .../noop/IncomingWebRequestTracerNoop.java | 16 +- .../oneagent/sdk/impl/noop/NodeNoop.java | 29 +- .../sdk/impl/noop/OneAgentSDKNoop.java | 35 +- .../noop/OutgoingWebRequestTracerNoop.java | 20 +- .../impl/noop/RemoteCallClientTracerNoop.java | 28 +- .../impl/noop/RemoteCallServerTracerNoop.java | 24 +- .../sdk/impl/noop/WebApplicationInfoNoop.java | 2 +- .../impl/proxy/IncomingWebRequestProxy.java | 17 +- .../sdk/impl/proxy/OneAgentSDKProxy.java | 172 ++++----- .../proxy/OutgoingWebRequestTracerProxy.java | 30 +- .../sdk/impl/proxy/RemoteCallClientProxy.java | 29 +- .../sdk/impl/proxy/RemoteCallServerProxy.java | 30 +- .../impl/proxy/SDK2AgentInternalApiProxy.java | 337 ++++++++++-------- .../sdk/impl/proxy/TraceableProxy.java | 44 +-- .../impl/proxy/WebApplicationInfoImpl.java | 4 +- 34 files changed, 823 insertions(+), 738 deletions(-) diff --git a/src/main/java/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.java b/src/main/java/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.java index 8327d42..2f16894 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.java @@ -23,16 +23,16 @@ */ public class OneAgentSDKFactory { - /** - * Provides a {@link OneAgentSDK} instance, that has to be used to create - * transactions. It is safe to use returned {@link OneAgentSDK} instance in - * multiple threads. Every application should only create one single SDK - * instance during its lifetime. - * - * @return never null. if no OneAgent present, NOOP implementation gets - * returned. - */ - public static OneAgentSDK createInstance() { - return OneAgentSDKFactoryImpl.createInstance(); - } + /** + * Provides a {@link OneAgentSDK} instance, that has to be used to create + * transactions. It is safe to use returned {@link OneAgentSDK} instance in + * multiple threads. Every application should only create one single SDK + * instance during its lifetime. + * + * @return never null. if no OneAgent present, NOOP implementation gets + * returned. + */ + public static OneAgentSDK createInstance() { + return OneAgentSDKFactoryImpl.createInstance(); + } } diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/InProcessLink.java b/src/main/java/com/dynatrace/oneagent/sdk/api/InProcessLink.java index 8dc21dc..2df3d65 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/InProcessLink.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/InProcessLink.java @@ -19,6 +19,7 @@ * Represents link used for in-process-tagging. See * {@link OneAgentSDK#createInProcessLink()} and * {@link OneAgentSDK#traceInProcessLink(InProcessLink)} for more details. + * * @since 1.1 */ public interface InProcessLink { diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.java b/src/main/java/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.java index 538a10f..42a42c0 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.java @@ -19,6 +19,7 @@ * Tracer used to trace in-process-linking. See * {@link OneAgentSDK#createInProcessLink()} and * {@link OneAgentSDK#traceInProcessLink(InProcessLink)} for more details. + * * @since 1.1 */ public interface InProcessLinkTracer extends Tracer { diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.java b/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.java index ec8e604..a6e185f 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.java @@ -16,20 +16,21 @@ package com.dynatrace.oneagent.sdk.api; /** - * Represents the server side of a remote call. - * This Interface extends {@link Tracer} - it is important to respect the - * mentioned requirements when working with {@link IncomingRemoteCallTracer}. + * Represents the server side of a remote call. This Interface extends + * {@link Tracer} - it is important to respect the mentioned requirements when + * working with {@link IncomingRemoteCallTracer}. * */ public interface IncomingRemoteCallTracer extends Tracer, IncomingTaggable { - /** - * Sets the name of the used remoting protocol. - * - * @param protocolName protocol name - * @since 1.0 - */ - void setProtocolName(String protocolName); + /** + * Sets the name of the used remoting protocol. + * + * @param protocolName + * protocol name + * @since 1.0 + */ + void setProtocolName(String protocolName); } diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingTaggable.java b/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingTaggable.java index 0d53228..39dec5a 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingTaggable.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingTaggable.java @@ -21,25 +21,25 @@ */ public interface IncomingTaggable { - /** - * Consumes a tag to continue a pure path. Must be set before a node is - * being started.
    - * See {@link OutgoingTaggable} to determine how to create a tag. - * - * @param tag - * the tag in String representation - must not be null. - * @since 1.0 - */ - void setDynatraceStringTag(String tag); + /** + * Consumes a tag to continue a pure path. Must be set before a node is being + * started.
    + * See {@link OutgoingTaggable} to determine how to create a tag. + * + * @param tag + * the tag in String representation - must not be null. + * @since 1.0 + */ + void setDynatraceStringTag(String tag); - /** - * Same as {@link #setDynatraceStringTag(String)} but consumes binary - * representation of tag. - * - * @param tag - * the tag in binary representation - must not be null. - * @since 1.0 - */ - void setDynatraceByteTag(byte[] tag); + /** + * Same as {@link #setDynatraceStringTag(String)} but consumes binary + * representation of tag. + * + * @param tag + * the tag in binary representation - must not be null. + * @since 1.0 + */ + void setDynatraceByteTag(byte[] tag); } \ No newline at end of file diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingWebRequestTracer.java b/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingWebRequestTracer.java index 96f7355..9a1e445 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingWebRequestTracer.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingWebRequestTracer.java @@ -16,48 +16,61 @@ package com.dynatrace.oneagent.sdk.api; /** - * Interface for incoming webrequest tracer. - * https://github.com/Dynatrace/OneAgent-SDK#webrequests + * Interface for incoming webrequest tracer. https://github.com/Dynatrace/OneAgent-SDK#webrequests * * @since 1.3 */ public interface IncomingWebRequestTracer extends Tracer, IncomingTaggable { /** - * Validates and sets the remote IP address of the incoming web request. This information is very useful to gain information about Load balancers, Proxies and ultimately the end user that is sending the request. + * Validates and sets the remote IP address of the incoming web request. This + * information is very useful to gain information about Load balancers, Proxies + * and ultimately the end user that is sending the request. * - * @param remoteAddress remote IP address + * @param remoteAddress + * remote IP address */ void setRemoteAddress(String remoteAddress); /** - * All HTTP request headers should be provided to this method. Selective capturing will be done based on sensor configuration. + * All HTTP request headers should be provided to this method. Selective + * capturing will be done based on sensor configuration. * - * @param name HTTP request header field name - * @param value HTTP request header field value + * @param name + * HTTP request header field name + * @param value + * HTTP request header field value */ void addRequestHeader(String name, String value); /** - * All HTTP parameters should be provided to this method. Selective capturing will be done based on sensor configuration. + * All HTTP parameters should be provided to this method. Selective capturing + * will be done based on sensor configuration. * - * @param name HTTP parameter name - * @param value HTTP parameter value + * @param name + * HTTP parameter name + * @param value + * HTTP parameter value */ void addParameter(String name, String value); /** - * All HTTP response headers should be provided to this method. Selective capturing will be done based on sensor configuration. + * All HTTP response headers should be provided to this method. Selective + * capturing will be done based on sensor configuration. * - * @param name HTTP response header field name - * @param value HTTP response header field value + * @param name + * HTTP response header field name + * @param value + * HTTP response header field value */ void addResponseHeader(String name, String value); /** * Sets the HTTP response status code. * - * @param statusCode HTTP status code returned to client + * @param statusCode + * HTTP status code returned to client */ void setStatusCode(int statusCode); diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/LoggingCallback.java b/src/main/java/com/dynatrace/oneagent/sdk/api/LoggingCallback.java index 5cad2d3..4eb4071 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/LoggingCallback.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/LoggingCallback.java @@ -16,28 +16,28 @@ package com.dynatrace.oneagent.sdk.api; /** - * LoggingCallback gets called only inside a OneAgentSDK API call when - * an error/warning has occurred.
    + * LoggingCallback gets called only inside a OneAgentSDK API call when an + * error/warning has occurred.
    * Never call any SDK API inside one of these callback methods. */ public interface LoggingCallback { - /** - * Just a warning. Something is missing, but OneAgent is working normal. - * - * @param message - * message text. never null. - * @since 1.0 - */ - void warn(String message); + /** + * Just a warning. Something is missing, but OneAgent is working normal. + * + * @param message + * message text. never null. + * @since 1.0 + */ + void warn(String message); - /** - * Something that should be done can't be done. (e. g. PurePath could - * not be started) - * - * @param message - * message text. never null. - * @since 1.0 - */ - void error(String message); + /** + * Something that should be done can't be done. (e. g. PurePath could not be + * started) + * + * @param message + * message text. never null. + * @since 1.0 + */ + void error(String message); } diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/OneAgentSDK.java b/src/main/java/com/dynatrace/oneagent/sdk/api/OneAgentSDK.java index 9b91524..2a09f98 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/OneAgentSDK.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/OneAgentSDK.java @@ -24,29 +24,41 @@ * is designed according to following rules: *
      *
    • API calls never throw any exception - *
    • API calls never return null values. e. g. they returning NOOP Objects in case of any issue or required parameters are null. + *
    • API calls never return null values. e. g. they returning NOOP Objects in + * case of any issue or required parameters are null. *
    - * Single API calls might differ from that rules. Those rules are explicitly documented.
    + * Single API calls might differ from that rules. Those rules are explicitly + * documented.
    */ public interface OneAgentSDK { /** - * Using this headername to transport Dynatrace tag inside an outgoing http request ensures compatibility to Dynatrace built-in sensors. + * Using this headername to transport Dynatrace tag inside an outgoing http + * request ensures compatibility to Dynatrace built-in sensors. */ public static final String DYNATRACE_HTTP_HEADERNAME = "X-dynaTrace"; - + // ***** Web Requests (incoming) ***** - + /** - * Initializes a WebApplicationInfo instance that is required for tracing incoming web requests. This information determines the identity and name of the resulting Web Request service in dynatrace. - * Also see https://www.dynatrace.com/support/help/server-side-services/introduction/how-does-dynatrace-detect-and-name-services/#web-request-services for detail description of the meaning of the parameters. + * Initializes a WebApplicationInfo instance that is required for tracing + * incoming web requests. This information determines the identity and name of + * the resulting Web Request service in dynatrace. Also see + * https://www.dynatrace.com/support/help/server-side-services/introduction/how-does-dynatrace-detect-and-name-services/#web-request-services + * for detail description of the meaning of the parameters. * - * @param webServerName logical name of the web server. In case of a cluster every node in the cluster must report the same name here. - * Attention: Make sure not to use the host header for this parameter. Host headers are often spoofed and contain things like google or baidoo which do not reflect your setup. - * @param applicationID application ID of the web application - * @param contextRoot context root of the application. - * All URLs traced with the returned WebApplicationInfo, should start with provided context root. - * @return {@link WebApplicationInfo} instance to work with + * @param webServerName + * logical name of the web server. In case of a cluster every node in + * the cluster must report the same name here. Attention: Make sure + * not to use the host header for this parameter. Host headers are + * often spoofed and contain things like google or baidoo which do + * not reflect your setup. + * @param applicationID + * application ID of the web application + * @param contextRoot + * context root of the application. All URLs traced with the returned + * WebApplicationInfo, should start with provided context root. + * @return {@link WebApplicationInfo} instance to work with * @since 1.3 */ WebApplicationInfo createWebApplicationInfo(String webServerName, String applicationID, String contextRoot); @@ -54,11 +66,15 @@ public interface OneAgentSDK { /** * Traces an incoming web request. * - * @param webApplicationInfo information about web application - * @param url (parts of a) URL, which will be parsed into: scheme, hostname/port, path & query - * Note: the hostname will be resolved by the Agent at start() call - * @param method HTTP request method - * @return {@link IncomingWebRequestTracer} to work with + * @param webApplicationInfo + * information about web application + * @param url + * (parts of a) URL, which will be parsed into: scheme, + * hostname/port, path & query Note: the hostname will be resolved by + * the Agent at start() call + * @param method + * HTTP request method + * @return {@link IncomingWebRequestTracer} to work with * @since 1.3 */ IncomingWebRequestTracer traceIncomingWebRequest(WebApplicationInfo webApplicationInfo, String url, String method); @@ -66,117 +82,129 @@ public interface OneAgentSDK { /** * Traces an outgoing web request. * - * @param url URL, which will be parsed into: scheme, hostname/port, path & query - * Note: the hostname will be resolved by the Agent at start() call - * @param method HTTP request method - * @return {@link OutgoingWebRequestTracer} to work with + * @param url + * URL, which will be parsed into: scheme, hostname/port, path & + * query Note: the hostname will be resolved by the Agent at start() + * call + * @param method + * HTTP request method + * @return {@link OutgoingWebRequestTracer} to work with * @since 1.4 */ OutgoingWebRequestTracer traceOutgoingWebRequest(String url, String method); - // ***** Remote Calls (outgoing & incoming) ***** - - /** - * Traces an incoming remote call. - * - * @param serviceMethod - * name of the called remote method. (required) - * @param serviceName - * name of the remote service. (required) - * @param serviceEndpoint - * endpoint on the server side. (required) - * @return {@link IncomingRemoteCallTracer} instance to work with - * @since 1.0 - */ - IncomingRemoteCallTracer traceIncomingRemoteCall(String serviceMethod, String serviceName, String serviceEndpoint); - - /** - * Traces an outgoing remote call. - * - * @param serviceMethod - * name of the called remote method. (required) - * @param serviceName - * name of the remote service. (required) - * @param serviceEndpoint - * endpoint on the server side. (required) - * @param channelType - * communication protocol used by remote call. See {@link ChannelType} for - * available types. (required) - * @param channelEndpoint - * optional and depending on channelType: - *
      - *
    • for TCP/IP: host name/IP of the server-side (can include port) - *
    • for UNIX domain sockets: path of domain socket file - *
    • for named pipes: name of pipe - *
    - * @return {@link OutgoingRemoteCallTracer} instance to work with - * @since 1.0 - */ - OutgoingRemoteCallTracer traceOutgoingRemoteCall(String serviceMethod, String serviceName, String serviceEndpoint, + // ***** Remote Calls (outgoing & incoming) ***** + + /** + * Traces an incoming remote call. + * + * @param serviceMethod + * name of the called remote method. (required) + * @param serviceName + * name of the remote service. (required) + * @param serviceEndpoint + * endpoint on the server side. (required) + * @return {@link IncomingRemoteCallTracer} instance to work with + * @since 1.0 + */ + IncomingRemoteCallTracer traceIncomingRemoteCall(String serviceMethod, String serviceName, String serviceEndpoint); + + /** + * Traces an outgoing remote call. + * + * @param serviceMethod + * name of the called remote method. (required) + * @param serviceName + * name of the remote service. (required) + * @param serviceEndpoint + * endpoint on the server side. (required) + * @param channelType + * communication protocol used by remote call. See + * {@link ChannelType} for available types. (required) + * @param channelEndpoint + * optional and depending on channelType: + *
      + *
    • for TCP/IP: host name/IP of the server-side (can include port) + *
    • for UNIX domain sockets: path of domain socket file + *
    • for named pipes: name of pipe + *
    + * @return {@link OutgoingRemoteCallTracer} instance to work with + * @since 1.0 + */ + OutgoingRemoteCallTracer traceOutgoingRemoteCall(String serviceMethod, String serviceName, String serviceEndpoint, ChannelType channelType, String channelEndpoint); // ***** in-process-linking ***** /** * Creates a link for in-process-linking. - * - * @return {@link InProcessLink} instance to work with. Use it with {@link #traceInProcessLink(InProcessLink)} + * + * @return {@link InProcessLink} instance to work with. Use it with + * {@link #traceInProcessLink(InProcessLink)} * @since 1.1 */ InProcessLink createInProcessLink(); - + /** * Traces the start of in-process-linking. * - * @param inProcessLink a InProcessLink received via {@link #createInProcessLink()} - * @return {@link InProcessLinkTracer} to work with. + * @param inProcessLink + * a InProcessLink received via {@link #createInProcessLink()} + * @return {@link InProcessLinkTracer} to work with. * @since 1.1 */ InProcessLinkTracer traceInProcessLink(InProcessLink inProcessLink); // ***** Custom request attributes ***** /** - * Adds a custom request attribute to currently traced service call. Might be called multiple times, to add more than one attribute. - * Check via {@link #setLoggingCallback(LoggingCallback)} if error happened. If two attributes with same key are set, both - * attribute-values are captured. + * Adds a custom request attribute to currently traced service call. Might be + * called multiple times, to add more than one attribute. Check via + * {@link #setLoggingCallback(LoggingCallback)} if error happened. If two + * attributes with same key are set, both attribute-values are captured. * - * @param key key of the attribute. required parameter. - * @param value value of the attribute. required parameter. + * @param key + * key of the attribute. required parameter. + * @param value + * value of the attribute. required parameter. * @since 1.2 */ void addCustomRequestAttribute(String key, String value); /** - * Does exactly the same as {@link #addCustomRequestAttribute(String, String)}, but request-attribute type long. + * Does exactly the same as {@link #addCustomRequestAttribute(String, String)}, + * but request-attribute type long. + * * @since 1.2 */ void addCustomRequestAttribute(String key, long value); - + /** - * Does exactly the same as {@link #addCustomRequestAttribute(String, String)}, but request-attribute type double. + * Does exactly the same as {@link #addCustomRequestAttribute(String, String)}, + * but request-attribute type double. + * * @since 1.2 */ void addCustomRequestAttribute(String key, double value); - // ***** various ***** - - /** - * Installs a callback that gets informed, if any SDK action has failed. - * For details see {@link LoggingCallback} interface. The provided callback must - * be thread-safe, when using this {@link OneAgentSDK} instance in multi-threaded - * environments. - * - * @param loggingCallback - * may be null, to remove current callback. provided callback - * replaces any previously set callback. - * @since 1.0 - */ - void setLoggingCallback(LoggingCallback loggingCallback); - - /** - * Returns the current SDKState. See {@link SDKState} for details. - * - * @return current state - never null. - * @since 1.0 - */ - SDKState getCurrentState(); + // ***** various ***** + + /** + * Installs a callback that gets informed, if any SDK action has failed. For + * details see {@link LoggingCallback} interface. The provided callback must be + * thread-safe, when using this {@link OneAgentSDK} instance in multi-threaded + * environments. + * + * @param loggingCallback + * may be null, to remove current callback. provided callback + * replaces any previously set callback. + * @since 1.0 + */ + void setLoggingCallback(LoggingCallback loggingCallback); + + /** + * Returns the current SDKState. See {@link SDKState} for details. + * + * @return current state - never null. + * @since 1.0 + */ + SDKState getCurrentState(); } diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.java b/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.java index 2ef7207..34f0d3f 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.java @@ -16,7 +16,7 @@ package com.dynatrace.oneagent.sdk.api; /** - * Represents the client side of a remote call. + * Represents the client side of a remote call. * * This Interface extends {@link Tracer} - it is important to respect the * mentioned requirements when working with {@link OutgoingRemoteCallTracer}. @@ -24,14 +24,14 @@ */ public interface OutgoingRemoteCallTracer extends Tracer, OutgoingTaggable { - /** - * Sets the name of the used remoting protocol. Setting the protocol name is - * optional. - * - * @param protocolName - * protocol name. null value is ignored. - * @since 1.0 - */ - void setProtocolName(String protocolName); + /** + * Sets the name of the used remoting protocol. Setting the protocol name is + * optional. + * + * @param protocolName + * protocol name. null value is ignored. + * @since 1.0 + */ + void setProtocolName(String protocolName); } diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.java b/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.java index 7b015d1..850e72b 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.java @@ -21,23 +21,24 @@ */ public interface OutgoingTaggable { - /** - * Creates a Dynatrace tag and returns the String representation of it. This - * tag has to be transported with the remoting protocol to the destination.
    - * See {@link IncomingTaggable} how to continue a path with provided tag on the server side. - * - * @return the tag - never null. - * @since 1.0 - */ - String getDynatraceStringTag(); + /** + * Creates a Dynatrace tag and returns the String representation of it. This tag + * has to be transported with the remoting protocol to the destination.
    + * See {@link IncomingTaggable} how to continue a path with provided tag on the + * server side. + * + * @return the tag - never null. + * @since 1.0 + */ + String getDynatraceStringTag(); - /** - * Same as {@link #getDynatraceStringTag()}, but returning the tag as - * binary representation. - * - * @return the tag - never null. - * @since 1.0 - */ - byte[] getDynatraceByteTag(); + /** + * Same as {@link #getDynatraceStringTag()}, but returning the tag as binary + * representation. + * + * @return the tag - never null. + * @since 1.0 + */ + byte[] getDynatraceByteTag(); } \ No newline at end of file diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingWebRequestTracer.java b/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingWebRequestTracer.java index 6515a11..6842592 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingWebRequestTracer.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingWebRequestTracer.java @@ -24,26 +24,32 @@ public interface OutgoingWebRequestTracer extends Tracer, OutgoingTaggable { /** - * All HTTP request headers should be provided to this method. Selective capturing will be done based on sensor configuration. + * All HTTP request headers should be provided to this method. Selective + * capturing will be done based on sensor configuration. * - * @param name HTTP request header field name - * @param value HTTP request header field value + * @param name + * HTTP request header field name + * @param value + * HTTP request header field value */ void addRequestHeader(String name, String value); /** - * All HTTP response headers returned by the server should be provided to this method. Selective capturing will - * be done based on sensor configuration. + * All HTTP response headers returned by the server should be provided to this + * method. Selective capturing will be done based on sensor configuration. * - * @param name HTTP response header field name - * @param value HTTP response header field value + * @param name + * HTTP response header field name + * @param value + * HTTP response header field value */ void addResponseHeader(String name, String value); /** * Sets the HTTP response status code. * - * @param statusCode HTTP status code retrieved from server + * @param statusCode + * HTTP status code retrieved from server */ void setStatusCode(int statusCode); diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/Tracer.java b/src/main/java/com/dynatrace/oneagent/sdk/api/Tracer.java index 0f1e573..6b4e543 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/Tracer.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/Tracer.java @@ -21,66 +21,66 @@ */ public interface Tracer { - /** - * starts timing of a node. Every node that has been started, must be - * ended with {@link #end()} method. Consider using the following pattern: - * - *
    -     * {@code
    -     *   tracer.start();
    -     *   try {
    -     *     // do your work
    -     *   } catch (Exception e) {
    -     *     tracer.error(e);
    -     *   } finally {
    -     *     tracer.end();
    -     *   }
    -     * }
    -     * 
    - * - * {@link #start()}, {@link #end()}, {@link #error(String)}, - * {@link #error(Throwable)} are not thread-safe. They must be called from - * the same thread where {@link #start()} has been invoked. - * - * @since 1.0 - */ - void start(); + /** + * starts timing of a node. Every node that has been started, must be ended with + * {@link #end()} method. Consider using the following pattern: + * + *
    +	 * {@code
    +	 *   tracer.start();
    +	 *   try {
    +	 *     // do your work
    +	 *   } catch (Exception e) {
    +	 *     tracer.error(e);
    +	 *   } finally {
    +	 *     tracer.end();
    +	 *   }
    +	 * }
    +	 * 
    + * + * {@link #start()}, {@link #end()}, {@link #error(String)}, + * {@link #error(Throwable)} are not thread-safe. They must be called from the + * same thread where {@link #start()} has been invoked. + * + * @since 1.0 + */ + void start(); - /** - * Ends timing of a node. Typically this method is called via finally block. - *
    - * {@link #start()}, {@link #end()}, {@link #error(String)}, - * {@link #error(Throwable)} are not thread-safe. They must be called from - * the same thread where {@link #start()} has been invoked. - * - * @since 1.0 - */ - void end(); + /** + * Ends timing of a node. Typically this method is called via finally block. + *
    + * {@link #start()}, {@link #end()}, {@link #error(String)}, + * {@link #error(Throwable)} are not thread-safe. They must be called from the + * same thread where {@link #start()} has been invoked. + * + * @since 1.0 + */ + void end(); - /** - * Marks the node as 'exited by exception'. An additional error message - * can be provided as String.
    - * {@link #start()}, {@link #end()}, {@link #error(String)}, - * {@link #error(Throwable)} are not thread-safe. They must be called from - * the same thread where {@link #start()} has been invoked. - * - * @param message - * error message with details about occurred error (eg. return - * code). must not be null. - * @since 1.0 - */ - void error(String message); + /** + * Marks the node as 'exited by exception'. An additional error message can be + * provided as String.
    + * {@link #start()}, {@link #end()}, {@link #error(String)}, + * {@link #error(Throwable)} are not thread-safe. They must be called from the + * same thread where {@link #start()} has been invoked. + * + * @param message + * error message with details about occurred error (eg. return code). + * must not be null. + * @since 1.0 + */ + void error(String message); - /** - * Marks the node as 'exited by exception'.Additional information can - * be provided as Throwable.
    - * {@link #start()}, {@link #end()}, {@link #error(String)}, - * {@link #error(Throwable)} are not thread-safe. They must be called from - * the same thread where {@link #start()} has been invoked. - * - * @param throwable - * exception, that occurred. must not null. - * @since 1.0 - */ - void error(Throwable throwable); + /** + * Marks the node as 'exited by exception'.Additional information can be + * provided as Throwable.
    + * {@link #start()}, {@link #end()}, {@link #error(String)}, + * {@link #error(Throwable)} are not thread-safe. They must be called from the + * same thread where {@link #start()} has been invoked. + * + * @param throwable + * exception, that occurred. must not null. + * @since 1.0 + */ + void error(Throwable throwable); } \ No newline at end of file diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/enums/ChannelType.java b/src/main/java/com/dynatrace/oneagent/sdk/api/enums/ChannelType.java index 8d25fec..eba52b3 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/enums/ChannelType.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/enums/ChannelType.java @@ -23,16 +23,16 @@ */ public enum ChannelType { - OTHER(0), TCP_IP(1), UNIX_DOMAIN_SOCKET(2), NAMED_PIPE(3), IN_PROCESS(4); + OTHER(0), TCP_IP(1), UNIX_DOMAIN_SOCKET(2), NAMED_PIPE(3), IN_PROCESS(4); - /** constant is being used in API call to OneAgent. don't change it! */ - private final int sdkConstant; + /** constant is being used in API call to OneAgent. don't change it! */ + private final int sdkConstant; - private ChannelType(int sdkConstant) { - this.sdkConstant = sdkConstant; - } + private ChannelType(int sdkConstant) { + this.sdkConstant = sdkConstant; + } - public int getSDKConstant() { - return sdkConstant; - } + public int getSDKConstant() { + return sdkConstant; + } } diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/enums/SDKState.java b/src/main/java/com/dynatrace/oneagent/sdk/api/enums/SDKState.java index e78cd3d..303a91d 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/enums/SDKState.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/enums/SDKState.java @@ -20,26 +20,29 @@ */ public enum SDKState { - /** - * SDK is connected to OneAgent and capturing data. - * @since 1.0 - */ - ACTIVE, + /** + * SDK is connected to OneAgent and capturing data. + * + * @since 1.0 + */ + ACTIVE, - /** - * SDK is connected to OneAgent, but capturing is disabled.It is good practice - * to skip creating SDK transactions to save resources. The SDK state should - * be checked regularly as it may change at every point in time. - * @since 1.0 - */ - TEMPORARILY_INACTIVE, + /** + * SDK is connected to OneAgent, but capturing is disabled.It is good practice + * to skip creating SDK transactions to save resources. The SDK state should be + * checked regularly as it may change at every point in time. + * + * @since 1.0 + */ + TEMPORARILY_INACTIVE, - /** - * SDK isn't connected to OneAgent, so it will never capture data. This SDK - * state will never change during the lifetime of a JVM. It is good practice - * to never call any SDK API to save resources. - * @since 1.0 - */ - PERMANENTLY_INACTIVE; + /** + * SDK isn't connected to OneAgent, so it will never capture data. This SDK + * state will never change during the lifetime of a JVM. It is good practice to + * never call any SDK API to save resources. + * + * @since 1.0 + */ + PERMANENTLY_INACTIVE; } diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/infos/WebApplicationInfo.java b/src/main/java/com/dynatrace/oneagent/sdk/api/infos/WebApplicationInfo.java index 60b3c89..7019d2e 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/infos/WebApplicationInfo.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/infos/WebApplicationInfo.java @@ -18,7 +18,8 @@ import com.dynatrace.oneagent.sdk.api.OneAgentSDK; /** - * Type returned by {@link OneAgentSDK#createWebApplicationInfo(String, String, String)} + * Type returned by + * {@link OneAgentSDK#createWebApplicationInfo(String, String, String)} * * @since 1.3 * diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/OneAgentSDKFactoryImpl.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/OneAgentSDKFactoryImpl.java index 6064b32..625cb34 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/OneAgentSDKFactoryImpl.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/OneAgentSDKFactoryImpl.java @@ -25,54 +25,57 @@ */ public class OneAgentSDKFactoryImpl { - /* increase version with every change. in case of non breaking change (to OneAgent), increase oneSdkFix only. */ - static final int oneSdkMajor = 1; - static final int oneSdkMinor = 4; - static final int oneSdkFix = 0; + /* + * increase version with every change. in case of non breaking change (to + * OneAgent), increase oneSdkFix only. + */ + static final int oneSdkMajor = 1; + static final int oneSdkMinor = 4; + static final int oneSdkFix = 0; - /** the only SDK instance (one for every classLoader) */ - private static OneAgentSDK oneSDK = null; + /** the only SDK instance (one for every classLoader) */ + private static OneAgentSDK oneSDK = null; - public static boolean debugOneAgentSdkStub = false; + public static boolean debugOneAgentSdkStub = false; - private static OneAgentSDK createOneSDK() { - Object agentApiImpl = SDKInstanceProvider.create(oneSdkMajor, oneSdkMinor, oneSdkFix); - if (agentApiImpl == null) { - // OneAgent not present or not compatible - if (debugOneAgentSdkStub) { - logDebug("- no OneAgent present or OneAgent declined to work with OneAgentSdk version " + oneSdkMajor + "." - + oneSdkMinor + "." + oneSdkFix); - } - return new OneAgentSDKNoop(); - } - try { - SDK2AgentInternalApiProxy agentApi = new SDK2AgentInternalApiProxy(agentApiImpl); - Object agentSdkImpl = agentApi.oneAgentSDKFactory_createSdk(); - if (agentSdkImpl != null) { - return new OneAgentSDKProxy(agentApi, agentSdkImpl); - } - if (debugOneAgentSdkStub) { - logDebug("- OneAgent failed to provide sdk object."); - } - return new OneAgentSDKNoop(); - } catch (Throwable e) { - if (debugOneAgentSdkStub) { - logDebug("- failed to contact OneAgent: " + e.getClass().getName() + ": " + e.getMessage()); - } - return new OneAgentSDKNoop(); - } - } + private static OneAgentSDK createOneSDK() { + Object agentApiImpl = SDKInstanceProvider.create(oneSdkMajor, oneSdkMinor, oneSdkFix); + if (agentApiImpl == null) { + // OneAgent not present or not compatible + if (debugOneAgentSdkStub) { + logDebug("- no OneAgent present or OneAgent declined to work with OneAgentSdk version " + oneSdkMajor + + "." + oneSdkMinor + "." + oneSdkFix); + } + return new OneAgentSDKNoop(); + } + try { + SDK2AgentInternalApiProxy agentApi = new SDK2AgentInternalApiProxy(agentApiImpl); + Object agentSdkImpl = agentApi.oneAgentSDKFactory_createSdk(); + if (agentSdkImpl != null) { + return new OneAgentSDKProxy(agentApi, agentSdkImpl); + } + if (debugOneAgentSdkStub) { + logDebug("- OneAgent failed to provide sdk object."); + } + return new OneAgentSDKNoop(); + } catch (Throwable e) { + if (debugOneAgentSdkStub) { + logDebug("- failed to contact OneAgent: " + e.getClass().getName() + ": " + e.getMessage()); + } + return new OneAgentSDKNoop(); + } + } - public static synchronized OneAgentSDK createInstance() { - if (oneSDK == null) { - debugOneAgentSdkStub = Boolean - .parseBoolean(System.getProperty("com.dynatrace.oneagent.sdk.debug", "false")); - oneSDK = createOneSDK(); - } - return oneSDK; - } + public static synchronized OneAgentSDK createInstance() { + if (oneSDK == null) { + debugOneAgentSdkStub = Boolean + .parseBoolean(System.getProperty("com.dynatrace.oneagent.sdk.debug", "false")); + oneSDK = createOneSDK(); + } + return oneSDK; + } - public static void logDebug(String msg) { - System.out.println("[onesdk ] " + msg); - } + public static void logDebug(String msg) { + System.out.println("[onesdk ] " + msg); + } } diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/SDKInstanceProvider.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/SDKInstanceProvider.java index c5abff3..f5a3252 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/SDKInstanceProvider.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/SDKInstanceProvider.java @@ -19,8 +19,8 @@ class SDKInstanceProvider { /** - * @return SDK Object provided by OneAgent. null if no OneAgent is loaded or declines - * to work with current SDK. + * @return SDK Object provided by OneAgent. null if no OneAgent is loaded or + * declines to work with current SDK. */ static Object create(int onesdkmajor, int onesdkminor, int onesdkfix) { return null; diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/InProcessLinkNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/InProcessLinkNoop.java index a543a4a..da0c0d1 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/InProcessLinkNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/InProcessLinkNoop.java @@ -18,7 +18,7 @@ import com.dynatrace.oneagent.sdk.api.InProcessLink; public class InProcessLinkNoop implements InProcessLink { - + public final static InProcessLink INSTANCE = new InProcessLinkNoop(); - + } diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/InProcessLinkTracerNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/InProcessLinkTracerNoop.java index a375fe3..c775be8 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/InProcessLinkTracerNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/InProcessLinkTracerNoop.java @@ -20,5 +20,5 @@ public class InProcessLinkTracerNoop extends NodeNoop implements InProcessLinkTracer { public final static InProcessLinkTracer INSTANCE = new InProcessLinkTracerNoop(); - + } diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/IncomingWebRequestTracerNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/IncomingWebRequestTracerNoop.java index 834217d..18fa25e 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/IncomingWebRequestTracerNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/IncomingWebRequestTracerNoop.java @@ -20,17 +20,17 @@ public class IncomingWebRequestTracerNoop extends NodeNoop implements IncomingWebRequestTracer { public static final IncomingWebRequestTracer INSTANCE = new IncomingWebRequestTracerNoop(); - + private IncomingWebRequestTracerNoop() { } - - @Override - public void setDynatraceStringTag(String tag) { - } - @Override - public void setDynatraceByteTag(byte[] tag) { - } + @Override + public void setDynatraceStringTag(String tag) { + } + + @Override + public void setDynatraceByteTag(byte[] tag) { + } @Override public void setRemoteAddress(String remoteAddress) { diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/NodeNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/NodeNoop.java index df8b9b5..f2e63c9 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/NodeNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/NodeNoop.java @@ -19,24 +19,23 @@ class NodeNoop implements Tracer { - protected static final byte[] NO_TAG_BLOB = new byte[] {}; - protected static final String NO_TAG_STRING = ""; + protected static final byte[] NO_TAG_BLOB = new byte[] {}; + protected static final String NO_TAG_STRING = ""; + @Override + public void start() { + } - @Override - public void start() { - } + @Override + public void end() { + } - @Override - public void end() { - } + @Override + public void error(String message) { + } - @Override - public void error(String message) { - } - - @Override - public void error(Throwable throwable) { - } + @Override + public void error(Throwable throwable) { + } } diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OneAgentSDKNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OneAgentSDKNoop.java index d86dce2..06e5380 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OneAgentSDKNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OneAgentSDKNoop.java @@ -28,7 +28,8 @@ import com.dynatrace.oneagent.sdk.api.enums.ChannelType; /** - * This class provides an empty (NOOP) implementation of the {@link OneAgentSDK} interface. + * This class provides an empty (NOOP) implementation of the {@link OneAgentSDK} + * interface. * * @author Alram.Lechner * @@ -40,36 +41,36 @@ public class OneAgentSDKNoop implements OneAgentSDK { public WebApplicationInfo createWebApplicationInfo(String webServerName, String applicationID, String contextRoot) { return WebApplicationInfoNoop.INSTANCE; } - + @Override public IncomingWebRequestTracer traceIncomingWebRequest(WebApplicationInfo webApplicationInfo, String url, String method) { return IncomingWebRequestTracerNoop.INSTANCE; } - - // ***** Remote Calls (outgoing & incoming) ***** + // ***** Remote Calls (outgoing & incoming) ***** @Override - public IncomingRemoteCallTracer traceIncomingRemoteCall(String remoteMethod, String remoteService, - String clientEndpoint) { - return RemoteCallServerTracerNoop.INSTANCE; - } + public IncomingRemoteCallTracer traceIncomingRemoteCall(String remoteMethod, String remoteService, + String clientEndpoint) { + return RemoteCallServerTracerNoop.INSTANCE; + } @Override - public OutgoingRemoteCallTracer traceOutgoingRemoteCall(String remoteMethod, String remoteService, String serviceEndpoint, ChannelType channelType, String channelEndpoint) { - return RemoteCallClientTracerNoop.INSTANCE; - } + public OutgoingRemoteCallTracer traceOutgoingRemoteCall(String remoteMethod, String remoteService, + String serviceEndpoint, ChannelType channelType, String channelEndpoint) { + return RemoteCallClientTracerNoop.INSTANCE; + } - // ***** Common ***** + // ***** Common ***** @Override - public void setLoggingCallback(LoggingCallback loggingCallback) { - } + public void setLoggingCallback(LoggingCallback loggingCallback) { + } @Override - public SDKState getCurrentState() { - return SDKState.PERMANENTLY_INACTIVE; - } + public SDKState getCurrentState() { + return SDKState.PERMANENTLY_INACTIVE; + } @Override public InProcessLink createInProcessLink() { diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OutgoingWebRequestTracerNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OutgoingWebRequestTracerNoop.java index 95ca020..9841b04 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OutgoingWebRequestTracerNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OutgoingWebRequestTracerNoop.java @@ -20,16 +20,16 @@ public class OutgoingWebRequestTracerNoop extends NodeNoop implements OutgoingWebRequestTracer { public static final OutgoingWebRequestTracerNoop INSTANCE = new OutgoingWebRequestTracerNoop(); - @Override - public String getDynatraceStringTag() { - return NO_TAG_STRING; - } - - @Override - public byte[] getDynatraceByteTag() { - return NO_TAG_BLOB; - } - + @Override + public String getDynatraceStringTag() { + return NO_TAG_STRING; + } + + @Override + public byte[] getDynatraceByteTag() { + return NO_TAG_BLOB; + } + @Override public void addRequestHeader(String name, String value) { } diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/RemoteCallClientTracerNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/RemoteCallClientTracerNoop.java index d70847a..cec8d49 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/RemoteCallClientTracerNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/RemoteCallClientTracerNoop.java @@ -19,23 +19,23 @@ public class RemoteCallClientTracerNoop extends NodeNoop implements OutgoingRemoteCallTracer { - public static final OutgoingRemoteCallTracer INSTANCE = new RemoteCallClientTracerNoop(); + public static final OutgoingRemoteCallTracer INSTANCE = new RemoteCallClientTracerNoop(); - private RemoteCallClientTracerNoop() { - } + private RemoteCallClientTracerNoop() { + } - @Override - public String getDynatraceStringTag() { - return NO_TAG_STRING; - } + @Override + public String getDynatraceStringTag() { + return NO_TAG_STRING; + } - @Override - public byte[] getDynatraceByteTag() { - return NO_TAG_BLOB; - } + @Override + public byte[] getDynatraceByteTag() { + return NO_TAG_BLOB; + } - @Override - public void setProtocolName(String protocolName) { - } + @Override + public void setProtocolName(String protocolName) { + } } diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/RemoteCallServerTracerNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/RemoteCallServerTracerNoop.java index c97b2c5..fed6339 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/RemoteCallServerTracerNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/RemoteCallServerTracerNoop.java @@ -19,21 +19,21 @@ public class RemoteCallServerTracerNoop extends NodeNoop implements IncomingRemoteCallTracer { - public static final IncomingRemoteCallTracer INSTANCE = new RemoteCallServerTracerNoop(); + public static final IncomingRemoteCallTracer INSTANCE = new RemoteCallServerTracerNoop(); - private RemoteCallServerTracerNoop() { - } + private RemoteCallServerTracerNoop() { + } - @Override - public void setDynatraceStringTag(String tag) { - } + @Override + public void setDynatraceStringTag(String tag) { + } - @Override - public void setDynatraceByteTag(byte[] tag) { - } + @Override + public void setDynatraceByteTag(byte[] tag) { + } - @Override - public void setProtocolName(String protocolName) { - } + @Override + public void setProtocolName(String protocolName) { + } } diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/WebApplicationInfoNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/WebApplicationInfoNoop.java index 363ca4a..14becec 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/WebApplicationInfoNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/WebApplicationInfoNoop.java @@ -20,5 +20,5 @@ public class WebApplicationInfoNoop implements WebApplicationInfo { public static final WebApplicationInfo INSTANCE = new WebApplicationInfoNoop(); - + } diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/IncomingWebRequestProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/IncomingWebRequestProxy.java index 252c929..43f515c 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/IncomingWebRequestProxy.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/IncomingWebRequestProxy.java @@ -19,25 +19,24 @@ public class IncomingWebRequestProxy extends TraceableProxy implements IncomingWebRequestTracer { - public IncomingWebRequestProxy(SDK2AgentInternalApiProxy apiProxy, Object agentObject) { super(apiProxy, agentObject); } @Override - public void setDynatraceStringTag(String tag) { - apiProxy.incomingTaggable_setDynatraceStringTag(agentsNodeObject, tag); - } + public void setDynatraceStringTag(String tag) { + apiProxy.incomingTaggable_setDynatraceStringTag(agentsNodeObject, tag); + } - @Override - public void setDynatraceByteTag(byte[] tag) { - apiProxy.incomingTaggable_setDynatraceByteTag(agentsNodeObject, tag); - } + @Override + public void setDynatraceByteTag(byte[] tag) { + apiProxy.incomingTaggable_setDynatraceByteTag(agentsNodeObject, tag); + } @Override public void setRemoteAddress(String remoteAddress) { apiProxy.incomingWebRequestTracer_setRemoteAddress(agentsNodeObject, remoteAddress); - + } @Override diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OneAgentSDKProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OneAgentSDKProxy.java index 963d0aa..a09d528 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OneAgentSDKProxy.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OneAgentSDKProxy.java @@ -38,74 +38,77 @@ /** TODO: check if/how class could be generated */ public class OneAgentSDKProxy implements OneAgentSDK { - private final SDK2AgentInternalApiProxy apiProxy; - private final Object agentSdkImpl; - - public OneAgentSDKProxy(SDK2AgentInternalApiProxy apiProxy, Object agentSdkImpl) { - this.apiProxy = apiProxy; - this.agentSdkImpl = agentSdkImpl; - } - - @Override - public IncomingRemoteCallTracer traceIncomingRemoteCall(String remoteMethod, String remoteService, String serviceEndpoint) { - Object agentObject = apiProxy.oneAgentSDK_traceIncomingRemoteCall(agentSdkImpl, remoteMethod, remoteService, serviceEndpoint); - if (agentObject == null) { - if (OneAgentSDKFactoryImpl.debugOneAgentSdkStub) { - OneAgentSDKFactoryImpl.logDebug("- OneAgent failed to provide provide object"); - } - return RemoteCallServerTracerNoop.INSTANCE; - } - return new RemoteCallServerProxy(apiProxy, agentObject); - } - - @Override - public OutgoingRemoteCallTracer traceOutgoingRemoteCall(String remoteMethod, String remoteService, - String serverEndpoint, ChannelType channelType, String remoteHost) { - int iChannelType = -1; - if (channelType != null) { - iChannelType = channelType.getSDKConstant(); - } - Object agentObject = apiProxy.oneAgentSDK_traceOutgoingRemoteCall(agentSdkImpl, remoteMethod, remoteService, serverEndpoint, iChannelType, remoteHost); - if (agentObject == null) { - if (OneAgentSDKFactoryImpl.debugOneAgentSdkStub) { - OneAgentSDKFactoryImpl.logDebug("- OneAgent failed to provide provide object"); - } - return RemoteCallClientTracerNoop.INSTANCE; - } - return new RemoteCallClientProxy(apiProxy, agentObject); - } - - @Override - public void setLoggingCallback(LoggingCallback loggingCallback) { - apiProxy.oneAgentSDK_setLoggingCallback(agentSdkImpl, loggingCallback); - } - - @Override - public SDKState getCurrentState() { - Boolean isCapturing = apiProxy.oneAgentSDK_isCapturing(agentSdkImpl); - if (isCapturing == null) { - if (OneAgentSDKFactoryImpl.debugOneAgentSdkStub) { - OneAgentSDKFactoryImpl.logDebug("- OneAgent failed to provide provide object"); - } - return SDKState.PERMANENTLY_INACTIVE; - } - if (isCapturing.booleanValue()) { - return SDKState.ACTIVE; - } else { - return SDKState.TEMPORARILY_INACTIVE; - } - } + private final SDK2AgentInternalApiProxy apiProxy; + private final Object agentSdkImpl; + + public OneAgentSDKProxy(SDK2AgentInternalApiProxy apiProxy, Object agentSdkImpl) { + this.apiProxy = apiProxy; + this.agentSdkImpl = agentSdkImpl; + } + + @Override + public IncomingRemoteCallTracer traceIncomingRemoteCall(String remoteMethod, String remoteService, + String serviceEndpoint) { + Object agentObject = apiProxy.oneAgentSDK_traceIncomingRemoteCall(agentSdkImpl, remoteMethod, remoteService, + serviceEndpoint); + if (agentObject == null) { + if (OneAgentSDKFactoryImpl.debugOneAgentSdkStub) { + OneAgentSDKFactoryImpl.logDebug("- OneAgent failed to provide provide object"); + } + return RemoteCallServerTracerNoop.INSTANCE; + } + return new RemoteCallServerProxy(apiProxy, agentObject); + } + + @Override + public OutgoingRemoteCallTracer traceOutgoingRemoteCall(String remoteMethod, String remoteService, + String serverEndpoint, ChannelType channelType, String remoteHost) { + int iChannelType = -1; + if (channelType != null) { + iChannelType = channelType.getSDKConstant(); + } + Object agentObject = apiProxy.oneAgentSDK_traceOutgoingRemoteCall(agentSdkImpl, remoteMethod, remoteService, + serverEndpoint, iChannelType, remoteHost); + if (agentObject == null) { + if (OneAgentSDKFactoryImpl.debugOneAgentSdkStub) { + OneAgentSDKFactoryImpl.logDebug("- OneAgent failed to provide provide object"); + } + return RemoteCallClientTracerNoop.INSTANCE; + } + return new RemoteCallClientProxy(apiProxy, agentObject); + } + + @Override + public void setLoggingCallback(LoggingCallback loggingCallback) { + apiProxy.oneAgentSDK_setLoggingCallback(agentSdkImpl, loggingCallback); + } + + @Override + public SDKState getCurrentState() { + Boolean isCapturing = apiProxy.oneAgentSDK_isCapturing(agentSdkImpl); + if (isCapturing == null) { + if (OneAgentSDKFactoryImpl.debugOneAgentSdkStub) { + OneAgentSDKFactoryImpl.logDebug("- OneAgent failed to provide provide object"); + } + return SDKState.PERMANENTLY_INACTIVE; + } + if (isCapturing.booleanValue()) { + return SDKState.ACTIVE; + } else { + return SDKState.TEMPORARILY_INACTIVE; + } + } @Override public InProcessLink createInProcessLink() { - Object agentProvidedLink = apiProxy.oneAgentSDK_createInProcessLink(agentSdkImpl); - if (agentProvidedLink == null) { - if (OneAgentSDKFactoryImpl.debugOneAgentSdkStub) { - OneAgentSDKFactoryImpl.logDebug("- OneAgent failed to provide InProcessLink"); - } - return InProcessLinkNoop.INSTANCE; - } - return new InProcessLinkImpl(agentProvidedLink); + Object agentProvidedLink = apiProxy.oneAgentSDK_createInProcessLink(agentSdkImpl); + if (agentProvidedLink == null) { + if (OneAgentSDKFactoryImpl.debugOneAgentSdkStub) { + OneAgentSDKFactoryImpl.logDebug("- OneAgent failed to provide InProcessLink"); + } + return InProcessLinkNoop.INSTANCE; + } + return new InProcessLinkImpl(agentProvidedLink); } @Override @@ -114,11 +117,12 @@ public InProcessLinkTracer traceInProcessLink(InProcessLink inProcessLink) { return InProcessLinkTracerNoop.INSTANCE; } else if (!(inProcessLink instanceof InProcessLinkImpl)) { if (OneAgentSDKFactoryImpl.debugOneAgentSdkStub) { - OneAgentSDKFactoryImpl.logDebug("- invalid InProcessLink object provided: " + (inProcessLink == null ? "null" : inProcessLink.getClass().getName())); + OneAgentSDKFactoryImpl.logDebug("- invalid InProcessLink object provided: " + + (inProcessLink == null ? "null" : inProcessLink.getClass().getName())); } return InProcessLinkTracerNoop.INSTANCE; } - + Object agentObject = apiProxy.oneAgentSDK_traceInProcessLink(agentSdkImpl, (InProcessLinkImpl) inProcessLink); if (agentObject == null) { if (OneAgentSDKFactoryImpl.debugOneAgentSdkStub) { @@ -156,31 +160,33 @@ public IncomingWebRequestTracer traceIncomingWebRequest(WebApplicationInfo webAp return IncomingWebRequestTracerNoop.INSTANCE; } else if (!(webApplicationInfo instanceof WebApplicationInfoImpl)) { if (OneAgentSDKFactoryImpl.debugOneAgentSdkStub) { - OneAgentSDKFactoryImpl.logDebug("- invalid WebApplicationInfo object provided: " + (webApplicationInfo == null ? "null" : webApplicationInfo.getClass().getName())); + OneAgentSDKFactoryImpl.logDebug("- invalid WebApplicationInfo object provided: " + + (webApplicationInfo == null ? "null" : webApplicationInfo.getClass().getName())); } return IncomingWebRequestTracerNoop.INSTANCE; } - Object agentObject = apiProxy.oneAgentSDK_traceIncomingWebRequest(agentSdkImpl, (WebApplicationInfoImpl) webApplicationInfo, url, method); - if (agentObject == null) { - if (OneAgentSDKFactoryImpl.debugOneAgentSdkStub) { - OneAgentSDKFactoryImpl.logDebug("- OneAgent failed to provide provide object"); - } - return IncomingWebRequestTracerNoop.INSTANCE; - } + Object agentObject = apiProxy.oneAgentSDK_traceIncomingWebRequest(agentSdkImpl, + (WebApplicationInfoImpl) webApplicationInfo, url, method); + if (agentObject == null) { + if (OneAgentSDKFactoryImpl.debugOneAgentSdkStub) { + OneAgentSDKFactoryImpl.logDebug("- OneAgent failed to provide provide object"); + } + return IncomingWebRequestTracerNoop.INSTANCE; + } return new IncomingWebRequestProxy(apiProxy, agentObject); } @Override public OutgoingWebRequestTracer traceOutgoingWebRequest(String url, String method) { - Object agentObject = apiProxy.oneAgentSDK_traceOutgoingWebRequest(agentSdkImpl, url, method); - if (agentObject == null) { - if (OneAgentSDKFactoryImpl.debugOneAgentSdkStub) { - OneAgentSDKFactoryImpl.logDebug("- OneAgent failed to provide provide object"); - } - return OutgoingWebRequestTracerNoop.INSTANCE; - } - return new OutgoingWebRequestTracerProxy(apiProxy, agentObject); + Object agentObject = apiProxy.oneAgentSDK_traceOutgoingWebRequest(agentSdkImpl, url, method); + if (agentObject == null) { + if (OneAgentSDKFactoryImpl.debugOneAgentSdkStub) { + OneAgentSDKFactoryImpl.logDebug("- OneAgent failed to provide provide object"); + } + return OutgoingWebRequestTracerNoop.INSTANCE; + } + return new OutgoingWebRequestTracerProxy(apiProxy, agentObject); } } diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OutgoingWebRequestTracerProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OutgoingWebRequestTracerProxy.java index 05196a4..db8c2e7 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OutgoingWebRequestTracerProxy.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OutgoingWebRequestTracerProxy.java @@ -19,34 +19,34 @@ public class OutgoingWebRequestTracerProxy extends TraceableProxy implements OutgoingWebRequestTracer { - OutgoingWebRequestTracerProxy(SDK2AgentInternalApiProxy apiProxy, Object oneAgentSDK_createOutgoingWebreqeustTracer) { - super(apiProxy, oneAgentSDK_createOutgoingWebreqeustTracer); - } + OutgoingWebRequestTracerProxy(SDK2AgentInternalApiProxy apiProxy, + Object oneAgentSDK_createOutgoingWebreqeustTracer) { + super(apiProxy, oneAgentSDK_createOutgoingWebreqeustTracer); + } - @Override - public String getDynatraceStringTag() { - return apiProxy.outgoingTaggable_getDynatraceStringTag(agentsNodeObject); - } + @Override + public String getDynatraceStringTag() { + return apiProxy.outgoingTaggable_getDynatraceStringTag(agentsNodeObject); + } - @Override - public byte[] getDynatraceByteTag() { - return apiProxy.outgoingTaggable_getDynatraceByteTag(agentsNodeObject); - } + @Override + public byte[] getDynatraceByteTag() { + return apiProxy.outgoingTaggable_getDynatraceByteTag(agentsNodeObject); + } @Override public void addRequestHeader(String name, String value) { - apiProxy.webRequestTracer_addRequestHeader(agentsNodeObject, name, value); + apiProxy.webRequestTracer_addRequestHeader(agentsNodeObject, name, value); } @Override public void addResponseHeader(String name, String value) { - apiProxy.webRequestTracer_addResponseHeader(agentsNodeObject, name, value); + apiProxy.webRequestTracer_addResponseHeader(agentsNodeObject, name, value); } @Override public void setStatusCode(int statusCode) { - apiProxy.webRequestTracer_setStatusCode(agentsNodeObject, statusCode); + apiProxy.webRequestTracer_setStatusCode(agentsNodeObject, statusCode); } - } diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/RemoteCallClientProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/RemoteCallClientProxy.java index dc7d472..bd9e937 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/RemoteCallClientProxy.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/RemoteCallClientProxy.java @@ -19,22 +19,23 @@ public class RemoteCallClientProxy extends TraceableProxy implements OutgoingRemoteCallTracer { - RemoteCallClientProxy(SDK2AgentInternalApiProxy apiProxy, Object oneAgentSDK_createLocalOutgoingRemoteCall) { - super(apiProxy, oneAgentSDK_createLocalOutgoingRemoteCall); - } + RemoteCallClientProxy(SDK2AgentInternalApiProxy apiProxy, Object oneAgentSDK_createLocalOutgoingRemoteCall) { + super(apiProxy, oneAgentSDK_createLocalOutgoingRemoteCall); + } - @Override - public String getDynatraceStringTag() { - return apiProxy.outgoingTaggable_getDynatraceStringTag(agentsNodeObject); - } + @Override + public String getDynatraceStringTag() { + return apiProxy.outgoingTaggable_getDynatraceStringTag(agentsNodeObject); + } - @Override - public byte[] getDynatraceByteTag() { - return apiProxy.outgoingTaggable_getDynatraceByteTag(agentsNodeObject); } + @Override + public byte[] getDynatraceByteTag() { + return apiProxy.outgoingTaggable_getDynatraceByteTag(agentsNodeObject); + } - @Override - public void setProtocolName(String protocolName) { - apiProxy.outgoingRemoteCallTracer_setProtocolName(agentsNodeObject, protocolName); - } + @Override + public void setProtocolName(String protocolName) { + apiProxy.outgoingRemoteCallTracer_setProtocolName(agentsNodeObject, protocolName); + } } diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/RemoteCallServerProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/RemoteCallServerProxy.java index 1035c01..73c713f 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/RemoteCallServerProxy.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/RemoteCallServerProxy.java @@ -19,23 +19,23 @@ public class RemoteCallServerProxy extends TraceableProxy implements IncomingRemoteCallTracer { - RemoteCallServerProxy(SDK2AgentInternalApiProxy apiProxy, Object remoteCallObject) { - super(apiProxy, remoteCallObject); - } + RemoteCallServerProxy(SDK2AgentInternalApiProxy apiProxy, Object remoteCallObject) { + super(apiProxy, remoteCallObject); + } - @Override - public void setDynatraceStringTag(String tag) { - apiProxy.incomingTaggable_setDynatraceStringTag(agentsNodeObject, tag); - } + @Override + public void setDynatraceStringTag(String tag) { + apiProxy.incomingTaggable_setDynatraceStringTag(agentsNodeObject, tag); + } - @Override - public void setDynatraceByteTag(byte[] tag) { - apiProxy.incomingTaggable_setDynatraceByteTag(agentsNodeObject, tag); - } + @Override + public void setDynatraceByteTag(byte[] tag) { + apiProxy.incomingTaggable_setDynatraceByteTag(agentsNodeObject, tag); + } - @Override - public void setProtocolName(String protocolName) { - apiProxy.incomingRemoteCallTracer_setProtocolName(agentsNodeObject, protocolName); - } + @Override + public void setProtocolName(String protocolName) { + apiProxy.incomingRemoteCallTracer_setProtocolName(agentsNodeObject, protocolName); + } } diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/SDK2AgentInternalApiProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/SDK2AgentInternalApiProxy.java index da144b8..7e0f319 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/SDK2AgentInternalApiProxy.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/SDK2AgentInternalApiProxy.java @@ -20,103 +20,124 @@ import com.dynatrace.oneagent.sdk.impl.OneAgentSDKFactoryImpl; /** - * class forwards every API call to OneAgent impl via pre loaded reflection calls. + * class forwards every API call to OneAgent impl via pre loaded reflection + * calls. * * @author Alram.Lechner * */ public class SDK2AgentInternalApiProxy { - private Object agentImpl; - private final Method oneAgentSDKFactory_createSdk; - private final Method oneAgentSDK_traceIncomingRemoteCall; - private final Method oneAgentSDK_traceOutgoingRemoteCall; - private final Method oneAgentSDK_createInProcessLink; - private final Method oneAgentSDK_traceInProcessLink; - private final Method oneAgentSDK_setLoggingCallback; - private final Method oneAgentSDK_isCapturing; - private final Method oneAgentSDK_addCustomRequestAttribute_1; // String, String - private final Method oneAgentSDK_addCustomRequestAttribute_2; // String, long - private final Method oneAgentSDK_addCustomRequestAttribute_3; // String, double - private final Method oneAgentSDK_traceIncomingWebRequest; - private final Method oneAgentSDK_traceOutgoingWebRequest; - private final Method tracer_start; - private final Method tracer_end; - private final Method tracer_error_1; // string - private final Method tracer_error_2; // throwable - private final Method outgoingTaggable_getDynatraceStringTag; - private final Method outgoingTaggable_getDynatraceByteTag; - private final Method incomingTaggable_setDynatraceStringTag; - private final Method incomingTaggable_setDynatraceByteTag; - private final Method outgoingRemoteCallTracer_setProtocolName; - private final Method incomingRemoteCallTracer_setProtocolName; - private final Method webRequestTracer_setStatusCode; - private final Method webRequestTracer_addResponseHeader; - private final Method webRequestTracer_addRequestHeader; - private final Method incomingWebRequestTracer_setRemoteAddress; - private final Method incomingWebRequestTracer_addParameter; - - - public SDK2AgentInternalApiProxy(Object agentImpl) throws NoSuchMethodException, SecurityException { - this.agentImpl = agentImpl; - oneAgentSDKFactory_createSdk = findMethod("oneAgentSDKFactory_createSDK", new Class[]{}); - oneAgentSDK_traceIncomingRemoteCall = findMethod("oneAgentSDK_traceIncomingRemoteCall", new Class[]{Object.class, String.class, String.class, String.class}); - oneAgentSDK_traceOutgoingRemoteCall = findMethod("oneAgentSDK_traceOutgoingRemoteCall", new Class[]{Object.class, String.class, String.class, String.class,Integer.TYPE, String.class}); - oneAgentSDK_createInProcessLink = findMethod("oneAgentSDK_createInProcessLink", new Class[]{Object.class}); - oneAgentSDK_traceInProcessLink = findMethod("oneAgentSDK_traceInProcessLink", new Class[]{Object.class, Object.class}); - oneAgentSDK_setLoggingCallback = findMethod("oneAgentSDK_setLoggingCallback", new Class[] {Object.class, Object.class}); - oneAgentSDK_isCapturing = findMethod("oneAgentSDK_isCapturing", new Class[] {Object.class}); - oneAgentSDK_addCustomRequestAttribute_1 = findMethod("oneAgentSDK_addCustomRequestAttribute", new Class[] {Object.class, String.class, String.class}); - oneAgentSDK_addCustomRequestAttribute_2 = findMethod("oneAgentSDK_addCustomRequestAttribute", new Class[] {Object.class, String.class, Long.TYPE}); - oneAgentSDK_addCustomRequestAttribute_3 = findMethod("oneAgentSDK_addCustomRequestAttribute", new Class[] {Object.class, String.class, Double.TYPE}); - oneAgentSDK_traceIncomingWebRequest = findMethod("oneAgentSDK_traceIncomingWebRequest", new Class[] {Object.class, String.class, String.class, String.class, String.class, String.class}); - oneAgentSDK_traceOutgoingWebRequest = findMethod("oneAgentSDK_traceOutgoingWebRequest", new Class[] {Object.class, String.class, String.class}); - tracer_start = findMethod("tracer_start", new Class[]{Object.class}); - tracer_end = findMethod("tracer_end", new Class[]{Object.class}); - tracer_error_1 = findMethod("tracer_error", new Class[]{Object.class,String.class}); - tracer_error_2 = findMethod("tracer_error", new Class[]{Object.class,Throwable.class}); - outgoingTaggable_getDynatraceStringTag = findMethod("outgoingTaggable_getDynatraceStringTag", new Class[] {Object.class}); - outgoingTaggable_getDynatraceByteTag = findMethod("outgoingTaggable_getDynatraceByteTag", new Class[] {Object.class}); - incomingTaggable_setDynatraceStringTag = findMethod("incomingTaggable_setDynatraceStringTag", new Class[] {Object.class, String.class}); - incomingTaggable_setDynatraceByteTag = findMethod("incomingTaggable_setDynatraceByteTag", new Class[] {Object.class, byte[].class}); - outgoingRemoteCallTracer_setProtocolName = findMethod("outgoingRemoteCallTracer_setProtocolName", new Class[] {Object.class, String.class}); - incomingRemoteCallTracer_setProtocolName = findMethod("incomingRemoteCallTracer_setProtocolName", new Class[] {Object.class, String.class}); - webRequestTracer_setStatusCode = findMethod("webRequestTracer_setStatusCode", new Class[] {Object.class, Integer.TYPE}); - webRequestTracer_addResponseHeader = findMethod("webRequestTracer_addResponseHeader", new Class[] {Object.class, String.class, String.class}); - webRequestTracer_addRequestHeader = findMethod("webRequestTracer_addRequestHeader", new Class[] {Object.class, String.class, String.class}); - incomingWebRequestTracer_setRemoteAddress = findMethod("incomingWebRequestTracer_setRemoteAddress", new Class[] {Object.class, String.class}); - incomingWebRequestTracer_addParameter = findMethod("incomingWebRequestTracer_addParameter", new Class[] {Object.class, String.class, String.class}); - } - - private Method findMethod(String name, Class... args) throws NoSuchMethodException, SecurityException { - return agentImpl.getClass().getMethod(name, args); - } - - private Object invoke(Method m, Object... args) { - try { - return m.invoke(agentImpl, args); - } catch (Exception e) { - if (OneAgentSDKFactoryImpl.debugOneAgentSdkStub) { - e.printStackTrace(); - } - return null; - } - } - - public Object oneAgentSDKFactory_createSdk() { - return invoke(oneAgentSDKFactory_createSdk); - } - - Object oneAgentSDK_traceIncomingRemoteCall(Object sdk, String remoteMethod, String remoteService, String serviceEndpoint) { - return invoke(oneAgentSDK_traceIncomingRemoteCall, sdk, remoteMethod, remoteService, serviceEndpoint); - } - - Object oneAgentSDK_traceOutgoingRemoteCall(Object sdk, String remoteMethod, String remoteService, - String serverEndpoint, int channelType, String channelEndpoint) { - return invoke(oneAgentSDK_traceOutgoingRemoteCall, sdk, remoteMethod, remoteService, serverEndpoint, - channelType, channelEndpoint); - } - + private Object agentImpl; + private final Method oneAgentSDKFactory_createSdk; + private final Method oneAgentSDK_traceIncomingRemoteCall; + private final Method oneAgentSDK_traceOutgoingRemoteCall; + private final Method oneAgentSDK_createInProcessLink; + private final Method oneAgentSDK_traceInProcessLink; + private final Method oneAgentSDK_setLoggingCallback; + private final Method oneAgentSDK_isCapturing; + private final Method oneAgentSDK_addCustomRequestAttribute_1; // String, String + private final Method oneAgentSDK_addCustomRequestAttribute_2; // String, long + private final Method oneAgentSDK_addCustomRequestAttribute_3; // String, double + private final Method oneAgentSDK_traceIncomingWebRequest; + private final Method oneAgentSDK_traceOutgoingWebRequest; + private final Method tracer_start; + private final Method tracer_end; + private final Method tracer_error_1; // string + private final Method tracer_error_2; // throwable + private final Method outgoingTaggable_getDynatraceStringTag; + private final Method outgoingTaggable_getDynatraceByteTag; + private final Method incomingTaggable_setDynatraceStringTag; + private final Method incomingTaggable_setDynatraceByteTag; + private final Method outgoingRemoteCallTracer_setProtocolName; + private final Method incomingRemoteCallTracer_setProtocolName; + private final Method webRequestTracer_setStatusCode; + private final Method webRequestTracer_addResponseHeader; + private final Method webRequestTracer_addRequestHeader; + private final Method incomingWebRequestTracer_setRemoteAddress; + private final Method incomingWebRequestTracer_addParameter; + + public SDK2AgentInternalApiProxy(Object agentImpl) throws NoSuchMethodException, SecurityException { + this.agentImpl = agentImpl; + oneAgentSDKFactory_createSdk = findMethod("oneAgentSDKFactory_createSDK", new Class[] {}); + oneAgentSDK_traceIncomingRemoteCall = findMethod("oneAgentSDK_traceIncomingRemoteCall", + new Class[] { Object.class, String.class, String.class, String.class }); + oneAgentSDK_traceOutgoingRemoteCall = findMethod("oneAgentSDK_traceOutgoingRemoteCall", + new Class[] { Object.class, String.class, String.class, String.class, Integer.TYPE, String.class }); + oneAgentSDK_createInProcessLink = findMethod("oneAgentSDK_createInProcessLink", new Class[] { Object.class }); + oneAgentSDK_traceInProcessLink = findMethod("oneAgentSDK_traceInProcessLink", + new Class[] { Object.class, Object.class }); + oneAgentSDK_setLoggingCallback = findMethod("oneAgentSDK_setLoggingCallback", + new Class[] { Object.class, Object.class }); + oneAgentSDK_isCapturing = findMethod("oneAgentSDK_isCapturing", new Class[] { Object.class }); + oneAgentSDK_addCustomRequestAttribute_1 = findMethod("oneAgentSDK_addCustomRequestAttribute", + new Class[] { Object.class, String.class, String.class }); + oneAgentSDK_addCustomRequestAttribute_2 = findMethod("oneAgentSDK_addCustomRequestAttribute", + new Class[] { Object.class, String.class, Long.TYPE }); + oneAgentSDK_addCustomRequestAttribute_3 = findMethod("oneAgentSDK_addCustomRequestAttribute", + new Class[] { Object.class, String.class, Double.TYPE }); + oneAgentSDK_traceIncomingWebRequest = findMethod("oneAgentSDK_traceIncomingWebRequest", + new Class[] { Object.class, String.class, String.class, String.class, String.class, String.class }); + oneAgentSDK_traceOutgoingWebRequest = findMethod("oneAgentSDK_traceOutgoingWebRequest", + new Class[] { Object.class, String.class, String.class }); + tracer_start = findMethod("tracer_start", new Class[] { Object.class }); + tracer_end = findMethod("tracer_end", new Class[] { Object.class }); + tracer_error_1 = findMethod("tracer_error", new Class[] { Object.class, String.class }); + tracer_error_2 = findMethod("tracer_error", new Class[] { Object.class, Throwable.class }); + outgoingTaggable_getDynatraceStringTag = findMethod("outgoingTaggable_getDynatraceStringTag", + new Class[] { Object.class }); + outgoingTaggable_getDynatraceByteTag = findMethod("outgoingTaggable_getDynatraceByteTag", + new Class[] { Object.class }); + incomingTaggable_setDynatraceStringTag = findMethod("incomingTaggable_setDynatraceStringTag", + new Class[] { Object.class, String.class }); + incomingTaggable_setDynatraceByteTag = findMethod("incomingTaggable_setDynatraceByteTag", + new Class[] { Object.class, byte[].class }); + outgoingRemoteCallTracer_setProtocolName = findMethod("outgoingRemoteCallTracer_setProtocolName", + new Class[] { Object.class, String.class }); + incomingRemoteCallTracer_setProtocolName = findMethod("incomingRemoteCallTracer_setProtocolName", + new Class[] { Object.class, String.class }); + webRequestTracer_setStatusCode = findMethod("webRequestTracer_setStatusCode", + new Class[] { Object.class, Integer.TYPE }); + webRequestTracer_addResponseHeader = findMethod("webRequestTracer_addResponseHeader", + new Class[] { Object.class, String.class, String.class }); + webRequestTracer_addRequestHeader = findMethod("webRequestTracer_addRequestHeader", + new Class[] { Object.class, String.class, String.class }); + incomingWebRequestTracer_setRemoteAddress = findMethod("incomingWebRequestTracer_setRemoteAddress", + new Class[] { Object.class, String.class }); + incomingWebRequestTracer_addParameter = findMethod("incomingWebRequestTracer_addParameter", + new Class[] { Object.class, String.class, String.class }); + } + + private Method findMethod(String name, Class... args) throws NoSuchMethodException, SecurityException { + return agentImpl.getClass().getMethod(name, args); + } + + private Object invoke(Method m, Object... args) { + try { + return m.invoke(agentImpl, args); + } catch (Exception e) { + if (OneAgentSDKFactoryImpl.debugOneAgentSdkStub) { + e.printStackTrace(); + } + return null; + } + } + + public Object oneAgentSDKFactory_createSdk() { + return invoke(oneAgentSDKFactory_createSdk); + } + + Object oneAgentSDK_traceIncomingRemoteCall(Object sdk, String remoteMethod, String remoteService, + String serviceEndpoint) { + return invoke(oneAgentSDK_traceIncomingRemoteCall, sdk, remoteMethod, remoteService, serviceEndpoint); + } + + Object oneAgentSDK_traceOutgoingRemoteCall(Object sdk, String remoteMethod, String remoteService, + String serverEndpoint, int channelType, String channelEndpoint) { + return invoke(oneAgentSDK_traceOutgoingRemoteCall, sdk, remoteMethod, remoteService, serverEndpoint, + channelType, channelEndpoint); + } + Object oneAgentSDK_createInProcessLink(Object agentSdkImpl) { return invoke(oneAgentSDK_createInProcessLink, agentSdkImpl); } @@ -127,7 +148,7 @@ Object oneAgentSDK_traceInProcessLink(Object agentSdkImpl, InProcessLinkImpl inP Object oneAgentSDK_traceIncomingWebRequest(Object agentSdkImpl, WebApplicationInfoImpl webApplicationInfo, String url, String method) { - return invoke(oneAgentSDK_traceIncomingWebRequest, agentSdkImpl, webApplicationInfo.getWebServerName(), + return invoke(oneAgentSDK_traceIncomingWebRequest, agentSdkImpl, webApplicationInfo.getWebServerName(), webApplicationInfo.getApplicationID(), webApplicationInfo.getContextRoot(), url, method); } @@ -135,16 +156,16 @@ Object oneAgentSDK_traceOutgoingWebRequest(Object agentSdkImpl, String url, Stri return invoke(oneAgentSDK_traceOutgoingWebRequest, agentSdkImpl, url, method); } - void oneAgentSDK_setLoggingCallback(Object sdk, Object loggingCallback) { - invoke(oneAgentSDK_setLoggingCallback, sdk, loggingCallback); - } + void oneAgentSDK_setLoggingCallback(Object sdk, Object loggingCallback) { + invoke(oneAgentSDK_setLoggingCallback, sdk, loggingCallback); + } - Boolean oneAgentSDK_isCapturing(Object sdk) { - return (Boolean) invoke(oneAgentSDK_isCapturing, sdk); - } + Boolean oneAgentSDK_isCapturing(Object sdk) { + return (Boolean) invoke(oneAgentSDK_isCapturing, sdk); + } public void oneAgentSDK_addCustomRequestAttribute(Object agentSdkImpl, String key, String value) { - invoke(oneAgentSDK_addCustomRequestAttribute_1, agentSdkImpl, key, value); + invoke(oneAgentSDK_addCustomRequestAttribute_1, agentSdkImpl, key, value); } public void oneAgentSDK_addCustomRequestAttribute(Object agentSdkImpl, String key, long value) { @@ -155,64 +176,64 @@ public void oneAgentSDK_addCustomRequestAttribute(Object agentSdkImpl, String ke invoke(oneAgentSDK_addCustomRequestAttribute_3, agentSdkImpl, key, value); } - void tracer_start(Object node) { - invoke(tracer_start, node); - } - - void tracer_end(Object node) { - invoke(tracer_end, node); - } - - void tracer_error(Object node, String message) { - invoke(tracer_error_1, node, message); - } - - void tracer_error(Object node, Throwable error) { - invoke(tracer_error_2, node, error); - } - - String outgoingTaggable_getDynatraceStringTag(Object taggableClient) { - return (String) invoke(outgoingTaggable_getDynatraceStringTag, taggableClient); - } - - byte[] outgoingTaggable_getDynatraceByteTag(Object taggableClient) { - return (byte[]) invoke(outgoingTaggable_getDynatraceByteTag, taggableClient); - } - - void incomingTaggable_setDynatraceStringTag(Object taggableServer, String tag) { - invoke(incomingTaggable_setDynatraceStringTag, taggableServer, tag); - } - - void incomingTaggable_setDynatraceByteTag(Object taggableServer, byte[] tag) { - invoke(incomingTaggable_setDynatraceByteTag, taggableServer, tag); - } - - void outgoingRemoteCallTracer_setProtocolName(Object remoteCallClient, String protocolname) { - invoke(outgoingRemoteCallTracer_setProtocolName, remoteCallClient, protocolname); - } - - void incomingRemoteCallTracer_setProtocolName(Object remoteCallServer, String protocolname) { - invoke(incomingRemoteCallTracer_setProtocolName, remoteCallServer, protocolname); - } - - void webRequestTracer_setStatusCode(Object webRequestTracer, int statusCode) { - invoke(webRequestTracer_setStatusCode, webRequestTracer, statusCode); - } - - void webRequestTracer_addResponseHeader(Object webRequestTracer, String name, String value) { - invoke(webRequestTracer_addResponseHeader, webRequestTracer, name, value); - } - - void webRequestTracer_addRequestHeader(Object webRequestTracer, String name, String value) { - invoke(webRequestTracer_addRequestHeader, webRequestTracer, name, value); - } - - void incomingWebRequestTracer_setRemoteAddress(Object incomingWebRequestTracer, String remoteAddress) { - invoke(incomingWebRequestTracer_setRemoteAddress, incomingWebRequestTracer, remoteAddress); - } - - void incomingWebRequestTracer_addParameter(Object incomingWebRequestTracer, String name, String value) { - invoke(incomingWebRequestTracer_addParameter, incomingWebRequestTracer, name, value); - } + void tracer_start(Object node) { + invoke(tracer_start, node); + } + + void tracer_end(Object node) { + invoke(tracer_end, node); + } + + void tracer_error(Object node, String message) { + invoke(tracer_error_1, node, message); + } + + void tracer_error(Object node, Throwable error) { + invoke(tracer_error_2, node, error); + } + + String outgoingTaggable_getDynatraceStringTag(Object taggableClient) { + return (String) invoke(outgoingTaggable_getDynatraceStringTag, taggableClient); + } + + byte[] outgoingTaggable_getDynatraceByteTag(Object taggableClient) { + return (byte[]) invoke(outgoingTaggable_getDynatraceByteTag, taggableClient); + } + + void incomingTaggable_setDynatraceStringTag(Object taggableServer, String tag) { + invoke(incomingTaggable_setDynatraceStringTag, taggableServer, tag); + } + + void incomingTaggable_setDynatraceByteTag(Object taggableServer, byte[] tag) { + invoke(incomingTaggable_setDynatraceByteTag, taggableServer, tag); + } + + void outgoingRemoteCallTracer_setProtocolName(Object remoteCallClient, String protocolname) { + invoke(outgoingRemoteCallTracer_setProtocolName, remoteCallClient, protocolname); + } + + void incomingRemoteCallTracer_setProtocolName(Object remoteCallServer, String protocolname) { + invoke(incomingRemoteCallTracer_setProtocolName, remoteCallServer, protocolname); + } + + void webRequestTracer_setStatusCode(Object webRequestTracer, int statusCode) { + invoke(webRequestTracer_setStatusCode, webRequestTracer, statusCode); + } + + void webRequestTracer_addResponseHeader(Object webRequestTracer, String name, String value) { + invoke(webRequestTracer_addResponseHeader, webRequestTracer, name, value); + } + + void webRequestTracer_addRequestHeader(Object webRequestTracer, String name, String value) { + invoke(webRequestTracer_addRequestHeader, webRequestTracer, name, value); + } + + void incomingWebRequestTracer_setRemoteAddress(Object incomingWebRequestTracer, String remoteAddress) { + invoke(incomingWebRequestTracer_setRemoteAddress, incomingWebRequestTracer, remoteAddress); + } + + void incomingWebRequestTracer_addParameter(Object incomingWebRequestTracer, String name, String value) { + invoke(incomingWebRequestTracer_addParameter, incomingWebRequestTracer, name, value); + } } diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/TraceableProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/TraceableProxy.java index 96f9f8d..29a946d 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/TraceableProxy.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/TraceableProxy.java @@ -19,35 +19,35 @@ abstract class TraceableProxy implements Tracer { - protected final SDK2AgentInternalApiProxy apiProxy; - protected final Object agentsNodeObject; + protected final SDK2AgentInternalApiProxy apiProxy; + protected final Object agentsNodeObject; - TraceableProxy(SDK2AgentInternalApiProxy apiProxy, Object agentsNodeObject) { - this.apiProxy = apiProxy; - this.agentsNodeObject = agentsNodeObject; - } + TraceableProxy(SDK2AgentInternalApiProxy apiProxy, Object agentsNodeObject) { + this.apiProxy = apiProxy; + this.agentsNodeObject = agentsNodeObject; + } - @Override - public void start() { - apiProxy.tracer_start(agentsNodeObject); + @Override + public void start() { + apiProxy.tracer_start(agentsNodeObject); - } + } - @Override - public void end() { - apiProxy.tracer_end(agentsNodeObject); + @Override + public void end() { + apiProxy.tracer_end(agentsNodeObject); - } + } - @Override - public void error(String message) { - apiProxy.tracer_error(agentsNodeObject, message); + @Override + public void error(String message) { + apiProxy.tracer_error(agentsNodeObject, message); - } + } - @Override - public void error(Throwable throwable) { - apiProxy.tracer_error(agentsNodeObject, throwable); - } + @Override + public void error(Throwable throwable) { + apiProxy.tracer_error(agentsNodeObject, throwable); + } } diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/WebApplicationInfoImpl.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/WebApplicationInfoImpl.java index 6eb8c9b..9cf2a96 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/WebApplicationInfoImpl.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/WebApplicationInfoImpl.java @@ -18,7 +18,7 @@ import com.dynatrace.oneagent.sdk.api.infos.WebApplicationInfo; class WebApplicationInfoImpl implements WebApplicationInfo { - + private final String webServerName; private final String applicationID; private final String contextRoot; @@ -40,5 +40,5 @@ String getApplicationID() { String getContextRoot() { return contextRoot; } - + } From cc73d3322657d19fc930456375262cef769f8062 Mon Sep 17 00:00:00 2001 From: Alram Lechner Date: Wed, 18 Jul 2018 08:58:57 +0200 Subject: [PATCH 15/36] typo --- README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index eb67884..e9693c2 100644 --- a/README.md +++ b/README.md @@ -222,11 +222,11 @@ When no service call is being traced, the custom request attributes are dropped. -## Trace web requests +### Trace web requests -### Trace incoming web requests +#### Trace incoming web requests You can use the SDK to trace incoming web requests. This might be useful if Dynatrace does not support the respective web server framework or language processing the incoming web requests. @@ -236,7 +236,7 @@ To trace an incoming web request you first need to create a WebServerInfo object WebServerInfo wsInfo = OneAgentSDK.createWebServerInfo("WebShopProduction", "CheckoutService", "/api/service/checkout"); ``` -To trace a specific incoming web request you then need to create a Tracer object. Make sure you provide all http headers from the request to the SDK by calling addRequestHeader(...). This ensures that tagging with our built-in sensor is working. +To trace a specific incoming web request you then need to create a Tracer object. Make sure you provide all http headers from the request to the SDK by calling addRequestHeader(...). This ensures that tagging with our built-in sensor will work. ```Java IncomingWebRequestTracer tracer = OneAgentSDK.traceIncomingWebRequest(wsInfo,"https://www.oursupershop.com/api/service/checkout/save","POST") @@ -258,7 +258,7 @@ try { int statusCodeReturnedToClient = processWebRequest(); tracer.setStatusCode(statusCodeReturnedToClient); } catch (Exception e) { - tracer.setStatusCode(500); // we expect, the container sends http 500 in case request processing throws an exception + tracer.setStatusCode(500); // we expect that the container sends HTTP 500 status code in case request processing throws an exception tracer.error(e); throw e; } finally { @@ -268,11 +268,11 @@ try { -### Trace outgoing web requests +#### Trace outgoing web requests -You can use the SDK to trace outgoing web requests. This might be useful if Dynatrace does not support the respective http library or language. +You can use the SDK to trace outgoing web requests. This might be useful if Dynatrace does not support the respective http library or language sending the request. -To trace a outgoing web request you need to create a Tracer object. It is important to send the Dynatrace Header. This ensures that tagging with our built-in sensor is working. +To trace an outgoing web request you need to create a Tracer object. It is important to send the Dynatrace Header. This ensures that tagging with our built-in sensor will work. ```Java OutgoingWebRequestTracer outgoingWebRequestTracer = oneAgentSdk.traceOutgoingWebRequest(url, "GET"); From ec2f1acf1077744eacb80ad081002089b2768276 Mon Sep 17 00:00:00 2001 From: Armin Ruech Date: Tue, 23 Oct 2018 10:31:24 +0200 Subject: [PATCH 16/36] Fix LICENSE file (#10) --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index 8dada3e..9060297 100644 --- a/LICENSE +++ b/LICENSE @@ -186,7 +186,7 @@ same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright {yyyy} {name of copyright owner} + Copyright 2018 Dynatrace LLC Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. From a554cd971179faf8e598dd93df342a603d39e734 Mon Sep 17 00:00:00 2001 From: Alram Lechner Date: Thu, 21 Feb 2019 16:32:25 +0100 Subject: [PATCH 17/36] Add messaging (#11) make v1.6.0 public available. --- .gitignore | 1 + README.md | 828 ++++++++++-------- docs/allclasses-frame.html | 18 +- docs/allclasses-noframe.html | 18 +- .../oneagent/sdk/OneAgentSDKFactory.html | 12 +- .../oneagent/sdk/api/InProcessLink.html | 8 +- .../oneagent/sdk/api/InProcessLinkTracer.html | 8 +- .../sdk/api/IncomingMessageProcessTracer.html | 263 ++++++ .../sdk/api/IncomingMessageReceiveTracer.html | 197 +++++ .../sdk/api/IncomingRemoteCallTracer.html | 18 +- .../oneagent/sdk/api/IncomingTaggable.html | 14 +- .../sdk/api/IncomingWebRequestTracer.html | 25 +- .../dynatrace/oneagent/sdk/api/Joinable.html | 247 ++++++ .../oneagent/sdk/api/LoggingCallback.html | 16 +- .../oneagent/sdk/api/OneAgentSDK.html | 218 ++++- .../sdk/api/OutgoingMessageTracer.html | 263 ++++++ .../sdk/api/OutgoingRemoteCallTracer.html | 14 +- .../oneagent/sdk/api/OutgoingTaggable.html | 25 +- .../sdk/api/OutgoingWebRequestTracer.html | 18 +- .../dynatrace/oneagent/sdk/api/Tracer.html | 46 +- .../oneagent/sdk/api/enums/ChannelType.html | 12 +- .../sdk/api/enums/MessageDestinationType.html | 348 ++++++++ .../sdk/api/enums/MessageSystemVendor.html | 462 ++++++++++ .../oneagent/sdk/api/enums/SDKState.html | 26 +- .../oneagent/sdk/api/enums/package-frame.html | 10 +- .../sdk/api/enums/package-summary.html | 16 +- .../oneagent/sdk/api/enums/package-tree.html | 10 +- .../sdk/api/infos/MessagingSystemInfo.html | 174 ++++ .../sdk/api/infos/WebApplicationInfo.html | 15 +- .../oneagent/sdk/api/infos/package-frame.html | 8 +- .../sdk/api/infos/package-summary.html | 15 +- .../oneagent/sdk/api/infos/package-tree.html | 10 +- .../oneagent/sdk/api/package-frame.html | 12 +- .../oneagent/sdk/api/package-summary.html | 24 +- .../oneagent/sdk/api/package-tree.html | 16 +- .../dynatrace/oneagent/sdk/package-frame.html | 6 +- .../oneagent/sdk/package-summary.html | 8 +- .../dynatrace/oneagent/sdk/package-tree.html | 8 +- docs/constant-values.html | 14 +- docs/deprecated-list.html | 8 +- docs/help-doc.html | 8 +- docs/index-all.html | 103 ++- docs/index.html | 4 +- docs/overview-frame.html | 6 +- docs/overview-summary.html | 10 +- docs/overview-tree.html | 20 +- samples/README.md | 9 +- samples/messaging/pom.xml | 84 ++ .../samples/messaging/FakedQueueManager.java | 59 ++ .../sdk/samples/messaging/Message.java | 37 + .../samples/messaging/MessageListener.java | 7 + .../sdk/samples/messaging/MessagingApp.java | 153 ++++ .../messaging/StdErrLoggingCallback.java | 37 + .../sdk/api/IncomingMessageProcessTracer.java | 40 + .../sdk/api/IncomingMessageReceiveTracer.java | 26 + .../oneagent/sdk/api/OneAgentSDK.java | 58 +- .../sdk/api/OutgoingMessageTracer.java | 40 + .../sdk/api/enums/MessageDestinationType.java | 40 + .../sdk/api/enums/MessageSystemVendor.java | 50 ++ .../sdk/api/infos/MessagingSystemInfo.java | 27 + .../sdk/impl/OneAgentSDKFactoryImpl.java | 2 +- .../IncomingMessageProcessTracerNoop.java | 44 + .../IncomingMessageReceiveTracerNoop.java | 27 + .../impl/noop/MessagingSystemInfoNoop.java | 28 + .../sdk/impl/noop/OneAgentSDKNoop.java | 28 +- .../impl/noop/OutgoingMessageTracerNoop.java | 62 ++ .../IncomingMessageProcessTracerProxy.java | 45 + .../IncomingMessageReceiveTracerProxy.java | 26 + .../impl/proxy/MessagingSystemInfoImpl.java | 57 ++ .../sdk/impl/proxy/OneAgentSDKProxy.java | 81 +- .../proxy/OutgoingMessageTracerProxy.java | 46 + .../impl/proxy/SDK2AgentInternalApiProxy.java | 41 + 72 files changed, 4140 insertions(+), 624 deletions(-) create mode 100644 docs/com/dynatrace/oneagent/sdk/api/IncomingMessageProcessTracer.html create mode 100644 docs/com/dynatrace/oneagent/sdk/api/IncomingMessageReceiveTracer.html create mode 100644 docs/com/dynatrace/oneagent/sdk/api/Joinable.html create mode 100644 docs/com/dynatrace/oneagent/sdk/api/OutgoingMessageTracer.html create mode 100644 docs/com/dynatrace/oneagent/sdk/api/enums/MessageDestinationType.html create mode 100644 docs/com/dynatrace/oneagent/sdk/api/enums/MessageSystemVendor.html create mode 100644 docs/com/dynatrace/oneagent/sdk/api/infos/MessagingSystemInfo.html create mode 100644 samples/messaging/pom.xml create mode 100644 samples/messaging/src/main/java/com/dynatrace/oneagent/sdk/samples/messaging/FakedQueueManager.java create mode 100644 samples/messaging/src/main/java/com/dynatrace/oneagent/sdk/samples/messaging/Message.java create mode 100644 samples/messaging/src/main/java/com/dynatrace/oneagent/sdk/samples/messaging/MessageListener.java create mode 100644 samples/messaging/src/main/java/com/dynatrace/oneagent/sdk/samples/messaging/MessagingApp.java create mode 100644 samples/messaging/src/main/java/com/dynatrace/oneagent/sdk/samples/messaging/StdErrLoggingCallback.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/api/IncomingMessageProcessTracer.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/api/IncomingMessageReceiveTracer.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingMessageTracer.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/api/enums/MessageDestinationType.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/api/enums/MessageSystemVendor.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/api/infos/MessagingSystemInfo.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/impl/noop/IncomingMessageProcessTracerNoop.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/impl/noop/IncomingMessageReceiveTracerNoop.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/impl/noop/MessagingSystemInfoNoop.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OutgoingMessageTracerNoop.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/IncomingMessageProcessTracerProxy.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/IncomingMessageReceiveTracerProxy.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/MessagingSystemInfoImpl.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OutgoingMessageTracerProxy.java diff --git a/.gitignore b/.gitignore index f9a50e1..f69f244 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ .project .settings .classpath +target diff --git a/README.md b/README.md index e9693c2..8ef62dd 100644 --- a/README.md +++ b/README.md @@ -1,350 +1,478 @@ -**Disclaimer: This SDK is currently in beta and still work in progress.** - -# Dynatrace OneAgent SDK for Java - -This SDK allows Dynatrace customers to instrument java applications. This is useful to enhance the visibility for proprietary frameworks or custom frameworks not directly supported by Dynatrace OneAgent out-of-the-box. - -This is the official Java implementation of the [Dynatrace OneAgent SDK](https://github.com/Dynatrace/OneAgent-SDK). - -#### Table of Contents - -* [Package contents](#package) -* [Requirements](#requirements) -* [Integration](#integration) - * [Dependencies](#dependencies) - * [Troubleshooting](#troubleshooting) -* [API Concepts](#apiconcepts) - * [OneAgentSDK object](#oneagentsdkobject) - * [Tracers](#tracers) -* [Features](#features) - * [Trace incoming and outgoing remote calls](#remoting) - * [In process linking](#inprocess) - * [Add custom request attributes](#scav) - * [Trace web requests](#webrequests) - * [Trace incoming web requests](#inwebrequests) - * [Trace outgoing web requests](#outwebrequests) -* [Further reading](#furtherreading) -* [Help & Support](#help) -* [Release notes](#releasenotes) - - - -## Package contents - -- `samples`: contains sample application, which demonstrates the usage of the SDK. see readme inside the samples directory for more details -- `docs`: contains the reference documentation (javadoc). The most recent version is also available online at [https://dynatrace.github.io/OneAgent-SDK-for-Java/](https://dynatrace.github.io/OneAgent-SDK-for-Java/). -- `LICENSE`: license under which the whole SDK and sample applications are published - - - -## Requirements - -- JRE 1.6 or higher -- Dynatrace OneAgent (required versions see below) - -|OneAgent SDK for Java|Required OneAgent version| -|:--------------------|:------------------------| -|1.4.0 |>=1.151 | -|1.3.0 |>=1.149 | -|1.2.0 |>=1.147 | -|1.1.0 |>=1.143 | -|1.0.3 |>=1.135 | - - - -## Integration - - - -### Dependencies -If you want to integrate the OneAgent SDK into your application, just add the following maven dependency: - - - com.dynatrace.oneagent.sdk.java - oneagent-sdk - 1.4.0 - compile - - -If you prefer to integrate the SDK using plain jar file, just download them from mavenCentral. You can find the download links for each version in the [Release notes](#releasenotes) section. - -The Dynatrace OneAgent SDK for Java has no further dependencies. - - - -### Troubleshooting -If the SDK can't connect to the OneAgent (see usage of SDKState in samples) or you you don't see the desired result in the Dynatrace UI, you can set the following system property to print debug information to standard out: - - -Dcom.dynatrace.oneagent.sdk.debug=true - -Additionally you should/have to ensure, that you have set a `LoggingCallback`. For usage see class `StdErrLoggingCallback` in `remotecall-server` module (in samples/remotecall folder). - - - -## API Concepts - -Common concepts of the Dynatrace OneAgent SDK are explained the [Dynatrace OneAgent SDK repository](https://github.com/Dynatrace/OneAgent-SDK#apiconcepts). - - - -### OneAgentSDK object - -Use OneAgentSDKFactory.createInstance() to obtain an OneAgentSDK instance. You should reuse this object over the whole application -and if possible JVM lifetime: - -```Java -OneAgentSDK oneAgentSdk = OneAgentSDKFactory.createInstance(); -switch (oneAgentSdk.getCurrentState()) { -case ACTIVE: - break; -case PERMANENTLY_INACTIVE: - break; -case TEMPORARILY_INACTIVE: - break; -default: - break; -} -``` - -It is good practice to check the SDK state regularly as it may change at every point of time (except PERMANENTLY_INACTIVE never changes over JVM lifetime). - - - -### Tracers - -To trace any kind of call you first need to create a Tracer. The Tracer object represents the logical and physical endpoint that you want to call. A Tracer serves two purposes. First to time the call (duraction, cpu and more) and report errors. That is why each Tracer has these three methods. The error method must be called only once, and it must be in between start and end. - -```Java -void start(); - -void error(String message); - -void end(); -``` -The second purpose of a Tracer is to allow tracing across process boundaries. To achieve that these kind of traces supply so called tags. Tags are strings or byte arrays that enable Dynatrace to trace a transaction end to end. As such the tag is the one information that you need to transport across these calls yourselfs. - - - -## Features - -The feature sets differ slightly with each language implementation. More functionality will be added over time, see Planned features for OneAgent SDK for details on upcoming features. - -A more detailed specification of the features can be found in [Dynatrace OneAgent SDK](https://github.com/Dynatrace/OneAgent-SDK#features). - -|Feature |Required OneAgent SDK for Java version| -|:-----------------------------------------|:-------------------------------------| -|Outgoing webrequests |>=1.4.0 | -|Incoming webrequests |>=1.3.0 | -|Custom request attributes |>=1.2.0 | -|In process linking |>=1.1.0 | -|Trace incoming and outgoing remote calls |>=1.0.3 | - - - -### Trace incoming and outgoing remote calls - -You can use the SDK to trace proprietary IPC communication from one process to the other. This will enable you to see full Service Flow, PurePath and Smartscape topology for remoting technologies that Dynatrace is not aware of. - -To trace any kind of remote call you first need to create a Tracer. The Tracer object represents the endpoint that you want to call, as such you need to supply the name of the remote service and remote method. In addition you need to transport the tag in your remote call to the server side if you want to trace it end to end. - -```Java -OutgoingRemoteCallTracer outgoingRemoteCall = OneAgentSDK.traceOutgoingRemoteCall("remoteMethodToCall", "RemoteServiceName", "rmi://Endpoint/service", ChannelType.TCP_IP, "remoteHost:1234"); -outgoingRemoteCall.setProtocolName("RMI/custom"); -outgoingRemoteCall.start(); -try { - String tag = outgoingRemoteCall.getDynatraceStringTag(); - // make the call and transport the tag across to server -} catch (Throwable e) { - outgoingRemoteCall.error(e); -} finally { - outgoingRemoteCall.end(); -} -``` - -On the server side you need to wrap the handling and processing of your remote call as well. This will not only trace the server side call and everything that happens, it will also connect it to the calling side. - -```Java -OneAgentSDK oneAgentSdk = OneAgentSDKFactory.createInstance(); -IncomingRemoteCallTracer incomingRemoteCall = oneAgentSdk.traceIncomingRemoteCall("remoteMethodToCall", "RemoteServiceName", "rmi://Endpoint/service"); -incomingRemoteCall.setDynatraceStringTag(tag); -incomingRemoteCall.start(); -try { - incomingRemoteCall.setProtocolName("RMI/custom"); - doSomeWork(); // process the remoteCall -} catch (Exception e) { - incomingRemoteCall.error(e); - // rethrow or add your exception handling -} finally{ - incomingRemoteCall.end(); -} -``` - - - -### In process linking - -You can use the SDK to link inside a single process. To link for eg. an asynchronous execution, you need the following code: -```Java -OneAgentSDK oneAgentSdk = OneAgentSDKFactory.createInstance(); -InProcessLink inProcessLink = sdk.createInProcessLink(); -``` - -Provide the returned inProcessLink to the code, that does the asynchronous execution: - -```Java -OneAgentSDK sdk = OneAgentSDKFactory.createInstance(); -InProcessLinkTracer inProcessLinkTracer = sdk.traceInProcessLink(inProcessLink); -inProcessLinkTracer.start(); -try { - // do the work ... -} catch (Exception e) { - inProcessLinkTracer.error(e); - // rethrow or add your exception handling -} finally { - inProcessLinkTracer.end(); -} -``` - - - -### Add custom request attributes - -You can use the SDK to add custom request attributes to the current traced service. Custom request attributes allow you to do advanced filtering of your requests in Dynatrace. - -Adding custom request attributes to the currently traced service call is simple. Just call one of the addCustomRequestAttribute methods with your key and value: - -```Java -oneAgentSDK.addCustomRequestAttribute("region", "EMEA"); -oneAgentSDK.addCustomRequestAttribute("salesAmount", 2500); -``` - -When no service call is being traced, the custom request attributes are dropped. - - - -### Trace web requests - - - -#### Trace incoming web requests - -You can use the SDK to trace incoming web requests. This might be useful if Dynatrace does not support the respective web server framework or language processing the incoming web requests. - -To trace an incoming web request you first need to create a WebServerInfo object. The info object represents the endpoint of your web server (web server name, application name and context root). This object should be reused for all traced web requests within for the same application. - -```Java -WebServerInfo wsInfo = OneAgentSDK.createWebServerInfo("WebShopProduction", "CheckoutService", "/api/service/checkout"); -``` - -To trace a specific incoming web request you then need to create a Tracer object. Make sure you provide all http headers from the request to the SDK by calling addRequestHeader(...). This ensures that tagging with our built-in sensor will work. - -```Java -IncomingWebRequestTracer tracer = OneAgentSDK.traceIncomingWebRequest(wsInfo,"https://www.oursupershop.com/api/service/checkout/save","POST") - -for (Entry headerField : httpRequest.getHeaders().entrySet()) { - incomingWebrequestTracer.addRequestHeader(headerField.getKey(), headerField.getValue()); -} - -for (Entry> parameterEntry : httpRequest.getParameters().entrySet()) { - for (String value : parameterEntry.getValue()) { - incomingWebrequestTracer.addParameter(parameterEntry.getKey(), value); - } -} - -incomingWebrequestTracer.setRemoteAddress(httpRequest.getRemoteHostName()); - -tracer.start(); -try { - int statusCodeReturnedToClient = processWebRequest(); - tracer.setStatusCode(statusCodeReturnedToClient); -} catch (Exception e) { - tracer.setStatusCode(500); // we expect that the container sends HTTP 500 status code in case request processing throws an exception - tracer.error(e); - throw e; -} finally { - tracer.end(); -} -``` - - - -#### Trace outgoing web requests - -You can use the SDK to trace outgoing web requests. This might be useful if Dynatrace does not support the respective http library or language sending the request. - -To trace an outgoing web request you need to create a Tracer object. It is important to send the Dynatrace Header. This ensures that tagging with our built-in sensor will work. - -```Java -OutgoingWebRequestTracer outgoingWebRequestTracer = oneAgentSdk.traceOutgoingWebRequest(url, "GET"); -outgoingWebRequestTracer.start(); -try { - yourHttpClient.setUrl(url); - - // sending HTTP header OneAgentSDK.DYNATRACE_HTTP_HEADERNAME is necessary for tagging: - yourHttpClient.addRequestHeader(OneAgentSDK.DYNATRACE_HTTP_HEADERNAME, outgoingWebRequestTracer.getDynatraceStringTag()); - - // provide all request headers to outgoingWebRequestTracer (optional): - for (Entry entry : yourHttpClient.getRequestHeaders().entrySet()) { - outgoingWebRequestTracer.addRequestHeader(entry.getKey(), entry.getValue()); - } - - yourHttpClient.processHttpRequest(); - - for (Entry> entry : yourHttpClient.getHeaderFields().entrySet()) { - for (String value : entry.getValue()) { - outgoingWebRequestTracer.addResponseHeader(entry.getKey(), value); - } - } - outgoingWebRequestTracer.setStatusCode(yourHttpClient.getResponseCode()); - -} catch (Exception e) { - outgoingWebRequestTracer.error(e); -} finally { - outgoingWebRequestTracer.end(); -} -``` - - - -## Further readings - -* What is the OneAgent SDK? in the Dynatrace documentation -* Feedback & Roadmap thread in AnswerHub -* Blog: Dynatrace OneAgent SDK for Java: End-to-end monitoring for proprietary Java frameworks - - - -## Help & Support - -The Dynatrace OneAgent SDK for Java is an open source project, currently in beta status. The features are fully supported by Dynatrace. - -**Get Help** -* Ask a question in the product forums -* Read the product documentation - -**Open a GitHub issue to:** -* Report minor defects, minor items or typos -* Ask for improvements or changes in the SDK API -* Ask any questions related to the community effort - -SLAs don't apply for GitHub tickets - -**Customers can open a ticket on the Dynatrace support portal to:** -* Get support from the Dynatrace technical support engineering team -* Manage and resolve product related technical issues - -SLAs apply according to the customer's support level. - - - -## Release notes - -see also https://github.com/Dynatrace/OneAgent-SDK-for-Java/releases - -|Version|Description |Links | -|:------|:--------------------------------------|:----------------------------------------| -|1.4.0 |Added support for outgoing webrequests |[binary](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.4.0/oneagent-sdk-1.4.0.jar) [source](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.4.0/oneagent-sdk-1.4.0-sources.jar) [javadoc](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.4.0/oneagent-sdk-1.4.0-javadoc.jar)| -|1.3.0 |Added support for incoming webrequests |[binary](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.3.0/oneagent-sdk-1.3.0.jar) [source](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.3.0/oneagent-sdk-1.3.0-sources.jar) [javadoc](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.3.0/oneagent-sdk-1.3.0-javadoc.jar)| -|1.2.0 |Added support for in-process-linking |[binary](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.2.0/oneagent-sdk-1.2.0.jar) [source](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.2.0/oneagent-sdk-1.2.0-sources.jar) [javadoc](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.2.0/oneagent-sdk-1.2.0-javadoc.jar)| -|1.1.0 |Added support for in-process-linking |[binary](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.1.0/oneagent-sdk-1.1.0.jar) [source](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.1.0/oneagent-sdk-1.1.0-sources.jar) [javadoc](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.1.0/oneagent-sdk-1.1.0-javadoc.jar)| -|1.0.3 |Initial release |[binary](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.0.3/oneagent-sdk-1.0.3.jar) [source](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.0.3/oneagent-sdk-1.0.3-sources.jar) [javadoc](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.0.3/oneagent-sdk-1.0.3-javadoc.jar)| +**Disclaimer: This SDK is currently in beta and still work in progress.** + +# Dynatrace OneAgent SDK for Java + +This SDK allows Dynatrace customers to instrument java applications. This is useful to enhance the visibility for proprietary frameworks or +custom frameworks not directly supported by Dynatrace OneAgent out-of-the-box. + +This is the official Java implementation of the [Dynatrace OneAgent SDK](https://github.com/Dynatrace/OneAgent-SDK). + +#### Table of Contents + +* [Package contents](#package) +* [Requirements](#requirements) +* [Integration](#integration) + * [Dependencies](#dependencies) + * [Troubleshooting](#troubleshooting) +* [API Concepts](#apiconcepts) + * [OneAgentSDK object](#oneagentsdkobject) + * [Tracers](#tracers) +* [Features](#features) + * [Trace incoming and outgoing remote calls](#remoting) + * [In process linking](#inprocess) + * [Add custom request attributes](#scav) + * [Trace web requests](#webrequests) + * [Trace incoming web requests](#inwebrequests) + * [Trace outgoing web requests](#outwebrequests) + * [Trace messaging](#messaging) +* [Further reading](#furtherreading) +* [Help & Support](#help) +* [Release notes](#releasenotes) + + + +## Package contents + +- `samples`: contains sample application, which demonstrates the usage of the SDK. see readme inside the samples directory for more details +- `docs`: contains the reference documentation (javadoc). The most recent version is also available online at [https://dynatrace.github.io/OneAgent-SDK-for-Java/](https://dynatrace.github.io/OneAgent-SDK-for-Java/). +- `LICENSE`: license under which the whole SDK and sample applications are published + + + +## Requirements + +- JRE 1.6 or higher +- Dynatrace OneAgent (required versions see below) + +|OneAgent SDK for Java|Required OneAgent version| +|:--------------------|:------------------------| +|1.6.0 |>=1.161 | +|1.4.0 |>=1.151 | +|1.3.0 |>=1.149 | +|1.2.0 |>=1.147 | +|1.1.0 |>=1.143 | +|1.0.3 |>=1.135 | + + + +## Integration + + + +### Dependencies +If you want to integrate the OneAgent SDK into your application, just add the following maven dependency: + + + com.dynatrace.oneagent.sdk.java + oneagent-sdk + 1.6.0 + compile + + +If you prefer to integrate the SDK using plain jar file, just download them from mavenCentral. You can find the download links for each +version in the [Release notes](#releasenotes) section. + +The Dynatrace OneAgent SDK for Java has no further dependencies. + + + +### Troubleshooting +If the SDK can't connect to the OneAgent (see usage of SDKState in samples) or you you don't see the desired result in the Dynatrace UI, +you can set the following system property to print debug information to standard out: + + -Dcom.dynatrace.oneagent.sdk.debug=true + +Additionally you should/have to ensure, that you have set a `LoggingCallback`. For usage see class `StdErrLoggingCallback` in +`remotecall-server` module (in samples/remotecall folder). + + + +## API Concepts + +Common concepts of the Dynatrace OneAgent SDK are explained the [Dynatrace OneAgent SDK repository](https://github.com/Dynatrace/OneAgent-SDK#apiconcepts). + + + +### OneAgentSDK object + +Use OneAgentSDKFactory.createInstance() to obtain an OneAgentSDK instance. You should reuse this object over the whole application +and if possible JVM lifetime: + +```Java +OneAgentSDK oneAgentSdk = OneAgentSDKFactory.createInstance(); +switch (oneAgentSdk.getCurrentState()) { +case ACTIVE: + break; +case PERMANENTLY_INACTIVE: + break; +case TEMPORARILY_INACTIVE: + break; +default: + break; +} +``` + +It is good practice to check the SDK state regularly as it may change at every point of time (except PERMANENTLY_INACTIVE never +changes over JVM lifetime). + + + +### Tracers + +To trace any kind of call you first need to create a Tracer. The Tracer object represents the logical and physical endpoint that +you want to call. A Tracer serves two purposes. First to time the call (duraction, cpu and more) and report errors. That is why +each Tracer has these three methods. The error method must be called only once, and it must be in between start and end. + +```Java +void start(); + +void error(String message); + +void end(); +``` +The second purpose of a Tracer is to allow tracing across process boundaries. To achieve that these kind of traces supply so called +tags. Tags are strings or byte arrays that enable Dynatrace to trace a transaction end to end. As such the tag is the one information +that you need to transport across these calls yourselfs. + + + +## Features + +The feature sets differ slightly with each language implementation. More functionality will be added over time, see Planned features for OneAgent SDK +for details on upcoming features. + +A more detailed specification of the features can be found in [Dynatrace OneAgent SDK](https://github.com/Dynatrace/OneAgent-SDK#features). + +|Feature |Required OneAgent SDK for Java version| +|:----------------------------------------------|:-------------------------------------| +|Trace messaging |>=1.6.0 | +|Outgoing webrequests |>=1.4.0 | +|Incoming webrequests |>=1.3.0 | +|Custom request attributes |>=1.2.0 | +|In process linking |>=1.1.0 | +|Trace incoming and outgoing remote calls |>=1.0.3 | + + + +### Trace incoming and outgoing remote calls + +You can use the SDK to trace proprietary IPC communication from one process to the other. This will enable you to see full Service Flow, PurePath +and Smartscape topology for remoting technologies that Dynatrace is not aware of. + +To trace any kind of remote call you first need to create a Tracer. The Tracer object represents the endpoint that you want to call, as such you +need to supply the name of the remote service and remote method. In addition you need to transport the tag in your remote call to the server side +if you want to trace it end to end. + +```Java +OneAgentSDK oneAgentSdk = OneAgentSDKFactory.createInstance(); +OutgoingRemoteCallTracer outgoingRemoteCall = oneAgentSdk.traceOutgoingRemoteCall("remoteMethodToCall", "RemoteServiceName", "rmi://Endpoint/service", ChannelType.TCP_IP, "remoteHost:1234"); +outgoingRemoteCall.setProtocolName("RMI/custom"); +outgoingRemoteCall.start(); +try { + String tag = outgoingRemoteCall.getDynatraceStringTag(); + // make the call and transport the tag across to server +} catch (Throwable e) { + outgoingRemoteCall.error(e); + // rethrow or add your exception handling +} finally { + outgoingRemoteCall.end(); +} +``` + +On the server side you need to wrap the handling and processing of your remote call as well. This will not only trace the server side call and +everything that happens, it will also connect it to the calling side. + +```Java +OneAgentSDK oneAgentSdk = OneAgentSDKFactory.createInstance(); +IncomingRemoteCallTracer incomingRemoteCall = oneAgentSdk.traceIncomingRemoteCall("remoteMethodToCall", "RemoteServiceName", "rmi://Endpoint/service"); +incomingRemoteCall.setDynatraceStringTag(tag); +incomingRemoteCall.start(); +try { + incomingRemoteCall.setProtocolName("RMI/custom"); + doSomeWork(); // process the remoteCall +} catch (Exception e) { + incomingRemoteCall.error(e); + // rethrow or add your exception handling +} finally{ + incomingRemoteCall.end(); +} +``` + + + +### In process linking + +You can use the SDK to link inside a single process. To link for eg. an asynchronous execution, you need the following code: +```Java +OneAgentSDK oneAgentSdk = OneAgentSDKFactory.createInstance(); +InProcessLink inProcessLink = oneAgentSdk.createInProcessLink(); +``` + +Provide the returned ``inProcessLink`` to the code, that does the asynchronous execution: + +```Java +OneAgentSDK oneAgentSdk = OneAgentSDKFactory.createInstance(); +InProcessLinkTracer inProcessLinkTracer = oneAgentSdk.traceInProcessLink(inProcessLink); +inProcessLinkTracer.start(); +try { + // do the work ... +} catch (Exception e) { + inProcessLinkTracer.error(e); + // rethrow or add your exception handling +} finally { + inProcessLinkTracer.end(); +} +``` + + + +### Add custom request attributes + +You can use the SDK to add custom request attributes to the current traced service. Custom request attributes allow you to do advanced filtering of +your requests in Dynatrace. + +Adding custom request attributes to the currently traced service call is simple. Just call one of the addCustomRequestAttribute methods with your key and value: + +```Java +oneAgentSDK.addCustomRequestAttribute("region", "EMEA"); +oneAgentSDK.addCustomRequestAttribute("salesAmount", 2500); +``` + +When no service call is being traced, the custom request attributes are dropped. + + + +### Trace web requests + + + +#### Trace incoming web requests + +You can use the SDK to trace incoming web requests. This might be useful if Dynatrace does not support the respective web server framework or language +processing the incoming web requests. + +To trace an incoming web request you first need to create a WebServerInfo object. The info object represents the endpoint of your web server (web server +name, application name and context root). This object should be reused for all traced web requests within for the same application. + +```Java +WebServerInfo wsInfo = oneAgentSdk.createWebServerInfo("WebShopProduction", "CheckoutService", "/api/service/checkout"); +``` + +To trace a specific incoming web request you then need to create a Tracer object. Make sure you provide all http headers from the request to the SDK by +calling addRequestHeader(...). This ensures that tagging with our built-in sensor will work. + +```Java +IncomingWebRequestTracer tracer = oneAgentSdk.traceIncomingWebRequest(wsInfo,"https://www.oursupershop.com/api/service/checkout/save","POST") + +for (Entry headerField : httpRequest.getHeaders().entrySet()) { + incomingWebrequestTracer.addRequestHeader(headerField.getKey(), headerField.getValue()); +} + +for (Entry> parameterEntry : httpRequest.getParameters().entrySet()) { + for (String value : parameterEntry.getValue()) { + incomingWebrequestTracer.addParameter(parameterEntry.getKey(), value); + } +} + +incomingWebrequestTracer.setRemoteAddress(httpRequest.getRemoteHostName()); + +tracer.start(); +try { + int statusCodeReturnedToClient = processWebRequest(); + tracer.setStatusCode(statusCodeReturnedToClient); +} catch (Exception e) { + tracer.setStatusCode(500); // we expect that the container sends HTTP 500 status code in case request processing throws an exception + tracer.error(e); + throw e; +} finally { + tracer.end(); +} +``` + + + +#### Trace outgoing web requests + +You can use the SDK to trace outgoing web requests. This might be useful if Dynatrace does not support the respective http library or +language sending the request. + +To trace an outgoing web request you need to create a Tracer object. It is important to send the Dynatrace Header. This ensures that +tagging with our built-in sensor will work. + +```Java +OutgoingWebRequestTracer outgoingWebRequestTracer = oneAgentSdk.traceOutgoingWebRequest(url, "GET"); + +// provide all request headers to outgoingWebRequestTracer (optional): +for (Entry entry : yourHttpClient.getRequestHeaders().entrySet()) { + outgoingWebRequestTracer.addRequestHeader(entry.getKey(), entry.getValue()); +} + +outgoingWebRequestTracer.start(); +try { + yourHttpClient.setUrl(url); + + // sending HTTP header OneAgentSDK.DYNATRACE_HTTP_HEADERNAME is necessary for tagging: + yourHttpClient.addRequestHeader(OneAgentSDK.DYNATRACE_HTTP_HEADERNAME, outgoingWebRequestTracer.getDynatraceStringTag()); + + yourHttpClient.processHttpRequest(); + + for (Entry> entry : yourHttpClient.getHeaderFields().entrySet()) { + for (String value : entry.getValue()) { + outgoingWebRequestTracer.addResponseHeader(entry.getKey(), value); + } + } + outgoingWebRequestTracer.setStatusCode(yourHttpClient.getResponseCode()); + +} catch (Exception e) { + outgoingWebRequestTracer.error(e); + // rethrow or add your exception handling +} finally { + outgoingWebRequestTracer.end(); +} +``` + + +### Trace messaging + +You can use the SDK to trace messages sent or received via messaging & queuing systems. When tracing messages, we distinguish between: + +* sending a message +* receiving a message +* processing a received message + +To trace an outgoing message, you simply need to create a MessagingSystemInfo and call traceOutgoingMessage with that instance: + +```Java +MessagingSystemInfo messagingSystemInfo = oneAgentSDK.createMessagingSystemInfo("myMessagingSystem", + "requestQueue", MessageDestinationType.QUEUE, ChannelType.TCP_IP, "localhost:4711"); +OutgoingMessageTracer outgoingMessageTracer = oneAgentSDK.traceOutgoingMessage(messagingSystemInfo); +outgoingMessageTracer.start(); +try { + // transport the dynatrace tag along with the message: + messageToSend.setHeaderField( + OneAgentSDK.DYNATRACE_MESSAGE_PROPERTYNAME, outgoingMessageTracer.getDynatraceStringTag()); + // optional: add application provided correlationId + outgoingMessageTracer.setCorrelationId(toSend.correlationId); + + theQueue.send(messageToSend); + + // optional: add messageid provided from messaging system + outgoingMessageTracer.setVendorMessageId(toSend.getMessageId()); +} catch (Exception e) { + outgoingMessageTracer.error(e.getMessage()); + // rethrow or add your exception handling +} finally { + outgoingMessageTracer.end(); +} +``` + +On the incoming side, we need to differentiate between the blocking receiving part and processing the received message. Therefore two +different tracers are being used: `IncomingMessageReceiveTracer` and `IncomingMessageProcessTracer`. + +```Java +MessagingSystemInfo messagingSystemInfo = oneAgentSDK.createMessagingSystemInfo("myMessagingSystem", + "requestQueue", MessageDestinationType.QUEUE, ChannelType.TCP_IP, "localhost:4711"); + +// message receiving daemon task: +while(true) { + IncomingMessageReceiveTracer incomingMessageReceiveTracer = + oneAgentSDK.traceIncomingMessageReceive(messagingSystemInfo); + incomingMessageReceiveTracer.start(); + try { + // blocking call - until message is being available: + Message queryMessage = theQueue.receive("client queries"); + IncomingMessageProcessTracer incomingMessageProcessTracer = oneAgentSDK + .traceIncomingMessageProcess(messagingSystemInfo); + incomingMessageProcessTracer.setDynatraceStringTag( + queryMessage.getHeaderField(OneAgentSDK.DYNATRACE_MESSAGE_PROPERTYNAME)); + incomingMessageProcessTracer.setVendorMessageId(queryMessage.msgId); + incomingMessageProcessTracer.setCorrelationId(queryMessage.correlationId); + incomingMessageProcessTracer.start(); + try { + // do the work ... + } catch (Exception e) { + incomingMessageProcessTracer.error(e.getMessage()); + Logger.logError(e); + } finally { + incomingMessageProcessTracer.end(); + } + } catch (Exception e) { + incomingMessageReceiveTracer.error(e.getMessage()); + // rethrow or add your exception handling + } finally { + incomingMessageReceiveTracer.end(); + } +} +``` + +In case of non-blocking receive (e. g. via eventhandler), there is no need to use `IncomingMessageReceiveTracer` - just trace processing +of the message by using the `IncomingMessageProcessTracer`: + +```Java +MessagingSystemInfo messagingSystemInfo = oneAgentSDK.createMessagingSystemInfo("myMessagingSystem", + "requestQueue", MessageDestinationType.QUEUE, ChannelType.TCP_IP, "localhost:4711"); + +public void onMessage(Message message) { + IncomingMessageProcessTracer incomingMessageProcessTracer = oneAgentSDK + .traceIncomingMessageProcess(messagingSystemInfo); + incomingMessageProcessTracer.setDynatraceStringTag((String) + message.getObjectProperty(OneAgentSDK.DYNATRACE_MESSAGE_PROPERTYNAME)); + incomingMessageProcessTracer.setVendorMessageId(queryMessage.msgId); + incomingMessageProcessTracer.setCorrelationId(queryMessage.correlationId); + incomingMessageProcessTracer.start(); + try { + // do the work ... + } catch (Exception e) { + incomingMessageProcessTracer.error(e.getMessage()); + // rethrow or add your exception handling + } finally { + incomingMessageProcessTracer.end(); + } +} +``` + + + +## Further readings + +* What is the OneAgent SDK? in the Dynatrace documentation +* Feedback & Roadmap thread in AnswerHub +* Blog: Dynatrace OneAgent SDK for Java: End-to-end monitoring for proprietary Java frameworks + + + +## Help & Support + +The Dynatrace OneAgent SDK for Java is an open source project, currently in beta status. The features are fully supported by Dynatrace. + +**Get Help** +* Ask a question in the product forums +* Read the product documentation + +**Open a GitHub issue to:** +* Report minor defects, minor items or typos +* Ask for improvements or changes in the SDK API +* Ask any questions related to the community effort + +SLAs don't apply for GitHub tickets + +**Customers can open a ticket on the Dynatrace support portal to:** +* Get support from the Dynatrace technical support engineering team +* Manage and resolve product related technical issues + +SLAs apply according to the customer's support level. + + + +## Release notes + +see also https://github.com/Dynatrace/OneAgent-SDK-for-Java/releases + +|Version|Description |Links | +|:------|:-------------------------------------------|:----------------------------------------| +|1.6.0 |Added support for messaging |[binary](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.6.0/oneagent-sdk-1.6.0.jar) [source](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.6.0/oneagent-sdk-1.6.0-sources.jar) [javadoc](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.6.0/oneagent-sdk-1.6.0-javadoc.jar)| +|1.4.0 |Added support for outgoing webrequests |[binary](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.4.0/oneagent-sdk-1.4.0.jar) [source](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.4.0/oneagent-sdk-1.4.0-sources.jar) [javadoc](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.4.0/oneagent-sdk-1.4.0-javadoc.jar)| +|1.3.0 |Added support for incoming webrequests |[binary](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.3.0/oneagent-sdk-1.3.0.jar) [source](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.3.0/oneagent-sdk-1.3.0-sources.jar) [javadoc](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.3.0/oneagent-sdk-1.3.0-javadoc.jar)| +|1.2.0 |Added support for custom request attributes |[binary](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.2.0/oneagent-sdk-1.2.0.jar) [source](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.2.0/oneagent-sdk-1.2.0-sources.jar) [javadoc](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.2.0/oneagent-sdk-1.2.0-javadoc.jar)| +|1.1.0 |Added support for in-process-linking |[binary](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.1.0/oneagent-sdk-1.1.0.jar) [source](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.1.0/oneagent-sdk-1.1.0-sources.jar) [javadoc](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.1.0/oneagent-sdk-1.1.0-javadoc.jar)| +|1.0.3 |Initial release |[binary](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.0.3/oneagent-sdk-1.0.3.jar) [source](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.0.3/oneagent-sdk-1.0.3-sources.jar) [javadoc](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.0.3/oneagent-sdk-1.0.3-javadoc.jar)| diff --git a/docs/allclasses-frame.html b/docs/allclasses-frame.html index 16ce9bc..bac2412 100644 --- a/docs/allclasses-frame.html +++ b/docs/allclasses-frame.html @@ -2,12 +2,12 @@ - + -All Classes (sdk 1.4.0 API) +All Classes (sdk 1.5.0 API) - + @@ -23,6 +23,10 @@ ChannelType
    +IncomingMessageProcessTracer +
    +IncomingMessageReceiveTracer +
    IncomingRemoteCallTracer
    IncomingTaggable @@ -35,10 +39,18 @@
    LoggingCallback
    +MessageDestinationType +
    +MessageSystemVendor +
    +MessagingSystemInfo +
    OneAgentSDK
    OneAgentSDKFactory
    +OutgoingMessageTracer +
    OutgoingRemoteCallTracer
    OutgoingTaggable diff --git a/docs/allclasses-noframe.html b/docs/allclasses-noframe.html index 823e43b..a7b8523 100644 --- a/docs/allclasses-noframe.html +++ b/docs/allclasses-noframe.html @@ -2,12 +2,12 @@ - + -All Classes (sdk 1.4.0 API) +All Classes (sdk 1.5.0 API) - + @@ -23,6 +23,10 @@ ChannelType
    +IncomingMessageProcessTracer +
    +IncomingMessageReceiveTracer +
    IncomingRemoteCallTracer
    IncomingTaggable @@ -35,10 +39,18 @@
    LoggingCallback
    +MessageDestinationType +
    +MessageSystemVendor +
    +MessagingSystemInfo +
    OneAgentSDK
    OneAgentSDKFactory
    +OutgoingMessageTracer +
    OutgoingRemoteCallTracer
    OutgoingTaggable diff --git a/docs/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.html b/docs/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.html index 54e4f40..aa3faab 100644 --- a/docs/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.html +++ b/docs/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.html @@ -2,12 +2,12 @@ - + -OneAgentSDKFactory (sdk 1.4.0 API) +OneAgentSDKFactory (sdk 1.5.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="OneAgentSDKFactory (sdk 1.4.0 API)"; + parent.document.title="OneAgentSDKFactory (sdk 1.5.0 API)"; } } @@ -187,8 +187,8 @@

    public static OneAgentSDK createInstance()

  • Provides a OneAgentSDK instance, that has to be used to create - transactions. It is safe to use returned OneAgentSDK instance in - multiple threads. Every application should only create one single SDK + transactions. It is safe to use returned OneAgentSDK instance in + multiple threads. Every application should only create one single SDK instance during its lifetime.

    diff --git a/docs/com/dynatrace/oneagent/sdk/api/InProcessLink.html b/docs/com/dynatrace/oneagent/sdk/api/InProcessLink.html index dc1ea90..1b286ed 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/InProcessLink.html +++ b/docs/com/dynatrace/oneagent/sdk/api/InProcessLink.html @@ -2,12 +2,12 @@ - + -InProcessLink (sdk 1.4.0 API) +InProcessLink (sdk 1.5.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="InProcessLink (sdk 1.4.0 API)"; + parent.document.title="InProcessLink (sdk 1.5.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.html b/docs/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.html index 76c2133..4c3fc76 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.html +++ b/docs/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.html @@ -2,12 +2,12 @@ - + -InProcessLinkTracer (sdk 1.4.0 API) +InProcessLinkTracer (sdk 1.5.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="InProcessLinkTracer (sdk 1.4.0 API)"; + parent.document.title="InProcessLinkTracer (sdk 1.5.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/IncomingMessageProcessTracer.html b/docs/com/dynatrace/oneagent/sdk/api/IncomingMessageProcessTracer.html new file mode 100644 index 0000000..3bef0da --- /dev/null +++ b/docs/com/dynatrace/oneagent/sdk/api/IncomingMessageProcessTracer.html @@ -0,0 +1,263 @@ + + + + + + +IncomingMessageProcessTracer (sdk 1.5.0 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +com.dynatrace.oneagent.sdk.api +
    +Interface IncomingMessageProcessTracer

    +
    +
    All Superinterfaces:
    IncomingTaggable, Tracer
    +
    +
    +
    +
    public interface IncomingMessageProcessTracer
    extends IncomingTaggable, Tracer
    + + +

    +Interface for processing message tracer. + https://github.com/Dynatrace/OneAgent-SDK#messaging +

    + +

    +

    +
    Since:
    +
    1.5
    +
    +
    + +

    + + + + + + + + + + + + + + + + +
    +Method Summary
    + voidsetCorrelationId(java.lang.String correlationId) + +
    +          Adds optional information about a traced message: correlation id used by messaging system.
    + voidsetVendorMessageId(java.lang.String vendorMessageId) + +
    +          Adds optional information about a traced message: message id provided by messaging system.
    + + + + + + + +
    Methods inherited from interface com.dynatrace.oneagent.sdk.api.IncomingTaggable
    setDynatraceByteTag, setDynatraceStringTag
    + + + + + + + +
    Methods inherited from interface com.dynatrace.oneagent.sdk.api.Tracer
    end, error, error, start
    +  +

    + + + + + + + + +
    +Method Detail
    + +

    +setVendorMessageId

    +
    +void setVendorMessageId(java.lang.String vendorMessageId)
    +
    +
    Adds optional information about a traced message: message id provided by messaging system. +

    +

    +
    +
    +
    +
    Parameters:
    vendorMessageId - the messageId
    +
    +
    +
    + +

    +setCorrelationId

    +
    +void setCorrelationId(java.lang.String correlationId)
    +
    +
    Adds optional information about a traced message: correlation id used by messaging system. +

    +

    +
    +
    +
    +
    Parameters:
    correlationId - correlationId
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + + + diff --git a/docs/com/dynatrace/oneagent/sdk/api/IncomingMessageReceiveTracer.html b/docs/com/dynatrace/oneagent/sdk/api/IncomingMessageReceiveTracer.html new file mode 100644 index 0000000..455b39b --- /dev/null +++ b/docs/com/dynatrace/oneagent/sdk/api/IncomingMessageReceiveTracer.html @@ -0,0 +1,197 @@ + + + + + + +IncomingMessageReceiveTracer (sdk 1.5.0 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +com.dynatrace.oneagent.sdk.api +
    +Interface IncomingMessageReceiveTracer

    +
    +
    All Superinterfaces:
    Tracer
    +
    +
    +
    +
    public interface IncomingMessageReceiveTracer
    extends Tracer
    + + +

    +Interface for receiving message tracer. + https://github.com/Dynatrace/OneAgent-SDK#messaging +

    + +

    +

    +
    Since:
    +
    1.5
    +
    +
    + +

    + + + + + + + + +
    +Method Summary
    + + + + + + + +
    Methods inherited from interface com.dynatrace.oneagent.sdk.api.Tracer
    end, error, error, start
    +  +

    + +


    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + + + diff --git a/docs/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.html b/docs/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.html index cd0edb0..85f0a00 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.html +++ b/docs/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.html @@ -2,12 +2,12 @@ - + -IncomingRemoteCallTracer (sdk 1.4.0 API) +IncomingRemoteCallTracer (sdk 1.5.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="IncomingRemoteCallTracer (sdk 1.4.0 API)"; + parent.document.title="IncomingRemoteCallTracer (sdk 1.5.0 API)"; } } @@ -54,7 +54,7 @@ - PREV CLASS  + PREV CLASS   NEXT CLASS FRAMES   @@ -99,9 +99,9 @@

    -Represents the server side of a remote call. - This Interface extends Tracer - it is important to respect the - mentioned requirements when working with IncomingRemoteCallTracer. +Represents the server side of a remote call. This Interface extends + Tracer - it is important to respect the mentioned requirements when + working with IncomingRemoteCallTracer.

    @@ -203,7 +203,7 @@

    - PREV CLASS  + PREV CLASS   NEXT CLASS FRAMES   diff --git a/docs/com/dynatrace/oneagent/sdk/api/IncomingTaggable.html b/docs/com/dynatrace/oneagent/sdk/api/IncomingTaggable.html index f099b9f..a07fcfd 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/IncomingTaggable.html +++ b/docs/com/dynatrace/oneagent/sdk/api/IncomingTaggable.html @@ -2,12 +2,12 @@ - + -IncomingTaggable (sdk 1.4.0 API) +IncomingTaggable (sdk 1.5.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="IncomingTaggable (sdk 1.4.0 API)"; + parent.document.title="IncomingTaggable (sdk 1.5.0 API)"; } } @@ -91,7 +91,7 @@


    Interface IncomingTaggable

    -
    All Known Subinterfaces:
    IncomingRemoteCallTracer, IncomingWebRequestTracer
    +
    All Known Subinterfaces:
    IncomingMessageProcessTracer, IncomingRemoteCallTracer, IncomingWebRequestTracer

    @@ -152,8 +152,8 @@

     void setDynatraceStringTag(java.lang.String tag)
    -
    Consumes a tag to continue a pure path. Must be set before a node is - being started.
    +
    Consumes a tag to continue a pure path. Must be set before a node is being + started.
    See OutgoingTaggable to determine how to create a tag.

    diff --git a/docs/com/dynatrace/oneagent/sdk/api/IncomingWebRequestTracer.html b/docs/com/dynatrace/oneagent/sdk/api/IncomingWebRequestTracer.html index 8ed6814..e9ac10e 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/IncomingWebRequestTracer.html +++ b/docs/com/dynatrace/oneagent/sdk/api/IncomingWebRequestTracer.html @@ -2,12 +2,12 @@ - + -IncomingWebRequestTracer (sdk 1.4.0 API) +IncomingWebRequestTracer (sdk 1.5.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="IncomingWebRequestTracer (sdk 1.4.0 API)"; + parent.document.title="IncomingWebRequestTracer (sdk 1.5.0 API)"; } } @@ -99,8 +99,8 @@

    -Interface for incoming webrequest tracer. - https://github.com/Dynatrace/OneAgent-SDK#webrequests +Interface for incoming webrequest tracer. https://github.com/Dynatrace/OneAgent-SDK#webrequests

    @@ -200,7 +200,9 @@

     void setRemoteAddress(java.lang.String remoteAddress)
    -
    Validates and sets the remote IP address of the incoming web request. This information is very useful to gain information about Load balancers, Proxies and ultimately the end user that is sending the request. +
    Validates and sets the remote IP address of the incoming web request. This + information is very useful to gain information about Load balancers, Proxies + and ultimately the end user that is sending the request.

    @@ -217,7 +219,8 @@

    void addRequestHeader(java.lang.String name, java.lang.String value)
    -
    All HTTP request headers should be provided to this method. Selective capturing will be done based on sensor configuration. +
    All HTTP request headers should be provided to this method. Selective + capturing will be done based on sensor configuration.

    @@ -234,7 +237,8 @@

    void addParameter(java.lang.String name, java.lang.String value)
    -
    All HTTP parameters should be provided to this method. Selective capturing will be done based on sensor configuration. +
    All HTTP parameters should be provided to this method. Selective capturing + will be done based on sensor configuration.

    @@ -251,7 +255,8 @@

    void addResponseHeader(java.lang.String name, java.lang.String value)
    -
    All HTTP response headers should be provided to this method. Selective capturing will be done based on sensor configuration. +
    All HTTP response headers should be provided to this method. Selective + capturing will be done based on sensor configuration.

    diff --git a/docs/com/dynatrace/oneagent/sdk/api/Joinable.html b/docs/com/dynatrace/oneagent/sdk/api/Joinable.html new file mode 100644 index 0000000..e4fe618 --- /dev/null +++ b/docs/com/dynatrace/oneagent/sdk/api/Joinable.html @@ -0,0 +1,247 @@ + + + + + + +Joinable (sdk 1.5.0 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +com.dynatrace.oneagent.sdk.api +
    +Interface Joinable

    +
    +
    All Known Subinterfaces:
    IncomingMessageReceiveTracer
    +
    +
    +
    +
    public interface Joinable
    + + +

    +Common interface for Tracers able to allow incoming tags after they have been started. Not to be + directly used by SDK user. +

    + +

    +

    +
    Since:
    +
    1.5
    +
    +
    + +

    + + + + + + + + + + + + + + + + +
    +Method Summary
    + voidaddJoiningDynatraceByteTag(byte[] tag) + +
    +          Same as addJoiningDynatraceStringTag(String), but tag is provided in binary + format.
    + voidaddJoiningDynatraceStringTag(java.lang.String tag) + +
    +          Adds a joining tag from another trace using the string format.
    +  +

    + + + + + + + + +
    +Method Detail
    + +

    +addJoiningDynatraceStringTag

    +
    +void addJoiningDynatraceStringTag(java.lang.String tag)
    +
    +
    Adds a joining tag from another trace using the string format. + + An application can call this function to add a joining tag when this tracer + has already been started. + +

    + This function can only be used after the tracer was started. +

    +

    +
    Parameters:
    tag - if null or an empty string, call will be ignored.
    +
    +
    +
    + +

    +addJoiningDynatraceByteTag

    +
    +void addJoiningDynatraceByteTag(byte[] tag)
    +
    +
    Same as addJoiningDynatraceStringTag(String), but tag is provided in binary + format. +

    +

    +
    Parameters:
    tag - if null or an empty array, call will be ignored.
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + + + diff --git a/docs/com/dynatrace/oneagent/sdk/api/LoggingCallback.html b/docs/com/dynatrace/oneagent/sdk/api/LoggingCallback.html index 5c44d86..e3a9be5 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/LoggingCallback.html +++ b/docs/com/dynatrace/oneagent/sdk/api/LoggingCallback.html @@ -2,12 +2,12 @@ - + -LoggingCallback (sdk 1.4.0 API) +LoggingCallback (sdk 1.5.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="LoggingCallback (sdk 1.4.0 API)"; + parent.document.title="LoggingCallback (sdk 1.5.0 API)"; } } @@ -96,8 +96,8 @@

    -LoggingCallback gets called only inside a OneAgentSDK API call when - an error/warning has occurred.
    +LoggingCallback gets called only inside a OneAgentSDK API call when an + error/warning has occurred.
    Never call any SDK API inside one of these callback methods.

    @@ -164,8 +164,8 @@

     void error(java.lang.String message)
    -
    Something that should be done can't be done. (e. g. PurePath could - not be started) +
    Something that should be done can't be done. (e. g. PurePath could not be + started)

    Parameters:
    message - message text. never null.
    Since:
    diff --git a/docs/com/dynatrace/oneagent/sdk/api/OneAgentSDK.html b/docs/com/dynatrace/oneagent/sdk/api/OneAgentSDK.html index 0c01b3a..dcd0d86 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/OneAgentSDK.html +++ b/docs/com/dynatrace/oneagent/sdk/api/OneAgentSDK.html @@ -2,12 +2,12 @@ - + -OneAgentSDK (sdk 1.4.0 API) +OneAgentSDK (sdk 1.5.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="OneAgentSDK (sdk 1.4.0 API)"; + parent.document.title="OneAgentSDK (sdk 1.5.0 API)"; } } @@ -55,7 +55,7 @@  PREV CLASS  - NEXT CLASSNEXT CLASS FRAMES    NO FRAMES   @@ -100,9 +100,11 @@

    is designed according to following rules:
    • API calls never throw any exception -
    • API calls never return null values. e. g. they returning NOOP Objects in case of any issue or required parameters are null. +
    • API calls never return null values. e. g. they returning NOOP Objects in + case of any issue or required parameters are null.
    - Single API calls might differ from that rules. Those rules are explicitly documented.
    + Single API calls might differ from that rules. Those rules are explicitly + documented.

    @@ -123,7 +125,16 @@

    DYNATRACE_HTTP_HEADERNAME
    -          Using this headername to transport Dynatrace tag inside an outgoing http request ensures compatibility to Dynatrace built-in sensors. +          Using this headername to transport Dynatrace tag inside an outgoing http + request ensures compatibility to Dynatrace built-in sensors. + + + +static java.lang.String +DYNATRACE_MESSAGE_PROPERTYNAME + +
    +          Using this propertyname to transport Dynatrace tag along with the message, ensures compatibility to Dynatrace built-in sensors.   @@ -142,7 +153,8 @@

    double value)
    -          Does exactly the same as addCustomRequestAttribute(String, String), but request-attribute type double. +          Does exactly the same as addCustomRequestAttribute(String, String), + but request-attribute type double. @@ -151,7 +163,8 @@

    long value)
    -          Does exactly the same as addCustomRequestAttribute(String, String), but request-attribute type long. +          Does exactly the same as addCustomRequestAttribute(String, String), + but request-attribute type long. @@ -172,13 +185,26 @@

    + MessagingSystemInfo +createMessagingSystemInfo(java.lang.String vendorName, + java.lang.String destinationName, + MessageDestinationType destinationType, + ChannelType channelType, + java.lang.String channelEndpoint) + +
    +          Initializes a MessagingSystemInfo instance that is required for tracing messages. + + +  WebApplicationInfo createWebApplicationInfo(java.lang.String webServerName, java.lang.String applicationID, java.lang.String contextRoot)
    -          Initializes a WebApplicationInfo instance that is required for tracing incoming web requests. +          Initializes a WebApplicationInfo instance that is required for tracing + incoming web requests. @@ -198,6 +224,22 @@

    + IncomingMessageProcessTracer +traceIncomingMessageProcess(MessagingSystemInfo messagingSystem) + +
    +          Creates a tracer for processing (consuming) a received message (onMessage). + + + + IncomingMessageReceiveTracer +traceIncomingMessageReceive(MessagingSystemInfo messagingSystem) + +
    +          Creates a tracer for an incoming asynchronous message (blocking receive). + + +  IncomingRemoteCallTracer traceIncomingRemoteCall(java.lang.String serviceMethod, java.lang.String serviceName, @@ -226,6 +268,14 @@

    + OutgoingMessageTracer +traceOutgoingMessage(MessagingSystemInfo messagingSystem) + +
    +          Creates a tracer for an outgoing asynchronous message (send). + + +  OutgoingRemoteCallTracer traceOutgoingRemoteCall(java.lang.String serviceMethod, java.lang.String serviceName, @@ -264,11 +314,24 @@

     static final java.lang.String DYNATRACE_HTTP_HEADERNAME
    -
    Using this headername to transport Dynatrace tag inside an outgoing http request ensures compatibility to Dynatrace built-in sensors. +
    Using this headername to transport Dynatrace tag inside an outgoing http + request ensures compatibility to Dynatrace built-in sensors.

    See Also:
    Constant Field Values
    +
    + +

    +DYNATRACE_MESSAGE_PROPERTYNAME

    +
    +static final java.lang.String DYNATRACE_MESSAGE_PROPERTYNAME
    +
    +
    Using this propertyname to transport Dynatrace tag along with the message, ensures compatibility to Dynatrace built-in sensors. +

    +

    +
    See Also:
    Constant Field Values
    +
    @@ -287,13 +350,19 @@

    java.lang.String applicationID, java.lang.String contextRoot)
    -
    Initializes a WebApplicationInfo instance that is required for tracing incoming web requests. This information determines the identity and name of the resulting Web Request service in dynatrace. - Also see https://www.dynatrace.com/support/help/server-side-services/introduction/how-does-dynatrace-detect-and-name-services/#web-request-services for detail description of the meaning of the parameters. +
    Initializes a WebApplicationInfo instance that is required for tracing + incoming web requests. This information determines the identity and name of + the resulting Web Request service in dynatrace. Also see + https://www.dynatrace.com/support/help/server-side-services/introduction/how-does-dynatrace-detect-and-name-services/#web-request-services + for detail description of the meaning of the parameters.

    -
    Parameters:
    webServerName - logical name of the web server. In case of a cluster every node in the cluster must report the same name here. - Attention: Make sure not to use the host header for this parameter. Host headers are often spoofed and contain things like google or baidoo which do not reflect your setup.
    applicationID - application ID of the web application
    contextRoot - context root of the application. - All URLs traced with the returned WebApplicationInfo, should start with provided context root. +
    Parameters:
    webServerName - logical name of the web server. In case of a cluster every node in + the cluster must report the same name here. Attention: Make sure + not to use the host header for this parameter. Host headers are + often spoofed and contain things like google or baidoo which do + not reflect your setup.
    applicationID - application ID of the web application
    contextRoot - context root of the application. All URLs traced with the returned + WebApplicationInfo, should start with provided context root.
    Returns:
    WebApplicationInfo instance to work with
    Since:
    1.3
    @@ -311,8 +380,9 @@

    Traces an incoming web request.

    -
    Parameters:
    webApplicationInfo - information about web application
    url - (parts of a) URL, which will be parsed into: scheme, hostname/port, path & query - Note: the hostname will be resolved by the Agent at start() call
    method - HTTP request method +
    Parameters:
    webApplicationInfo - information about web application
    url - (parts of a) URL, which will be parsed into: scheme, + hostname/port, path & query Note: the hostname will be resolved by + the Agent at start() call
    method - HTTP request method
    Returns:
    IncomingWebRequestTracer to work with
    Since:
    1.3
    @@ -329,8 +399,9 @@

    Traces an outgoing web request.

    -
    Parameters:
    url - URL, which will be parsed into: scheme, hostname/port, path & query - Note: the hostname will be resolved by the Agent at start() call
    method - HTTP request method +
    Parameters:
    url - URL, which will be parsed into: scheme, hostname/port, path & + query Note: the hostname will be resolved by the Agent at start() + call
    method - HTTP request method
    Returns:
    OutgoingWebRequestTracer to work with
    Since:
    1.4
    @@ -368,12 +439,12 @@

    Traces an outgoing remote call.

    -
    Parameters:
    serviceMethod - name of the called remote method. (required)
    serviceName - name of the remote service. (required)
    serviceEndpoint - endpoint on the server side. (required)
    channelType - communication protocol used by remote call. See ChannelType for - available types. (required)
    channelEndpoint - optional and depending on channelType: +
    Parameters:
    serviceMethod - name of the called remote method. (required)
    serviceName - name of the remote service. (required)
    serviceEndpoint - endpoint on the server side. (required)
    channelType - communication protocol used by remote call. See + ChannelType for available types. (required)
    channelEndpoint - optional and depending on channelType:
      -
    • for TCP/IP: host name/IP of the server-side (can include port) -
    • for UNIX domain sockets: path of domain socket file -
    • for named pipes: name of pipe +
    • for TCP/IP: host name/IP of the server-side (can include port) +
    • for UNIX domain sockets: path of domain socket file +
    • for named pipes: name of pipe
    Returns:
    OutgoingRemoteCallTracer instance to work with
    Since:
    1.0
    @@ -391,7 +462,8 @@

    -
    Returns:
    InProcessLink instance to work with. Use it with traceInProcessLink(InProcessLink)
    Since:
    +
    Returns:
    InProcessLink instance to work with. Use it with + traceInProcessLink(InProcessLink)
    Since:
    1.1
    @@ -420,9 +492,10 @@

    void addCustomRequestAttribute(java.lang.String key, java.lang.String value)
    -
    Adds a custom request attribute to currently traced service call. Might be called multiple times, to add more than one attribute. - Check via setLoggingCallback(LoggingCallback) if error happened. If two attributes with same key are set, both - attribute-values are captured. +
    Adds a custom request attribute to currently traced service call. Might be + called multiple times, to add more than one attribute. Check via + setLoggingCallback(LoggingCallback) if error happened. If two + attributes with same key are set, both attribute-values are captured.

    Parameters:
    key - key of the attribute. required parameter.
    value - value of the attribute. required parameter.
    Since:
    @@ -438,7 +511,8 @@

    void addCustomRequestAttribute(java.lang.String key, long value)
    -
    Does exactly the same as addCustomRequestAttribute(String, String), but request-attribute type long. +
    Does exactly the same as addCustomRequestAttribute(String, String), + but request-attribute type long.

    Since:
    @@ -454,7 +528,8 @@

    void addCustomRequestAttribute(java.lang.String key, double value)
    -
    Does exactly the same as addCustomRequestAttribute(String, String), but request-attribute type double. +
    Does exactly the same as addCustomRequestAttribute(String, String), + but request-attribute type double.

    Since:
    @@ -464,14 +539,85 @@


    +

    +createMessagingSystemInfo

    +
    +MessagingSystemInfo createMessagingSystemInfo(java.lang.String vendorName,
    +                                              java.lang.String destinationName,
    +                                              MessageDestinationType destinationType,
    +                                              ChannelType channelType,
    +                                              java.lang.String channelEndpoint)
    +
    +
    Initializes a MessagingSystemInfo instance that is required for tracing messages. +

    +

    +
    Parameters:
    vendorName - one of MessageSystemVendor if well known vendor. Custom provided in any other case.
    destinationName - destination name (e.g. queue name, topic name)
    destinationType - destination type - see MessageDestinationType.
    channelType - communication protocol used
    channelEndpoint - optional and depending on protocol: + * for TCP/IP: host name/IP of the server-side (can include port) + * for UNIX domain sockets: name of domain socket file + * for named pipes: name of pipe +
    Returns:
    MessagingSystemInfo instance to work with
    Since:
    +
    1.5
    +
    +
    +
    +
    + +

    +traceOutgoingMessage

    +
    +OutgoingMessageTracer traceOutgoingMessage(MessagingSystemInfo messagingSystem)
    +
    +
    Creates a tracer for an outgoing asynchronous message (send). +

    +

    +
    Parameters:
    messagingSystem - information about the messaging system (see createMessagingSystemInfo methods). +
    Returns:
    OutgoingMessageTracer to work with
    Since:
    +
    1.5
    +
    +
    +
    +
    + +

    +traceIncomingMessageReceive

    +
    +IncomingMessageReceiveTracer traceIncomingMessageReceive(MessagingSystemInfo messagingSystem)
    +
    +
    Creates a tracer for an incoming asynchronous message (blocking receive). +

    +

    +
    Parameters:
    messagingSystem - information about the messaging system (see createMessagingSystemInfo methods). +
    Returns:
    IncomingMessageReceiveTracer to work with
    Since:
    +
    1.5
    +
    +
    +
    +
    + +

    +traceIncomingMessageProcess

    +
    +IncomingMessageProcessTracer traceIncomingMessageProcess(MessagingSystemInfo messagingSystem)
    +
    +
    Creates a tracer for processing (consuming) a received message (onMessage). +

    +

    +
    Parameters:
    messagingSystem - information about the messaging system (see createMessagingSystemInfo methods). +
    Returns:
    IncomingMessageProcessTracer to work with
    Since:
    +
    1.5
    +
    +
    +
    +
    +

    setLoggingCallback

     void setLoggingCallback(LoggingCallback loggingCallback)
    -
    Installs a callback that gets informed, if any SDK action has failed. - For details see LoggingCallback interface. The provided callback must - be thread-safe, when using this OneAgentSDK instance in multi-threaded +
    Installs a callback that gets informed, if any SDK action has failed. For + details see LoggingCallback interface. The provided callback must be + thread-safe, when using this OneAgentSDK instance in multi-threaded environments.

    @@ -528,7 +674,7 @@

     PREV CLASS  - NEXT CLASSNEXT CLASS FRAMES    NO FRAMES   diff --git a/docs/com/dynatrace/oneagent/sdk/api/OutgoingMessageTracer.html b/docs/com/dynatrace/oneagent/sdk/api/OutgoingMessageTracer.html new file mode 100644 index 0000000..49f0efe --- /dev/null +++ b/docs/com/dynatrace/oneagent/sdk/api/OutgoingMessageTracer.html @@ -0,0 +1,263 @@ + + + + + + +OutgoingMessageTracer (sdk 1.5.0 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +com.dynatrace.oneagent.sdk.api +
    +Interface OutgoingMessageTracer

    +
    +
    All Superinterfaces:
    OutgoingTaggable, Tracer
    +
    +
    +
    +
    public interface OutgoingMessageTracer
    extends Tracer, OutgoingTaggable
    + + +

    +Interface for outgoing message tracer. + https://github.com/Dynatrace/OneAgent-SDK#messaging +

    + +

    +

    +
    Since:
    +
    1.5
    +
    +
    + +

    + + + + + + + + + + + + + + + + +
    +Method Summary
    + voidsetCorrelationId(java.lang.String correlationId) + +
    +          Adds optional information about a traced message: correlation id used by messaging system.
    + voidsetVendorMessageId(java.lang.String vendorMessageId) + +
    +          Adds optional information about a traced message: message id provided by messaging system.
    + + + + + + + +
    Methods inherited from interface com.dynatrace.oneagent.sdk.api.Tracer
    end, error, error, start
    + + + + + + + +
    Methods inherited from interface com.dynatrace.oneagent.sdk.api.OutgoingTaggable
    getDynatraceByteTag, getDynatraceStringTag
    +  +

    + + + + + + + + +
    +Method Detail
    + +

    +setVendorMessageId

    +
    +void setVendorMessageId(java.lang.String vendorMessageId)
    +
    +
    Adds optional information about a traced message: message id provided by messaging system. +

    +

    +
    +
    +
    +
    Parameters:
    vendorMessageId - the messageId
    +
    +
    +
    + +

    +setCorrelationId

    +
    +void setCorrelationId(java.lang.String correlationId)
    +
    +
    Adds optional information about a traced message: correlation id used by messaging system. +

    +

    +
    +
    +
    +
    Parameters:
    correlationId - correlationId
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + + + diff --git a/docs/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.html b/docs/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.html index 3e1fc99..e069f7c 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.html +++ b/docs/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.html @@ -2,12 +2,12 @@ - + -OutgoingRemoteCallTracer (sdk 1.4.0 API) +OutgoingRemoteCallTracer (sdk 1.5.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="OutgoingRemoteCallTracer (sdk 1.4.0 API)"; + parent.document.title="OutgoingRemoteCallTracer (sdk 1.5.0 API)"; } } @@ -54,7 +54,7 @@ PREV CLASS  + PREV CLASS   NEXT CLASS FRAMES   @@ -99,7 +99,7 @@

    -Represents the client side of a remote call. +Represents the client side of a remote call. This Interface extends Tracer - it is important to respect the mentioned requirements when working with OutgoingRemoteCallTracer. @@ -205,7 +205,7 @@

    PREV CLASS  + PREV CLASS   NEXT CLASS FRAMES   diff --git a/docs/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.html b/docs/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.html index 8a3dc12..6b0d52d 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.html +++ b/docs/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.html @@ -2,12 +2,12 @@ - + -OutgoingTaggable (sdk 1.4.0 API) +OutgoingTaggable (sdk 1.5.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="OutgoingTaggable (sdk 1.4.0 API)"; + parent.document.title="OutgoingTaggable (sdk 1.5.0 API)"; } } @@ -91,7 +91,7 @@


    Interface OutgoingTaggable

    -
    All Known Subinterfaces:
    OutgoingRemoteCallTracer, OutgoingWebRequestTracer
    +
    All Known Subinterfaces:
    OutgoingMessageTracer, OutgoingRemoteCallTracer, OutgoingWebRequestTracer

    @@ -122,8 +122,8 @@

    getDynatraceByteTag()
    -          Same as getDynatraceStringTag(), but returning the tag as - binary representation. +          Same as getDynatraceStringTag(), but returning the tag as binary + representation. @@ -152,9 +152,10 @@

     java.lang.String getDynatraceStringTag()
    -
    Creates a Dynatrace tag and returns the String representation of it. This - tag has to be transported with the remoting protocol to the destination.
    - See IncomingTaggable how to continue a path with provided tag on the server side. +
    Creates a Dynatrace tag and returns the String representation of it. This tag + has to be transported with the remoting protocol to the destination.
    + See IncomingTaggable how to continue a path with provided tag on the + server side.

    @@ -170,8 +171,8 @@

     byte[] getDynatraceByteTag()
    -
    Same as getDynatraceStringTag(), but returning the tag as - binary representation. +
    Same as getDynatraceStringTag(), but returning the tag as binary + representation.

    diff --git a/docs/com/dynatrace/oneagent/sdk/api/OutgoingWebRequestTracer.html b/docs/com/dynatrace/oneagent/sdk/api/OutgoingWebRequestTracer.html index f5ec410..f121047 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/OutgoingWebRequestTracer.html +++ b/docs/com/dynatrace/oneagent/sdk/api/OutgoingWebRequestTracer.html @@ -2,12 +2,12 @@ - + -OutgoingWebRequestTracer (sdk 1.4.0 API) +OutgoingWebRequestTracer (sdk 1.5.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="OutgoingWebRequestTracer (sdk 1.4.0 API)"; + parent.document.title="OutgoingWebRequestTracer (sdk 1.5.0 API)"; } } @@ -135,7 +135,8 @@

    java.lang.String value)
    -          All HTTP response headers returned by the server should be provided to this method. +          All HTTP response headers returned by the server should be provided to this + method. @@ -183,7 +184,8 @@

    void addRequestHeader(java.lang.String name, java.lang.String value)
    -
    All HTTP request headers should be provided to this method. Selective capturing will be done based on sensor configuration. +
    All HTTP request headers should be provided to this method. Selective + capturing will be done based on sensor configuration.

    @@ -200,8 +202,8 @@

    void addResponseHeader(java.lang.String name, java.lang.String value)
    -
    All HTTP response headers returned by the server should be provided to this method. Selective capturing will - be done based on sensor configuration. +
    All HTTP response headers returned by the server should be provided to this + method. Selective capturing will be done based on sensor configuration.

    diff --git a/docs/com/dynatrace/oneagent/sdk/api/Tracer.html b/docs/com/dynatrace/oneagent/sdk/api/Tracer.html index b4c7f42..6ed5a88 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/Tracer.html +++ b/docs/com/dynatrace/oneagent/sdk/api/Tracer.html @@ -2,12 +2,12 @@ - + -Tracer (sdk 1.4.0 API) +Tracer (sdk 1.5.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Tracer (sdk 1.4.0 API)"; + parent.document.title="Tracer (sdk 1.5.0 API)"; } } @@ -91,7 +91,7 @@


    Interface Tracer

    -
    All Known Subinterfaces:
    IncomingRemoteCallTracer, IncomingWebRequestTracer, InProcessLinkTracer, OutgoingRemoteCallTracer, OutgoingWebRequestTracer
    +
    All Known Subinterfaces:
    IncomingMessageProcessTracer, IncomingMessageReceiveTracer, IncomingRemoteCallTracer, IncomingWebRequestTracer, InProcessLinkTracer, OutgoingMessageTracer, OutgoingRemoteCallTracer, OutgoingWebRequestTracer

    @@ -138,8 +138,8 @@

    error(java.lang.Throwable throwable)
    -          Marks the node as 'exited by exception'.Additional information can - be provided as Throwable. +          Marks the node as 'exited by exception'.Additional information can be + provided as Throwable. @@ -168,8 +168,8 @@

     void start()
    -
    starts timing of a node. Every node that has been started, must be - ended with end() method. Consider using the following pattern: +
    starts timing of a node. Every node that has been started, must be ended with + end() method. Consider using the following pattern:
      tracer.start();
    @@ -184,8 +184,8 @@ 

    start(), end(), error(String), - error(Throwable) are not thread-safe. They must be called from - the same thread where start() has been invoked. + error(Throwable) are not thread-safe. They must be called from the + same thread where start() has been invoked.

    Since:
    @@ -203,8 +203,8 @@

    Ends timing of a node. Typically this method is called via finally block.
    start(), end(), error(String), - error(Throwable) are not thread-safe. They must be called from - the same thread where start() has been invoked. + error(Throwable) are not thread-safe. They must be called from the + same thread where start() has been invoked.

    Since:
    @@ -219,15 +219,15 @@

     void error(java.lang.String message)
    -
    Marks the node as 'exited by exception'. An additional error message - can be provided as String.
    +
    Marks the node as 'exited by exception'. An additional error message can be + provided as String.
    start(), end(), error(String), - error(Throwable) are not thread-safe. They must be called from - the same thread where start() has been invoked. + error(Throwable) are not thread-safe. They must be called from the + same thread where start() has been invoked.

    -
    Parameters:
    message - error message with details about occurred error (eg. return - code). must not be null.
    Since:
    +
    Parameters:
    message - error message with details about occurred error (eg. return code). + must not be null.
    Since:
    1.0
    @@ -239,11 +239,11 @@

     void error(java.lang.Throwable throwable)
    -
    Marks the node as 'exited by exception'.Additional information can - be provided as Throwable.
    +
    Marks the node as 'exited by exception'.Additional information can be + provided as Throwable.
    start(), end(), error(String), - error(Throwable) are not thread-safe. They must be called from - the same thread where start() has been invoked. + error(Throwable) are not thread-safe. They must be called from the + same thread where start() has been invoked.

    Parameters:
    throwable - exception, that occurred. must not null.
    Since:
    diff --git a/docs/com/dynatrace/oneagent/sdk/api/enums/ChannelType.html b/docs/com/dynatrace/oneagent/sdk/api/enums/ChannelType.html index 8325139..d5298ff 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/enums/ChannelType.html +++ b/docs/com/dynatrace/oneagent/sdk/api/enums/ChannelType.html @@ -2,12 +2,12 @@ - + -ChannelType (sdk 1.4.0 API) +ChannelType (sdk 1.5.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="ChannelType (sdk 1.4.0 API)"; + parent.document.title="ChannelType (sdk 1.5.0 API)"; } } @@ -55,7 +55,7 @@  PREV CLASS  - NEXT CLASSNEXT CLASS FRAMES    NO FRAMES   @@ -357,7 +357,7 @@

     PREV CLASS  - NEXT CLASSNEXT CLASS FRAMES    NO FRAMES   diff --git a/docs/com/dynatrace/oneagent/sdk/api/enums/MessageDestinationType.html b/docs/com/dynatrace/oneagent/sdk/api/enums/MessageDestinationType.html new file mode 100644 index 0000000..5184957 --- /dev/null +++ b/docs/com/dynatrace/oneagent/sdk/api/enums/MessageDestinationType.html @@ -0,0 +1,348 @@ + + + + + + +MessageDestinationType (sdk 1.5.0 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +com.dynatrace.oneagent.sdk.api.enums +
    +Enum MessageDestinationType

    +
    +java.lang.Object
    +  extended by java.lang.Enum<MessageDestinationType>
    +      extended by com.dynatrace.oneagent.sdk.api.enums.MessageDestinationType
    +
    +
    +
    All Implemented Interfaces:
    java.io.Serializable, java.lang.Comparable<MessageDestinationType>
    +
    +
    +
    +
    public enum MessageDestinationType
    extends java.lang.Enum<MessageDestinationType>
    + + +

    +Enumerates all well-known messaging destination types. See + OneAgentSDK.createMessagingSystemInfo(String, String, MessageDestinationType, ChannelType, String) +

    + +

    +

    +
    Since:
    +
    1.5
    +
    +
    + +

    + + + + + + + + + + + + + +
    +Enum Constant Summary
    QUEUE + +
    +           
    TOPIC + +
    +           
    +  + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + java.lang.StringgetName() + +
    +           
    +static MessageDestinationTypevalueOf(java.lang.String name) + +
    +          Returns the enum constant of this type with the specified name.
    +static MessageDestinationType[]values() + +
    +          Returns an array containing the constants of this enum type, in +the order they are declared.
    + + + + + + + +
    Methods inherited from class java.lang.Enum
    clone, compareTo, equals, finalize, getDeclaringClass, hashCode, name, ordinal, toString, valueOf
    + + + + + + + +
    Methods inherited from class java.lang.Object
    getClass, notify, notifyAll, wait, wait, wait
    +  +

    + + + + + + + + +
    +Enum Constant Detail
    + +

    +QUEUE

    +
    +public static final MessageDestinationType QUEUE
    +
    +
    +
    +
    +
    + +

    +TOPIC

    +
    +public static final MessageDestinationType TOPIC
    +
    +
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +values

    +
    +public static MessageDestinationType[] values()
    +
    +
    Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
    +for (MessageDestinationType c : MessageDestinationType.values())
    +    System.out.println(c);
    +
    +

    +

    + +
    Returns:
    an array containing the constants of this enum type, in +the order they are declared
    +
    +
    +
    + +

    +valueOf

    +
    +public static MessageDestinationType valueOf(java.lang.String name)
    +
    +
    Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.) +

    +

    +
    Parameters:
    name - the name of the enum constant to be returned. +
    Returns:
    the enum constant with the specified name +
    Throws: +
    java.lang.IllegalArgumentException - if this enum type has no constant +with the specified name +
    java.lang.NullPointerException - if the argument is null
    +
    +
    +
    + +

    +getName

    +
    +public java.lang.String getName()
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + + + diff --git a/docs/com/dynatrace/oneagent/sdk/api/enums/MessageSystemVendor.html b/docs/com/dynatrace/oneagent/sdk/api/enums/MessageSystemVendor.html new file mode 100644 index 0000000..e5ba808 --- /dev/null +++ b/docs/com/dynatrace/oneagent/sdk/api/enums/MessageSystemVendor.html @@ -0,0 +1,462 @@ + + + + + + +MessageSystemVendor (sdk 1.5.0 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +com.dynatrace.oneagent.sdk.api.enums +
    +Enum MessageSystemVendor

    +
    +java.lang.Object
    +  extended by java.lang.Enum<MessageSystemVendor>
    +      extended by com.dynatrace.oneagent.sdk.api.enums.MessageSystemVendor
    +
    +
    +
    All Implemented Interfaces:
    java.io.Serializable, java.lang.Comparable<MessageSystemVendor>
    +
    +
    +
    +
    public enum MessageSystemVendor
    extends java.lang.Enum<MessageSystemVendor>
    + + +

    +Enumerates all well-known messaging systems. See OneAgentSDK.createMessagingSystemInfo(String, String, MessageDestinationType, ChannelType, String). + Using these constants ensures that services captured by OneAgentSDK are handled the same way as traced via built-in sensors. +

    + +

    +


    + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Enum Constant Summary
    ACTIVE_MQ + +
    +           
    ARTEMIS + +
    +           
    HORNETQ + +
    +           
    MQSERIES + +
    +           
    MQSERIES_JMS + +
    +           
    RABBIT_MQ + +
    +           
    TIBCO + +
    +           
    WEBSPHERE + +
    +           
    +  + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + java.lang.StringgetVendorName() + +
    +           
    + java.lang.StringtoString() + +
    +           
    +static MessageSystemVendorvalueOf(java.lang.String name) + +
    +          Returns the enum constant of this type with the specified name.
    +static MessageSystemVendor[]values() + +
    +          Returns an array containing the constants of this enum type, in +the order they are declared.
    + + + + + + + +
    Methods inherited from class java.lang.Enum
    clone, compareTo, equals, finalize, getDeclaringClass, hashCode, name, ordinal, valueOf
    + + + + + + + +
    Methods inherited from class java.lang.Object
    getClass, notify, notifyAll, wait, wait, wait
    +  +

    + + + + + + + + +
    +Enum Constant Detail
    + +

    +HORNETQ

    +
    +public static final MessageSystemVendor HORNETQ
    +
    +
    +
    +
    +
    + +

    +ACTIVE_MQ

    +
    +public static final MessageSystemVendor ACTIVE_MQ
    +
    +
    +
    +
    +
    + +

    +RABBIT_MQ

    +
    +public static final MessageSystemVendor RABBIT_MQ
    +
    +
    +
    +
    +
    + +

    +ARTEMIS

    +
    +public static final MessageSystemVendor ARTEMIS
    +
    +
    +
    +
    +
    + +

    +WEBSPHERE

    +
    +public static final MessageSystemVendor WEBSPHERE
    +
    +
    +
    +
    +
    + +

    +MQSERIES_JMS

    +
    +public static final MessageSystemVendor MQSERIES_JMS
    +
    +
    +
    +
    +
    + +

    +MQSERIES

    +
    +public static final MessageSystemVendor MQSERIES
    +
    +
    +
    +
    +
    + +

    +TIBCO

    +
    +public static final MessageSystemVendor TIBCO
    +
    +
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +values

    +
    +public static MessageSystemVendor[] values()
    +
    +
    Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
    +for (MessageSystemVendor c : MessageSystemVendor.values())
    +    System.out.println(c);
    +
    +

    +

    + +
    Returns:
    an array containing the constants of this enum type, in +the order they are declared
    +
    +
    +
    + +

    +valueOf

    +
    +public static MessageSystemVendor valueOf(java.lang.String name)
    +
    +
    Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.) +

    +

    +
    Parameters:
    name - the name of the enum constant to be returned. +
    Returns:
    the enum constant with the specified name +
    Throws: +
    java.lang.IllegalArgumentException - if this enum type has no constant +with the specified name +
    java.lang.NullPointerException - if the argument is null
    +
    +
    +
    + +

    +getVendorName

    +
    +public java.lang.String getVendorName()
    +
    +
    +
    +
    +
    +
    + +

    +toString

    +
    +public java.lang.String toString()
    +
    +
    +
    Overrides:
    toString in class java.lang.Enum<MessageSystemVendor>
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + + + diff --git a/docs/com/dynatrace/oneagent/sdk/api/enums/SDKState.html b/docs/com/dynatrace/oneagent/sdk/api/enums/SDKState.html index ed780bf..afd3751 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/enums/SDKState.html +++ b/docs/com/dynatrace/oneagent/sdk/api/enums/SDKState.html @@ -2,12 +2,12 @@ - + -SDKState (sdk 1.4.0 API) +SDKState (sdk 1.5.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="SDKState (sdk 1.4.0 API)"; + parent.document.title="SDKState (sdk 1.5.0 API)"; } } @@ -54,7 +54,7 @@ PREV CLASS  + PREV CLASS   NEXT CLASS FRAMES   @@ -135,7 +135,7 @@

    TEMPORARILY_INACTIVE
    -          SDK is connected to OneAgent, but capturing is disabled.It is good practice +          SDK is connected to OneAgent, but capturing is disabled.It is good practice to skip creating SDK transactions to save resources. @@ -216,9 +216,9 @@

     public static final SDKState TEMPORARILY_INACTIVE
    -
    SDK is connected to OneAgent, but capturing is disabled.It is good practice - to skip creating SDK transactions to save resources. The SDK state should - be checked regularly as it may change at every point in time. +
    SDK is connected to OneAgent, but capturing is disabled.It is good practice + to skip creating SDK transactions to save resources. The SDK state should be + checked regularly as it may change at every point in time.

    Since:
    @@ -232,9 +232,9 @@

     public static final SDKState PERMANENTLY_INACTIVE
    -
    SDK isn't connected to OneAgent, so it will never capture data. This SDK - state will never change during the lifetime of a JVM. It is good practice - to never call any SDK API to save resources. +
    SDK isn't connected to OneAgent, so it will never capture data. This SDK + state will never change during the lifetime of a JVM. It is good practice to + never call any SDK API to save resources.

    Since:
    @@ -322,7 +322,7 @@

    PREV CLASS  + PREV CLASS   NEXT CLASS FRAMES   diff --git a/docs/com/dynatrace/oneagent/sdk/api/enums/package-frame.html b/docs/com/dynatrace/oneagent/sdk/api/enums/package-frame.html index 6e89aae..cbb0ac5 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/enums/package-frame.html +++ b/docs/com/dynatrace/oneagent/sdk/api/enums/package-frame.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api.enums (sdk 1.4.0 API) +com.dynatrace.oneagent.sdk.api.enums (sdk 1.5.0 API) - + @@ -25,6 +25,10 @@
    ChannelType
    +MessageDestinationType +
    +MessageSystemVendor +
    SDKState
    diff --git a/docs/com/dynatrace/oneagent/sdk/api/enums/package-summary.html b/docs/com/dynatrace/oneagent/sdk/api/enums/package-summary.html index 53ceedf..4952684 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/enums/package-summary.html +++ b/docs/com/dynatrace/oneagent/sdk/api/enums/package-summary.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api.enums (sdk 1.4.0 API) +com.dynatrace.oneagent.sdk.api.enums (sdk 1.5.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.dynatrace.oneagent.sdk.api.enums (sdk 1.4.0 API)"; + parent.document.title="com.dynatrace.oneagent.sdk.api.enums (sdk 1.5.0 API)"; } } @@ -92,6 +92,14 @@

    Defines the type of communication channel being used. +MessageDestinationType +Enumerates all well-known messaging destination types. + + +MessageSystemVendor +Enumerates all well-known messaging systems. + + SDKState Defines the possible states of the SDK. diff --git a/docs/com/dynatrace/oneagent/sdk/api/enums/package-tree.html b/docs/com/dynatrace/oneagent/sdk/api/enums/package-tree.html index 79c751d..5769575 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/enums/package-tree.html +++ b/docs/com/dynatrace/oneagent/sdk/api/enums/package-tree.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api.enums Class Hierarchy (sdk 1.4.0 API) +com.dynatrace.oneagent.sdk.api.enums Class Hierarchy (sdk 1.5.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.dynatrace.oneagent.sdk.api.enums Class Hierarchy (sdk 1.4.0 API)"; + parent.document.title="com.dynatrace.oneagent.sdk.api.enums Class Hierarchy (sdk 1.5.0 API)"; } } @@ -93,7 +93,7 @@

  • java.lang.Object
    diff --git a/docs/com/dynatrace/oneagent/sdk/api/infos/MessagingSystemInfo.html b/docs/com/dynatrace/oneagent/sdk/api/infos/MessagingSystemInfo.html new file mode 100644 index 0000000..b708525 --- /dev/null +++ b/docs/com/dynatrace/oneagent/sdk/api/infos/MessagingSystemInfo.html @@ -0,0 +1,174 @@ + + + + + + +MessagingSystemInfo (sdk 1.5.0 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +com.dynatrace.oneagent.sdk.api.infos +
    +Interface MessagingSystemInfo

    +
    +
    +
    public interface MessagingSystemInfo
    + + +

    +Type returned by OneAgentSDK.createMessagingSystemInfo(String, String, com.dynatrace.oneagent.sdk.api.enums.MessageDestinationType, com.dynatrace.oneagent.sdk.api.enums.ChannelType, String) +

    + +

    +

    +
    Since:
    +
    1.5
    +
    +
    + +

    + +

    + +


    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + + + diff --git a/docs/com/dynatrace/oneagent/sdk/api/infos/WebApplicationInfo.html b/docs/com/dynatrace/oneagent/sdk/api/infos/WebApplicationInfo.html index 50fe833..759ad21 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/infos/WebApplicationInfo.html +++ b/docs/com/dynatrace/oneagent/sdk/api/infos/WebApplicationInfo.html @@ -2,12 +2,12 @@ - + -WebApplicationInfo (sdk 1.4.0 API) +WebApplicationInfo (sdk 1.5.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="WebApplicationInfo (sdk 1.4.0 API)"; + parent.document.title="WebApplicationInfo (sdk 1.5.0 API)"; } } @@ -54,7 +54,7 @@ - PREV CLASS  + PREV CLASS   NEXT CLASS FRAMES   @@ -96,7 +96,8 @@

    -Type returned by OneAgentSDK.createWebApplicationInfo(String, String, String) +Type returned by + OneAgentSDK.createWebApplicationInfo(String, String, String)

    @@ -139,7 +140,7 @@

    - PREV CLASS  + PREV CLASS   NEXT CLASS FRAMES   diff --git a/docs/com/dynatrace/oneagent/sdk/api/infos/package-frame.html b/docs/com/dynatrace/oneagent/sdk/api/infos/package-frame.html index 7c465a6..c030f07 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/infos/package-frame.html +++ b/docs/com/dynatrace/oneagent/sdk/api/infos/package-frame.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api.infos (sdk 1.4.0 API) +com.dynatrace.oneagent.sdk.api.infos (sdk 1.5.0 API) - + @@ -23,6 +23,8 @@ Interfaces 
    +MessagingSystemInfo +
    WebApplicationInfo
    diff --git a/docs/com/dynatrace/oneagent/sdk/api/infos/package-summary.html b/docs/com/dynatrace/oneagent/sdk/api/infos/package-summary.html index 6d61100..1d6c5d5 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/infos/package-summary.html +++ b/docs/com/dynatrace/oneagent/sdk/api/infos/package-summary.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api.infos (sdk 1.4.0 API) +com.dynatrace.oneagent.sdk.api.infos (sdk 1.5.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.dynatrace.oneagent.sdk.api.infos (sdk 1.4.0 API)"; + parent.document.title="com.dynatrace.oneagent.sdk.api.infos (sdk 1.5.0 API)"; } } @@ -88,8 +88,13 @@

    Interface Summary +MessagingSystemInfo +Type returned by OneAgentSDK.createMessagingSystemInfo(String, String, com.dynatrace.oneagent.sdk.api.enums.MessageDestinationType, com.dynatrace.oneagent.sdk.api.enums.ChannelType, String) + + WebApplicationInfo -Type returned by OneAgentSDK.createWebApplicationInfo(String, String, String) +Type returned by + OneAgentSDK.createWebApplicationInfo(String, String, String)   diff --git a/docs/com/dynatrace/oneagent/sdk/api/infos/package-tree.html b/docs/com/dynatrace/oneagent/sdk/api/infos/package-tree.html index 3dc5728..140ace9 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/infos/package-tree.html +++ b/docs/com/dynatrace/oneagent/sdk/api/infos/package-tree.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api.infos Class Hierarchy (sdk 1.4.0 API) +com.dynatrace.oneagent.sdk.api.infos Class Hierarchy (sdk 1.5.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.dynatrace.oneagent.sdk.api.infos Class Hierarchy (sdk 1.4.0 API)"; + parent.document.title="com.dynatrace.oneagent.sdk.api.infos Class Hierarchy (sdk 1.5.0 API)"; } } @@ -90,7 +90,7 @@

    Interface Hierarchy

    +
  • com.dynatrace.oneagent.sdk.api.infos.MessagingSystemInfo
  • com.dynatrace.oneagent.sdk.api.infos.WebApplicationInfo
    diff --git a/docs/com/dynatrace/oneagent/sdk/api/package-frame.html b/docs/com/dynatrace/oneagent/sdk/api/package-frame.html index cbf7d14..2bc682e 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/package-frame.html +++ b/docs/com/dynatrace/oneagent/sdk/api/package-frame.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api (sdk 1.4.0 API) +com.dynatrace.oneagent.sdk.api (sdk 1.5.0 API) - + @@ -23,6 +23,10 @@ Interfaces 
    +IncomingMessageProcessTracer +
    +IncomingMessageReceiveTracer +
    IncomingRemoteCallTracer
    IncomingTaggable @@ -37,6 +41,8 @@
    OneAgentSDK
    +OutgoingMessageTracer +
    OutgoingRemoteCallTracer
    OutgoingTaggable diff --git a/docs/com/dynatrace/oneagent/sdk/api/package-summary.html b/docs/com/dynatrace/oneagent/sdk/api/package-summary.html index 2fedb45..5760d15 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/package-summary.html +++ b/docs/com/dynatrace/oneagent/sdk/api/package-summary.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api (sdk 1.4.0 API) +com.dynatrace.oneagent.sdk.api (sdk 1.5.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.dynatrace.oneagent.sdk.api (sdk 1.4.0 API)"; + parent.document.title="com.dynatrace.oneagent.sdk.api (sdk 1.5.0 API)"; } } @@ -88,6 +88,14 @@

    Interface Summary +IncomingMessageProcessTracer +Interface for processing message tracer. + + +IncomingMessageReceiveTracer +Interface for receiving message tracer. + + IncomingRemoteCallTracer Represents the server side of a remote call. @@ -109,14 +117,18 @@

    LoggingCallback -LoggingCallback gets called only inside a OneAgentSDK API call when - an error/warning has occurred. +LoggingCallback gets called only inside a OneAgentSDK API call when an + error/warning has occurred. OneAgentSDK Root interface contains provided Agent SDK API calls. +OutgoingMessageTracer +Interface for outgoing message tracer. + + OutgoingRemoteCallTracer Represents the client side of a remote call. diff --git a/docs/com/dynatrace/oneagent/sdk/api/package-tree.html b/docs/com/dynatrace/oneagent/sdk/api/package-tree.html index 30ff0c8..108a51c 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/package-tree.html +++ b/docs/com/dynatrace/oneagent/sdk/api/package-tree.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api Class Hierarchy (sdk 1.4.0 API) +com.dynatrace.oneagent.sdk.api Class Hierarchy (sdk 1.5.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.dynatrace.oneagent.sdk.api Class Hierarchy (sdk 1.4.0 API)"; + parent.document.title="com.dynatrace.oneagent.sdk.api Class Hierarchy (sdk 1.5.0 API)"; } } @@ -91,17 +91,21 @@

    diff --git a/docs/com/dynatrace/oneagent/sdk/package-frame.html b/docs/com/dynatrace/oneagent/sdk/package-frame.html index cfbdf69..4fc5033 100644 --- a/docs/com/dynatrace/oneagent/sdk/package-frame.html +++ b/docs/com/dynatrace/oneagent/sdk/package-frame.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk (sdk 1.4.0 API) +com.dynatrace.oneagent.sdk (sdk 1.5.0 API) - + diff --git a/docs/com/dynatrace/oneagent/sdk/package-summary.html b/docs/com/dynatrace/oneagent/sdk/package-summary.html index 6378ae7..83475e0 100644 --- a/docs/com/dynatrace/oneagent/sdk/package-summary.html +++ b/docs/com/dynatrace/oneagent/sdk/package-summary.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk (sdk 1.4.0 API) +com.dynatrace.oneagent.sdk (sdk 1.5.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.dynatrace.oneagent.sdk (sdk 1.4.0 API)"; + parent.document.title="com.dynatrace.oneagent.sdk (sdk 1.5.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/package-tree.html b/docs/com/dynatrace/oneagent/sdk/package-tree.html index 7fed654..f0ef21c 100644 --- a/docs/com/dynatrace/oneagent/sdk/package-tree.html +++ b/docs/com/dynatrace/oneagent/sdk/package-tree.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk Class Hierarchy (sdk 1.4.0 API) +com.dynatrace.oneagent.sdk Class Hierarchy (sdk 1.5.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.dynatrace.oneagent.sdk Class Hierarchy (sdk 1.4.0 API)"; + parent.document.title="com.dynatrace.oneagent.sdk Class Hierarchy (sdk 1.5.0 API)"; } } diff --git a/docs/constant-values.html b/docs/constant-values.html index 227ffc3..9ec8b18 100644 --- a/docs/constant-values.html +++ b/docs/constant-values.html @@ -2,12 +2,12 @@ - + -Constant Field Values (sdk 1.4.0 API) +Constant Field Values (sdk 1.5.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Constant Field Values (sdk 1.4.0 API)"; + parent.document.title="Constant Field Values (sdk 1.5.0 API)"; } } @@ -107,6 +107,12 @@

    DYNATRACE_HTTP_HEADERNAME "X-dynaTrace" + + +public static final java.lang.String +DYNATRACE_MESSAGE_PROPERTYNAME +"dtdTraceTagInfo" + diff --git a/docs/deprecated-list.html b/docs/deprecated-list.html index d228476..f7aad76 100644 --- a/docs/deprecated-list.html +++ b/docs/deprecated-list.html @@ -2,12 +2,12 @@ - + -Deprecated List (sdk 1.4.0 API) +Deprecated List (sdk 1.5.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Deprecated List (sdk 1.4.0 API)"; + parent.document.title="Deprecated List (sdk 1.5.0 API)"; } } diff --git a/docs/help-doc.html b/docs/help-doc.html index 97e2d8a..954ab12 100644 --- a/docs/help-doc.html +++ b/docs/help-doc.html @@ -2,12 +2,12 @@ - + -API Help (sdk 1.4.0 API) +API Help (sdk 1.5.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="API Help (sdk 1.4.0 API)"; + parent.document.title="API Help (sdk 1.5.0 API)"; } } diff --git a/docs/index-all.html b/docs/index-all.html index a9421e4..38563b7 100644 --- a/docs/index-all.html +++ b/docs/index-all.html @@ -2,12 +2,12 @@ - + -Index (sdk 1.4.0 API) +Index (sdk 1.5.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Index (sdk 1.4.0 API)"; + parent.document.title="Index (sdk 1.5.0 API)"; } } @@ -77,7 +77,7 @@ -A C D E G I L O S T V W
    +A C D E G I L M O S T V W

    A

    @@ -86,10 +86,12 @@
    Adds a custom request attribute to currently traced service call.
    addCustomRequestAttribute(String, long) - Method in interface com.dynatrace.oneagent.sdk.api.OneAgentSDK -
    Does exactly the same as OneAgentSDK.addCustomRequestAttribute(String, String), but request-attribute type long. +
    Does exactly the same as OneAgentSDK.addCustomRequestAttribute(String, String), + but request-attribute type long.
    addCustomRequestAttribute(String, double) - Method in interface com.dynatrace.oneagent.sdk.api.OneAgentSDK -
    Does exactly the same as OneAgentSDK.addCustomRequestAttribute(String, String), but request-attribute type double. +
    Does exactly the same as OneAgentSDK.addCustomRequestAttribute(String, String), + but request-attribute type double.
    addParameter(String, String) - Method in interface com.dynatrace.oneagent.sdk.api.IncomingWebRequestTracer
    All HTTP parameters should be provided to this method. @@ -104,7 +106,8 @@
    All HTTP response headers should be provided to this method.
    addResponseHeader(String, String) - Method in interface com.dynatrace.oneagent.sdk.api.OutgoingWebRequestTracer -
    All HTTP response headers returned by the server should be provided to this method. +
    All HTTP response headers returned by the server should be provided to this + method.

    @@ -117,9 +120,13 @@ Static method in class com.dynatrace.oneagent.sdk.OneAgentSDKFactory
    Provides a OneAgentSDK instance, that has to be used to create transactions. +
    createMessagingSystemInfo(String, String, MessageDestinationType, ChannelType, String) - +Method in interface com.dynatrace.oneagent.sdk.api.OneAgentSDK +
    Initializes a MessagingSystemInfo instance that is required for tracing messages.
    createWebApplicationInfo(String, String, String) - Method in interface com.dynatrace.oneagent.sdk.api.OneAgentSDK -
    Initializes a WebApplicationInfo instance that is required for tracing incoming web requests. +
    Initializes a WebApplicationInfo instance that is required for tracing + incoming web requests.


  • @@ -127,7 +134,11 @@
    DYNATRACE_HTTP_HEADERNAME - Static variable in interface com.dynatrace.oneagent.sdk.api.OneAgentSDK -
    Using this headername to transport Dynatrace tag inside an outgoing http request ensures compatibility to Dynatrace built-in sensors. +
    Using this headername to transport Dynatrace tag inside an outgoing http + request ensures compatibility to Dynatrace built-in sensors. +
    DYNATRACE_MESSAGE_PROPERTYNAME - +Static variable in interface com.dynatrace.oneagent.sdk.api.OneAgentSDK +
    Using this propertyname to transport Dynatrace tag along with the message, ensures compatibility to Dynatrace built-in sensors.

    @@ -144,8 +155,8 @@
    Marks the node as 'exited by exception'.
    error(Throwable) - Method in interface com.dynatrace.oneagent.sdk.api.Tracer -
    Marks the node as 'exited by exception'.Additional information can - be provided as Throwable. +
    Marks the node as 'exited by exception'.Additional information can be + provided as Throwable.


    @@ -156,26 +167,37 @@
    Returns the current SDKState.
    getDynatraceByteTag() - Method in interface com.dynatrace.oneagent.sdk.api.OutgoingTaggable -
    Same as OutgoingTaggable.getDynatraceStringTag(), but returning the tag as - binary representation. +
    Same as OutgoingTaggable.getDynatraceStringTag(), but returning the tag as binary + representation.
    getDynatraceStringTag() - Method in interface com.dynatrace.oneagent.sdk.api.OutgoingTaggable
    Creates a Dynatrace tag and returns the String representation of it. +
    getName() - +Method in enum com.dynatrace.oneagent.sdk.api.enums.MessageDestinationType +
     
    getSDKConstant() - Method in enum com.dynatrace.oneagent.sdk.api.enums.ChannelType
      +
    getVendorName() - +Method in enum com.dynatrace.oneagent.sdk.api.enums.MessageSystemVendor +
     


    I

    -
    IncomingRemoteCallTracer - Interface in com.dynatrace.oneagent.sdk.api
    Represents the server side of a remote call.
    IncomingTaggable - Interface in com.dynatrace.oneagent.sdk.api
    Common interface for server-tagging-related methods.
    IncomingWebRequestTracer - Interface in com.dynatrace.oneagent.sdk.api
    Interface for incoming webrequest tracer.
    InProcessLink - Interface in com.dynatrace.oneagent.sdk.api
    Represents link used for in-process-tagging.
    InProcessLinkTracer - Interface in com.dynatrace.oneagent.sdk.api
    Tracer used to trace in-process-linking.
    +
    IncomingMessageProcessTracer - Interface in com.dynatrace.oneagent.sdk.api
    Interface for processing message tracer.
    IncomingMessageReceiveTracer - Interface in com.dynatrace.oneagent.sdk.api
    Interface for receiving message tracer.
    IncomingRemoteCallTracer - Interface in com.dynatrace.oneagent.sdk.api
    Represents the server side of a remote call.
    IncomingTaggable - Interface in com.dynatrace.oneagent.sdk.api
    Common interface for server-tagging-related methods.
    IncomingWebRequestTracer - Interface in com.dynatrace.oneagent.sdk.api
    Interface for incoming webrequest tracer.
    InProcessLink - Interface in com.dynatrace.oneagent.sdk.api
    Represents link used for in-process-tagging.
    InProcessLinkTracer - Interface in com.dynatrace.oneagent.sdk.api
    Tracer used to trace in-process-linking.

    L

    -
    LoggingCallback - Interface in com.dynatrace.oneagent.sdk.api
    LoggingCallback gets called only inside a OneAgentSDK API call when - an error/warning has occurred.
    +
    LoggingCallback - Interface in com.dynatrace.oneagent.sdk.api
    LoggingCallback gets called only inside a OneAgentSDK API call when an + error/warning has occurred.

    +
    +

    +M

    +
    +
    MessageDestinationType - Enum in com.dynatrace.oneagent.sdk.api.enums
    Enumerates all well-known messaging destination types.
    MessageSystemVendor - Enum in com.dynatrace.oneagent.sdk.api.enums
    Enumerates all well-known messaging systems.
    MessagingSystemInfo - Interface in com.dynatrace.oneagent.sdk.api.infos
    Type returned by OneAgentSDK.createMessagingSystemInfo(String, String, com.dynatrace.oneagent.sdk.api.enums.MessageDestinationType, com.dynatrace.oneagent.sdk.api.enums.ChannelType, String)

    O

    @@ -183,12 +205,18 @@
    OneAgentSDK - Interface in com.dynatrace.oneagent.sdk.api
    Root interface contains provided Agent SDK API calls.
    OneAgentSDKFactory - Class in com.dynatrace.oneagent.sdk
    Entry point for customer application.
    OneAgentSDKFactory() - Constructor for class com.dynatrace.oneagent.sdk.OneAgentSDKFactory
      -
    OutgoingRemoteCallTracer - Interface in com.dynatrace.oneagent.sdk.api
    Represents the client side of a remote call.
    OutgoingTaggable - Interface in com.dynatrace.oneagent.sdk.api
    Common interface for client-tagging-related methods.
    OutgoingWebRequestTracer - Interface in com.dynatrace.oneagent.sdk.api
    Represents client side of an outgoing webrequest.
    +
    OutgoingMessageTracer - Interface in com.dynatrace.oneagent.sdk.api
    Interface for outgoing message tracer.
    OutgoingRemoteCallTracer - Interface in com.dynatrace.oneagent.sdk.api
    Represents the client side of a remote call.
    OutgoingTaggable - Interface in com.dynatrace.oneagent.sdk.api
    Common interface for client-tagging-related methods.
    OutgoingWebRequestTracer - Interface in com.dynatrace.oneagent.sdk.api
    Represents client side of an outgoing webrequest.


    S

    -
    SDKState - Enum in com.dynatrace.oneagent.sdk.api.enums
    Defines the possible states of the SDK.
    setDynatraceByteTag(byte[]) - +
    SDKState - Enum in com.dynatrace.oneagent.sdk.api.enums
    Defines the possible states of the SDK.
    setCorrelationId(String) - +Method in interface com.dynatrace.oneagent.sdk.api.IncomingMessageProcessTracer +
    Adds optional information about a traced message: correlation id used by messaging system. +
    setCorrelationId(String) - +Method in interface com.dynatrace.oneagent.sdk.api.OutgoingMessageTracer +
    Adds optional information about a traced message: correlation id used by messaging system. +
    setDynatraceByteTag(byte[]) - Method in interface com.dynatrace.oneagent.sdk.api.IncomingTaggable
    Same as IncomingTaggable.setDynatraceStringTag(String) but consumes binary representation of tag. @@ -213,6 +241,12 @@
    setStatusCode(int) - Method in interface com.dynatrace.oneagent.sdk.api.OutgoingWebRequestTracer
    Sets the HTTP response status code. +
    setVendorMessageId(String) - +Method in interface com.dynatrace.oneagent.sdk.api.IncomingMessageProcessTracer +
    Adds optional information about a traced message: message id provided by messaging system. +
    setVendorMessageId(String) - +Method in interface com.dynatrace.oneagent.sdk.api.OutgoingMessageTracer +
    Adds optional information about a traced message: message id provided by messaging system.
    start() - Method in interface com.dynatrace.oneagent.sdk.api.Tracer
    starts timing of a node. @@ -221,6 +255,15 @@

    T

    +
    toString() - +Method in enum com.dynatrace.oneagent.sdk.api.enums.MessageSystemVendor +
      +
    traceIncomingMessageProcess(MessagingSystemInfo) - +Method in interface com.dynatrace.oneagent.sdk.api.OneAgentSDK +
    Creates a tracer for processing (consuming) a received message (onMessage). +
    traceIncomingMessageReceive(MessagingSystemInfo) - +Method in interface com.dynatrace.oneagent.sdk.api.OneAgentSDK +
    Creates a tracer for an incoming asynchronous message (blocking receive).
    traceIncomingRemoteCall(String, String, String) - Method in interface com.dynatrace.oneagent.sdk.api.OneAgentSDK
    Traces an incoming remote call. @@ -230,6 +273,9 @@
    traceInProcessLink(InProcessLink) - Method in interface com.dynatrace.oneagent.sdk.api.OneAgentSDK
    Traces the start of in-process-linking. +
    traceOutgoingMessage(MessagingSystemInfo) - +Method in interface com.dynatrace.oneagent.sdk.api.OneAgentSDK +
    Creates a tracer for an outgoing asynchronous message (send).
    traceOutgoingRemoteCall(String, String, String, ChannelType, String) - Method in interface com.dynatrace.oneagent.sdk.api.OneAgentSDK
    Traces an outgoing remote call. @@ -244,6 +290,12 @@
    valueOf(String) - Static method in enum com.dynatrace.oneagent.sdk.api.enums.ChannelType
    Returns the enum constant of this type with the specified name. +
    valueOf(String) - +Static method in enum com.dynatrace.oneagent.sdk.api.enums.MessageDestinationType +
    Returns the enum constant of this type with the specified name. +
    valueOf(String) - +Static method in enum com.dynatrace.oneagent.sdk.api.enums.MessageSystemVendor +
    Returns the enum constant of this type with the specified name.
    valueOf(String) - Static method in enum com.dynatrace.oneagent.sdk.api.enums.SDKState
    Returns the enum constant of this type with the specified name. @@ -251,6 +303,14 @@ Static method in enum com.dynatrace.oneagent.sdk.api.enums.ChannelType
    Returns an array containing the constants of this enum type, in the order they are declared. +
    values() - +Static method in enum com.dynatrace.oneagent.sdk.api.enums.MessageDestinationType +
    Returns an array containing the constants of this enum type, in +the order they are declared. +
    values() - +Static method in enum com.dynatrace.oneagent.sdk.api.enums.MessageSystemVendor +
    Returns an array containing the constants of this enum type, in +the order they are declared.
    values() - Static method in enum com.dynatrace.oneagent.sdk.api.enums.SDKState
    Returns an array containing the constants of this enum type, in @@ -263,9 +323,10 @@
    warn(String) - Method in interface com.dynatrace.oneagent.sdk.api.LoggingCallback
    Just a warning. -
    WebApplicationInfo - Interface in com.dynatrace.oneagent.sdk.api.infos
    Type returned by OneAgentSDK.createWebApplicationInfo(String, String, String)
    +
    WebApplicationInfo - Interface in com.dynatrace.oneagent.sdk.api.infos
    Type returned by + OneAgentSDK.createWebApplicationInfo(String, String, String)

    -A C D E G I L O S T V W +A C D E G I L M O S T V W diff --git a/docs/index.html b/docs/index.html index 33ddefa..883fa39 100644 --- a/docs/index.html +++ b/docs/index.html @@ -2,9 +2,9 @@ - + -sdk 1.4.0 API +sdk 1.5.0 API @@ -80,7 +80,7 @@

    -sdk 1.4.0 API +sdk 1.5.0 API

    diff --git a/docs/overview-tree.html b/docs/overview-tree.html index 69e579d..53c7d0b 100644 --- a/docs/overview-tree.html +++ b/docs/overview-tree.html @@ -2,12 +2,12 @@ - + -Class Hierarchy (sdk 1.4.0 API) +Class Hierarchy (sdk 1.5.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Class Hierarchy (sdk 1.4.0 API)"; + parent.document.title="Class Hierarchy (sdk 1.5.0 API)"; } } @@ -97,17 +97,21 @@


    diff --git a/samples/README.md b/samples/README.md index 9a1aa00..1f8bfe1 100644 --- a/samples/README.md +++ b/samples/README.md @@ -6,6 +6,8 @@ Sample applications showing how to use Dynatrace OneAgent SDK for Java to create - `remotecall`: shows usage of remote call API. Allows you to tag remote calls in the same or between different JVMs. - `in-process-linking`: shows usage of in-process-linking API. Allows you to tag eg. asynchronous execution inside the same process. +- `webrequest`: shows usage of outging- and incoming webrequests. +- `messaging`: shows usage of messaging ## Build and prepare running sample applications @@ -38,5 +40,8 @@ This Application shows how to trace outgoing- and incoming webrequests. To run t - run sample: `mvn exec:exec` -Check your Dynatrace environment for newly created services like that: -![webrequest-service](img/webrequest-service.png) +### Run Messaging sample application +This Application shows how to trace outgoing, receiving and processing of incoming messages. To run this sample you just go into the sample directory and run the sample by typing: + +- run sample: `mvn exec:exec` + diff --git a/samples/messaging/pom.xml b/samples/messaging/pom.xml new file mode 100644 index 0000000..256d4c7 --- /dev/null +++ b/samples/messaging/pom.xml @@ -0,0 +1,84 @@ + + 4.0.0 + + com.dynatrace.oneagent.sdk.samples.messaging + messaging-sample + 1.5.0 + jar + + + + com.dynatrace.oneagent.sdk.java + oneagent-sdk + 1.5.0 + compile + + + + https://github.com/Dynatrace/OneAgent-SDK-Java + Dynatrace OneAgent SDK Java WebRequest sample + + Dynatrace + http://www.dynatrace.com + + + + 1.6 + 1.6 + UTF-8 + UTF-8 + + + + + + + + + org.apache.maven.plugins + maven-jar-plugin + 2.4 + + + + true + com.dynatrace.oneagent.sdk.samples.messaging.MessagingApp + + + + + + org.codehaus.mojo + exec-maven-plugin + 1.6.0 + + + + exec + + + + + java + + ${agent.agentpath} + -classpath + + com.dynatrace.oneagent.sdk.samples.messaging.MessagingApp + + + + + + + \ No newline at end of file diff --git a/samples/messaging/src/main/java/com/dynatrace/oneagent/sdk/samples/messaging/FakedQueueManager.java b/samples/messaging/src/main/java/com/dynatrace/oneagent/sdk/samples/messaging/FakedQueueManager.java new file mode 100644 index 0000000..ada19f4 --- /dev/null +++ b/samples/messaging/src/main/java/com/dynatrace/oneagent/sdk/samples/messaging/FakedQueueManager.java @@ -0,0 +1,59 @@ +package com.dynatrace.oneagent.sdk.samples.messaging; + +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.BlockingQueue; + +public class FakedQueueManager { + + private BlockingQueue queue = new ArrayBlockingQueue(10); + private MessageListener messageListener; + + public FakedQueueManager() { + } + + private class QueueManagerThread extends Thread { + private QueueManagerThread() { + super("QueueManager"); + setDaemon(true); + } + + @Override + public void run() { + while (true) { + Message incomingMessage; + try { + incomingMessage = queue.take(); + messageListener.onMessage(incomingMessage); + } catch (InterruptedException e) { + e.printStackTrace(); + return; + } + } + } + } + + public void registerMessageListener(MessageListener listener) { + this.messageListener = listener; + new QueueManagerThread().start(); + } + + + public void send(String queueName, Message message) { + try { + queue.put(message); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + public Message receive(String queueName) { + try { + return queue.take(); + } catch (InterruptedException e) { + e.printStackTrace(); + return null; + } + } + + +} diff --git a/samples/messaging/src/main/java/com/dynatrace/oneagent/sdk/samples/messaging/Message.java b/samples/messaging/src/main/java/com/dynatrace/oneagent/sdk/samples/messaging/Message.java new file mode 100644 index 0000000..9f0404c --- /dev/null +++ b/samples/messaging/src/main/java/com/dynatrace/oneagent/sdk/samples/messaging/Message.java @@ -0,0 +1,37 @@ +package com.dynatrace.oneagent.sdk.samples.messaging; + +import java.util.HashMap; +import java.util.Map; + +public class Message { + + private Map properties = new HashMap(); + private String vendorMessageId = null; + private String correlationId = null; + + public void addProperty(String propertyName, String propertyValue) { + properties.put(propertyName, propertyValue); + } + + public String getProperty(String propertyName) { + return properties.get(propertyName); + } + + public String getVendorMessageId() { + return vendorMessageId; + } + + public void setVendorMessageId(String vendorMessageId) { + this.vendorMessageId = vendorMessageId; + } + + public String getCorrelationId() { + return correlationId; + } + + public void setCorrelationId(String correlationId) { + this.correlationId = correlationId; + } + + +} diff --git a/samples/messaging/src/main/java/com/dynatrace/oneagent/sdk/samples/messaging/MessageListener.java b/samples/messaging/src/main/java/com/dynatrace/oneagent/sdk/samples/messaging/MessageListener.java new file mode 100644 index 0000000..a00c12e --- /dev/null +++ b/samples/messaging/src/main/java/com/dynatrace/oneagent/sdk/samples/messaging/MessageListener.java @@ -0,0 +1,7 @@ +package com.dynatrace.oneagent.sdk.samples.messaging; + +public interface MessageListener { + + public void onMessage(Message message); + +} diff --git a/samples/messaging/src/main/java/com/dynatrace/oneagent/sdk/samples/messaging/MessagingApp.java b/samples/messaging/src/main/java/com/dynatrace/oneagent/sdk/samples/messaging/MessagingApp.java new file mode 100644 index 0000000..cebecf7 --- /dev/null +++ b/samples/messaging/src/main/java/com/dynatrace/oneagent/sdk/samples/messaging/MessagingApp.java @@ -0,0 +1,153 @@ +package com.dynatrace.oneagent.sdk.samples.messaging; + +import com.dynatrace.oneagent.sdk.OneAgentSDKFactory; +import com.dynatrace.oneagent.sdk.api.IncomingMessageProcessTracer; +import com.dynatrace.oneagent.sdk.api.IncomingMessageReceiveTracer; +import com.dynatrace.oneagent.sdk.api.OneAgentSDK; +import com.dynatrace.oneagent.sdk.api.OutgoingMessageTracer; +import com.dynatrace.oneagent.sdk.api.enums.ChannelType; +import com.dynatrace.oneagent.sdk.api.enums.MessageDestinationType; +import com.dynatrace.oneagent.sdk.api.infos.MessagingSystemInfo; + +/** + * Sample application shows how incoming/outgoing messages should be traced. + * + * @author Alram.Lechner + * + */ +public class MessagingApp { + + private final OneAgentSDK oneAgentSdk; + final FakedQueueManager queueManager; + + static MessagingApp instance; + + + private MessagingApp() { + oneAgentSdk = OneAgentSDKFactory.createInstance(); + oneAgentSdk.setLoggingCallback(new StdErrLoggingCallback()); + switch (oneAgentSdk.getCurrentState()) { + case ACTIVE: + System.out.println("SDK is active and capturing."); + break; + case PERMANENTLY_INACTIVE: + System.err.println( + "SDK is PERMANENTLY_INACTIVE; Probably no OneAgent injected or OneAgent is incompatible with SDK."); + break; + case TEMPORARILY_INACTIVE: + System.err.println( + "SDK is TEMPORARILY_INACTIVE; OneAgent has been deactivated - check OneAgent configuration."); + break; + default: + System.err.println("SDK is in unknown state."); + break; + } + queueManager = new FakedQueueManager(); + instance = this; + } + + public static void main(String args[]) { + System.out.println("*************************************************************"); + System.out.println("** Running messaging sample **"); + System.out.println("*************************************************************"); + try { + MessagingApp app = new MessagingApp(); + + // sending and blocking receive ... + app.sendMessage(); + app.receiveMessage(); + + // or sending and event based receive: + app.registerMessageListener(); + app.sendMessage(); + + System.out.println("sample application stopped. sleeping a while, so OneAgent is able to send data to server ..."); + Thread.sleep(15000 * 3); // we have to wait - so OneAgent is able to send data to server + } catch (Exception e) { + System.err.println("messaging sample failed: " + e.getMessage()); + e.printStackTrace(); + System.exit(-1); + } + } + + private void registerMessageListener() { + queueManager.registerMessageListener(new MessageListener() { + @Override + public void onMessage(Message message) { + MessagingSystemInfo messagingSystemInfo = oneAgentSdk.createMessagingSystemInfo("DynatraceSample", "theQueue", MessageDestinationType.QUEUE, ChannelType.IN_PROCESS, null); + IncomingMessageProcessTracer incomingMessageProcessTracer = oneAgentSdk.traceIncomingMessageProcess(messagingSystemInfo); + // store incoming tag to tracer: + incomingMessageProcessTracer.setDynatraceStringTag(message.getProperty(OneAgentSDK.DYNATRACE_MESSAGE_PROPERTYNAME)); + incomingMessageProcessTracer.setVendorMessageId(message.getVendorMessageId()); + incomingMessageProcessTracer.start(); + try { + // do something with the message ... + System.out.println("Message received: " + message.toString()); + } catch (Exception e) { + incomingMessageProcessTracer.error(e); + } finally { + incomingMessageProcessTracer.end(); + } + } + }); + + } + + private void sendMessage() { + MessagingSystemInfo messagingSystemInfo = oneAgentSdk.createMessagingSystemInfo("DynatraceSample", "theQueue", MessageDestinationType.QUEUE, ChannelType.IN_PROCESS, null); + OutgoingMessageTracer outgoingMessageTracer = oneAgentSdk.traceOutgoingMessage(messagingSystemInfo); + + outgoingMessageTracer.start(); + try { + Message messageToSend = new Message(); + + // add dynatrace tag as property to message ... + messageToSend.addProperty(OneAgentSDK.DYNATRACE_MESSAGE_PROPERTYNAME, outgoingMessageTracer.getDynatraceStringTag()); + + queueManager.send("theQueue", messageToSend); + + // in case queueManager provided messageId: + if (messageToSend.getVendorMessageId() != null) { + outgoingMessageTracer.setVendorMessageId(messageToSend.getVendorMessageId()); + } + + } catch (Exception e) { + outgoingMessageTracer.error(e); + } finally { + outgoingMessageTracer.end(); + } + } + + /** shows how to trace a blocking receive of a message */ + private void receiveMessage() { + MessagingSystemInfo messagingSystemInfo = oneAgentSdk.createMessagingSystemInfo("DynatraceSample", "theQueue", MessageDestinationType.QUEUE, ChannelType.IN_PROCESS, null); + IncomingMessageReceiveTracer incomingMessageReceiveTracer = oneAgentSdk.traceIncomingMessageReceive(messagingSystemInfo); + incomingMessageReceiveTracer.start(); + try { + Message msg = queueManager.receive("theQeue"); + if (msg == null) { + return; // no message received + } + IncomingMessageProcessTracer incomingMessageProcessTracer = oneAgentSdk.traceIncomingMessageProcess(messagingSystemInfo); + // store incoming tag to tracer: + incomingMessageProcessTracer.setDynatraceStringTag(msg.getProperty(OneAgentSDK.DYNATRACE_MESSAGE_PROPERTYNAME)); + incomingMessageProcessTracer.setVendorMessageId(msg.getVendorMessageId()); + incomingMessageProcessTracer.start(); + try { + // do something with the message ... + System.out.println("Message received: " + msg.toString()); + } catch (Exception e) { + incomingMessageProcessTracer.error(e); + } finally { + incomingMessageProcessTracer.end(); + } + + + } catch (Exception e) { + incomingMessageReceiveTracer.error(e); + } finally { + incomingMessageReceiveTracer.end(); + } + } + +} diff --git a/samples/messaging/src/main/java/com/dynatrace/oneagent/sdk/samples/messaging/StdErrLoggingCallback.java b/samples/messaging/src/main/java/com/dynatrace/oneagent/sdk/samples/messaging/StdErrLoggingCallback.java new file mode 100644 index 0000000..256a8c5 --- /dev/null +++ b/samples/messaging/src/main/java/com/dynatrace/oneagent/sdk/samples/messaging/StdErrLoggingCallback.java @@ -0,0 +1,37 @@ +package com.dynatrace.oneagent.sdk.samples.messaging; + +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import com.dynatrace.oneagent.sdk.api.LoggingCallback; + +/** + * Implementation of OneAgent Logging Callback. Just printing output messages to + * std err. + */ +public class StdErrLoggingCallback implements LoggingCallback { + + @Override + public void error(String message) { + System.err.println("[OneAgent SDK ERROR]: " + message); + } + + @Override + public void warn(String message) { + System.err.println("[OneAgent SDK WARNING]: " + message); + } + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingMessageProcessTracer.java b/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingMessageProcessTracer.java new file mode 100644 index 0000000..9a71fe5 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingMessageProcessTracer.java @@ -0,0 +1,40 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.api; + +/** + * Interface for processing message tracer. + * https://github.com/Dynatrace/OneAgent-SDK#messaging + * + * @since 1.5 + */ +public interface IncomingMessageProcessTracer extends IncomingTaggable, Tracer { + + /** + * Adds optional information about a traced message: message id provided by messaging system. + * + * @param vendorMessageId the messageId + */ + public void setVendorMessageId(String vendorMessageId); + + /** + * Adds optional information about a traced message: correlation id used by messaging system. + * + * @param correlationId correlationId + */ + public void setCorrelationId(String correlationId); + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingMessageReceiveTracer.java b/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingMessageReceiveTracer.java new file mode 100644 index 0000000..f89a255 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingMessageReceiveTracer.java @@ -0,0 +1,26 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.api; + +/** + * Interface for receiving message tracer. + * https://github.com/Dynatrace/OneAgent-SDK#messaging + * + * @since 1.5 + */ +public interface IncomingMessageReceiveTracer extends Tracer { + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/OneAgentSDK.java b/src/main/java/com/dynatrace/oneagent/sdk/api/OneAgentSDK.java index 2a09f98..aa46dad 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/OneAgentSDK.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/OneAgentSDK.java @@ -16,7 +16,9 @@ package com.dynatrace.oneagent.sdk.api; import com.dynatrace.oneagent.sdk.api.enums.ChannelType; +import com.dynatrace.oneagent.sdk.api.enums.MessageDestinationType; import com.dynatrace.oneagent.sdk.api.enums.SDKState; +import com.dynatrace.oneagent.sdk.api.infos.MessagingSystemInfo; import com.dynatrace.oneagent.sdk.api.infos.WebApplicationInfo; /** @@ -37,7 +39,12 @@ public interface OneAgentSDK { * request ensures compatibility to Dynatrace built-in sensors. */ public static final String DYNATRACE_HTTP_HEADERNAME = "X-dynaTrace"; - + + /** + * Using this propertyname to transport Dynatrace tag along with the message, ensures compatibility to Dynatrace built-in sensors. + */ + public static final String DYNATRACE_MESSAGE_PROPERTYNAME = "dtdTraceTagInfo"; + // ***** Web Requests (incoming) ***** /** @@ -185,6 +192,55 @@ OutgoingRemoteCallTracer traceOutgoingRemoteCall(String serviceMethod, String se */ void addCustomRequestAttribute(String key, double value); + // ***** Messaging (outgoing & incoming) ***** + + /** + * Initializes a MessagingSystemInfo instance that is required for tracing messages. + * + * @param vendorName one of {@link com.dynatrace.oneagent.sdk.api.enums.MessageSystemVendor} if well known vendor. Custom provided in any other case. + * @param destinationName destination name (e.g. queue name, topic name) + * @param destinationType destination type - see {@link MessageDestinationType}. + * @param channelType communication protocol used + * @param channelEndpoint optional and depending on protocol: + * * for TCP/IP: host name/IP of the server-side (can include port) + * * for UNIX domain sockets: name of domain socket file + * * for named pipes: name of pipe + * @return {@link MessagingSystemInfo} instance to work with + * + * @since 1.5 + */ + MessagingSystemInfo createMessagingSystemInfo(String vendorName, String destinationName, MessageDestinationType destinationType, ChannelType channelType, String channelEndpoint); + + /** + * Creates a tracer for an outgoing asynchronous message (send). + * + * @param messagingSystem information about the messaging system (see createMessagingSystemInfo methods). + * @return {@link OutgoingMessageTracer} to work with + * + * @since 1.5 + */ + OutgoingMessageTracer traceOutgoingMessage(MessagingSystemInfo messagingSystem); + + /** + * Creates a tracer for an incoming asynchronous message (blocking receive). + * + * @param messagingSystem information about the messaging system (see createMessagingSystemInfo methods). + * @return {@link IncomingMessageReceiveTracer} to work with + * + * @since 1.5 + */ + IncomingMessageReceiveTracer traceIncomingMessageReceive(MessagingSystemInfo messagingSystem); + + /** + * Creates a tracer for processing (consuming) a received message (onMessage). + * + * @param messagingSystem information about the messaging system (see createMessagingSystemInfo methods). + * @return {@link IncomingMessageProcessTracer} to work with + * + * @since 1.5 + */ + IncomingMessageProcessTracer traceIncomingMessageProcess(MessagingSystemInfo messagingSystem); + // ***** various ***** /** diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingMessageTracer.java b/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingMessageTracer.java new file mode 100644 index 0000000..d1c0ee1 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingMessageTracer.java @@ -0,0 +1,40 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.api; + +/** + * Interface for outgoing message tracer. + * https://github.com/Dynatrace/OneAgent-SDK#messaging + * + * @since 1.5 + */ +public interface OutgoingMessageTracer extends Tracer, OutgoingTaggable { + + /** + * Adds optional information about a traced message: message id provided by messaging system. + * + * @param vendorMessageId the messageId + */ + public void setVendorMessageId(String vendorMessageId); + + /** + * Adds optional information about a traced message: correlation id used by messaging system. + * + * @param correlationId correlationId + */ + public void setCorrelationId(String correlationId); + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/enums/MessageDestinationType.java b/src/main/java/com/dynatrace/oneagent/sdk/api/enums/MessageDestinationType.java new file mode 100644 index 0000000..d11859b --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/enums/MessageDestinationType.java @@ -0,0 +1,40 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.api.enums; + +import com.dynatrace.oneagent.sdk.api.OneAgentSDK; + +/** + * Enumerates all well-known messaging destination types. See + * {@link OneAgentSDK#createMessagingSystemInfo(String, String, MessageDestinationType, ChannelType, String)} + * + * @since 1.5 + */ +public enum MessageDestinationType { + + QUEUE("Queue"), + TOPIC("Topic"); + + private final String name; + + private MessageDestinationType(String name) { + this.name = name; + } + + public String getName() { + return name; + } +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/enums/MessageSystemVendor.java b/src/main/java/com/dynatrace/oneagent/sdk/api/enums/MessageSystemVendor.java new file mode 100644 index 0000000..cc86d50 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/enums/MessageSystemVendor.java @@ -0,0 +1,50 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.api.enums; + +import com.dynatrace.oneagent.sdk.api.OneAgentSDK; + +/** + * Enumerates all well-known messaging systems. See {@link OneAgentSDK#createMessagingSystemInfo(String, String, MessageDestinationType, ChannelType, String)}. + * Using these constants ensures that services captured by OneAgentSDK are handled the same way as traced via built-in sensors. + */ +public enum MessageSystemVendor { + + HORNETQ("HornetQ"), + ACTIVE_MQ("ActiveMQ"), + RABBIT_MQ("RabbitMQ"), + ARTEMIS("Artemis"), + WEBSPHERE("WebSphere"), + MQSERIES_JMS("MQSeries JMS"), + MQSERIES("MQSeries"), + TIBCO("Tibco"); + + private final String vendorName; + + private MessageSystemVendor(String vendorName) { + this.vendorName = vendorName; + } + + public String getVendorName() { + return vendorName; + } + + @Override + public String toString() { + return vendorName; + } + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/infos/MessagingSystemInfo.java b/src/main/java/com/dynatrace/oneagent/sdk/api/infos/MessagingSystemInfo.java new file mode 100644 index 0000000..adffb5b --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/infos/MessagingSystemInfo.java @@ -0,0 +1,27 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.api.infos; + +import com.dynatrace.oneagent.sdk.api.OneAgentSDK; + +/** + * Type returned by {@link OneAgentSDK#createMessagingSystemInfo(String, String, com.dynatrace.oneagent.sdk.api.enums.MessageDestinationType, com.dynatrace.oneagent.sdk.api.enums.ChannelType, String)} + * + * @since 1.5 + */ +public interface MessagingSystemInfo { + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/OneAgentSDKFactoryImpl.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/OneAgentSDKFactoryImpl.java index 625cb34..bfb9c73 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/OneAgentSDKFactoryImpl.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/OneAgentSDKFactoryImpl.java @@ -30,7 +30,7 @@ public class OneAgentSDKFactoryImpl { * OneAgent), increase oneSdkFix only. */ static final int oneSdkMajor = 1; - static final int oneSdkMinor = 4; + static final int oneSdkMinor = 5; static final int oneSdkFix = 0; /** the only SDK instance (one for every classLoader) */ diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/IncomingMessageProcessTracerNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/IncomingMessageProcessTracerNoop.java new file mode 100644 index 0000000..1938e74 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/IncomingMessageProcessTracerNoop.java @@ -0,0 +1,44 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.impl.noop; + +import com.dynatrace.oneagent.sdk.api.IncomingMessageProcessTracer; + +public class IncomingMessageProcessTracerNoop extends NodeNoop implements IncomingMessageProcessTracer { + + public static final IncomingMessageProcessTracerNoop INSTANCE = new IncomingMessageProcessTracerNoop(); + + private IncomingMessageProcessTracerNoop() { + } + + @Override + public void setDynatraceStringTag(String tag) { + } + + @Override + public void setDynatraceByteTag(byte[] tag) { + } + + @Override + public void setVendorMessageId(String vendorMessageId) { + } + + @Override + public void setCorrelationId(String correlationId) { + } + + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/IncomingMessageReceiveTracerNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/IncomingMessageReceiveTracerNoop.java new file mode 100644 index 0000000..99b98b8 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/IncomingMessageReceiveTracerNoop.java @@ -0,0 +1,27 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.impl.noop; + +import com.dynatrace.oneagent.sdk.api.IncomingMessageReceiveTracer; + +public class IncomingMessageReceiveTracerNoop extends NodeNoop implements IncomingMessageReceiveTracer { + + public static final IncomingMessageReceiveTracerNoop INSTANCE = new IncomingMessageReceiveTracerNoop(); + + private IncomingMessageReceiveTracerNoop() { + } + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/MessagingSystemInfoNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/MessagingSystemInfoNoop.java new file mode 100644 index 0000000..ab3ea75 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/MessagingSystemInfoNoop.java @@ -0,0 +1,28 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.impl.noop; + +import com.dynatrace.oneagent.sdk.api.infos.MessagingSystemInfo; + +public class MessagingSystemInfoNoop implements MessagingSystemInfo { + + public static final MessagingSystemInfoNoop INSTANCE = new MessagingSystemInfoNoop(); + + private MessagingSystemInfoNoop() { + + } + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OneAgentSDKNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OneAgentSDKNoop.java index 06e5380..a804310 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OneAgentSDKNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OneAgentSDKNoop.java @@ -17,15 +17,20 @@ import com.dynatrace.oneagent.sdk.api.InProcessLink; import com.dynatrace.oneagent.sdk.api.InProcessLinkTracer; +import com.dynatrace.oneagent.sdk.api.IncomingMessageProcessTracer; +import com.dynatrace.oneagent.sdk.api.IncomingMessageReceiveTracer; import com.dynatrace.oneagent.sdk.api.IncomingRemoteCallTracer; import com.dynatrace.oneagent.sdk.api.IncomingWebRequestTracer; import com.dynatrace.oneagent.sdk.api.LoggingCallback; import com.dynatrace.oneagent.sdk.api.OneAgentSDK; +import com.dynatrace.oneagent.sdk.api.OutgoingMessageTracer; import com.dynatrace.oneagent.sdk.api.OutgoingRemoteCallTracer; import com.dynatrace.oneagent.sdk.api.OutgoingWebRequestTracer; +import com.dynatrace.oneagent.sdk.api.enums.ChannelType; +import com.dynatrace.oneagent.sdk.api.enums.MessageDestinationType; import com.dynatrace.oneagent.sdk.api.enums.SDKState; +import com.dynatrace.oneagent.sdk.api.infos.MessagingSystemInfo; import com.dynatrace.oneagent.sdk.api.infos.WebApplicationInfo; -import com.dynatrace.oneagent.sdk.api.enums.ChannelType; /** * This class provides an empty (NOOP) implementation of the {@link OneAgentSDK} @@ -98,4 +103,25 @@ public void addCustomRequestAttribute(String key, double value) { public OutgoingWebRequestTracer traceOutgoingWebRequest(String url, String method) { return OutgoingWebRequestTracerNoop.INSTANCE; } + + @Override + public MessagingSystemInfo createMessagingSystemInfo(String vendorName, String destinationName, + MessageDestinationType destinationType, ChannelType channelType, String channelEndpoint) { + return MessagingSystemInfoNoop.INSTANCE; + } + + @Override + public OutgoingMessageTracer traceOutgoingMessage(MessagingSystemInfo messagingSystem) { + return OutgoingMessageTracerNoop.INSTANCE; + } + + @Override + public IncomingMessageReceiveTracer traceIncomingMessageReceive(MessagingSystemInfo messagingSystem) { + return IncomingMessageReceiveTracerNoop.INSTANCE; + } + + @Override + public IncomingMessageProcessTracer traceIncomingMessageProcess(MessagingSystemInfo messagingSystem) { + return IncomingMessageProcessTracerNoop.INSTANCE; + } } diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OutgoingMessageTracerNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OutgoingMessageTracerNoop.java new file mode 100644 index 0000000..24aa263 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OutgoingMessageTracerNoop.java @@ -0,0 +1,62 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.impl.noop; + +import com.dynatrace.oneagent.sdk.api.OutgoingMessageTracer; + +public class OutgoingMessageTracerNoop extends NodeNoop implements OutgoingMessageTracer { + + public static final OutgoingMessageTracerNoop INSTANCE = new OutgoingMessageTracerNoop(); + + private OutgoingMessageTracerNoop() { + } + + @Override + public void start() { + } + + @Override + public void end() { + } + + @Override + public void error(String message) { + } + + @Override + public void error(Throwable throwable) { + } + + @Override + public String getDynatraceStringTag() { + return NO_TAG_STRING; + } + + @Override + public byte[] getDynatraceByteTag() { + return NO_TAG_BLOB; + } + + @Override + public void setVendorMessageId(String vendorMessageId) { + + } + + @Override + public void setCorrelationId(String correlationId) { + } + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/IncomingMessageProcessTracerProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/IncomingMessageProcessTracerProxy.java new file mode 100644 index 0000000..f27e557 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/IncomingMessageProcessTracerProxy.java @@ -0,0 +1,45 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.impl.proxy; + +import com.dynatrace.oneagent.sdk.api.IncomingMessageProcessTracer; + +public class IncomingMessageProcessTracerProxy extends TraceableProxy implements IncomingMessageProcessTracer { + + public IncomingMessageProcessTracerProxy(SDK2AgentInternalApiProxy apiProxy, Object agentObject) { + super(apiProxy, agentObject); + } + + @Override + public void setDynatraceStringTag(String tag) { + apiProxy.incomingTaggable_setDynatraceStringTag(agentsNodeObject, tag); + } + + @Override + public void setDynatraceByteTag(byte[] tag) { + apiProxy.incomingTaggable_setDynatraceByteTag(agentsNodeObject, tag); + } + + @Override + public void setVendorMessageId(String vendorMessageId) { + apiProxy.messageTracer_setVendorMessageId(agentsNodeObject, vendorMessageId); + } + + @Override + public void setCorrelationId(String correlationId) { + apiProxy.messageTracer_setCorrelationId(agentsNodeObject, correlationId); + } +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/IncomingMessageReceiveTracerProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/IncomingMessageReceiveTracerProxy.java new file mode 100644 index 0000000..636b83c --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/IncomingMessageReceiveTracerProxy.java @@ -0,0 +1,26 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.impl.proxy; + +import com.dynatrace.oneagent.sdk.api.IncomingMessageReceiveTracer; + +public class IncomingMessageReceiveTracerProxy extends TraceableProxy implements IncomingMessageReceiveTracer { + + public IncomingMessageReceiveTracerProxy(SDK2AgentInternalApiProxy apiProxy, Object agentObject) { + super(apiProxy, agentObject); + } + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/MessagingSystemInfoImpl.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/MessagingSystemInfoImpl.java new file mode 100644 index 0000000..1561f85 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/MessagingSystemInfoImpl.java @@ -0,0 +1,57 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.impl.proxy; + +import com.dynatrace.oneagent.sdk.api.enums.ChannelType; +import com.dynatrace.oneagent.sdk.api.enums.MessageDestinationType; + +public class MessagingSystemInfoImpl implements com.dynatrace.oneagent.sdk.api.infos.MessagingSystemInfo { + + private final String vendorName; + private final String destinationName; + private final MessageDestinationType destinationType; + private final ChannelType channelType; + private final String channelEndpoint; + + MessagingSystemInfoImpl(String vendorName, String destinationName, MessageDestinationType destinationType, + ChannelType channelType, String channelEndpoint) { + this.vendorName = vendorName; + this.destinationName = destinationName; + this.destinationType = destinationType; + this.channelType = channelType; + this.channelEndpoint = channelEndpoint; + } + + String getVendorName() { + return vendorName; + } + + String getDestinationName() { + return destinationName; + } + + MessageDestinationType getDestinationType() { + return destinationType; + } + + ChannelType getChannelType() { + return channelType; + } + + String getChannelEndpoint() { + return channelEndpoint; + } +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OneAgentSDKProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OneAgentSDKProxy.java index a09d528..81eb93e 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OneAgentSDKProxy.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OneAgentSDKProxy.java @@ -17,19 +17,28 @@ import com.dynatrace.oneagent.sdk.api.InProcessLink; import com.dynatrace.oneagent.sdk.api.InProcessLinkTracer; +import com.dynatrace.oneagent.sdk.api.IncomingMessageProcessTracer; +import com.dynatrace.oneagent.sdk.api.IncomingMessageReceiveTracer; import com.dynatrace.oneagent.sdk.api.IncomingRemoteCallTracer; import com.dynatrace.oneagent.sdk.api.IncomingWebRequestTracer; import com.dynatrace.oneagent.sdk.api.LoggingCallback; import com.dynatrace.oneagent.sdk.api.OneAgentSDK; +import com.dynatrace.oneagent.sdk.api.OutgoingMessageTracer; import com.dynatrace.oneagent.sdk.api.OutgoingRemoteCallTracer; import com.dynatrace.oneagent.sdk.api.OutgoingWebRequestTracer; +import com.dynatrace.oneagent.sdk.api.enums.ChannelType; +import com.dynatrace.oneagent.sdk.api.enums.MessageDestinationType; import com.dynatrace.oneagent.sdk.api.enums.SDKState; +import com.dynatrace.oneagent.sdk.api.infos.MessagingSystemInfo; import com.dynatrace.oneagent.sdk.api.infos.WebApplicationInfo; -import com.dynatrace.oneagent.sdk.api.enums.ChannelType; import com.dynatrace.oneagent.sdk.impl.OneAgentSDKFactoryImpl; import com.dynatrace.oneagent.sdk.impl.noop.InProcessLinkNoop; import com.dynatrace.oneagent.sdk.impl.noop.InProcessLinkTracerNoop; +import com.dynatrace.oneagent.sdk.impl.noop.IncomingMessageProcessTracerNoop; +import com.dynatrace.oneagent.sdk.impl.noop.IncomingMessageReceiveTracerNoop; import com.dynatrace.oneagent.sdk.impl.noop.IncomingWebRequestTracerNoop; +import com.dynatrace.oneagent.sdk.impl.noop.MessagingSystemInfoNoop; +import com.dynatrace.oneagent.sdk.impl.noop.OutgoingMessageTracerNoop; import com.dynatrace.oneagent.sdk.impl.noop.OutgoingWebRequestTracerNoop; import com.dynatrace.oneagent.sdk.impl.noop.RemoteCallClientTracerNoop; import com.dynatrace.oneagent.sdk.impl.noop.RemoteCallServerTracerNoop; @@ -189,4 +198,74 @@ public OutgoingWebRequestTracer traceOutgoingWebRequest(String url, String metho return new OutgoingWebRequestTracerProxy(apiProxy, agentObject); } + @Override + public MessagingSystemInfo createMessagingSystemInfo(String vendorName, String destinationName, + MessageDestinationType destinationType, ChannelType channelType, String channelEndpoint) { + return new MessagingSystemInfoImpl(vendorName, destinationName, destinationType, channelType, channelEndpoint); + } + + @Override + public OutgoingMessageTracer traceOutgoingMessage(MessagingSystemInfo messagingSystem) { + if (messagingSystem instanceof MessagingSystemInfoNoop) { + return OutgoingMessageTracerNoop.INSTANCE; + } else if (!(messagingSystem instanceof MessagingSystemInfoImpl)) { + if (OneAgentSDKFactoryImpl.debugOneAgentSdkStub) { + OneAgentSDKFactoryImpl.logDebug("- invalid MessagingSystemInfo object provided: " + + (messagingSystem == null ? "null" : messagingSystem.getClass().getName())); + } + return OutgoingMessageTracerNoop.INSTANCE; + } + + Object agentObject = apiProxy.oneAgentSDK_traceOutgoingMessage(agentSdkImpl, (MessagingSystemInfoImpl) messagingSystem); + if (agentObject == null) { + if (OneAgentSDKFactoryImpl.debugOneAgentSdkStub) { + OneAgentSDKFactoryImpl.logDebug("- OneAgent failed to provide provide object"); + } + return OutgoingMessageTracerNoop.INSTANCE; + } + return new OutgoingMessageTracerProxy(apiProxy, agentObject); + } + + @Override + public IncomingMessageReceiveTracer traceIncomingMessageReceive(MessagingSystemInfo messagingSystem) { + if (messagingSystem instanceof MessagingSystemInfoNoop) { + return IncomingMessageReceiveTracerNoop.INSTANCE; + } else if (!(messagingSystem instanceof MessagingSystemInfoImpl)) { + if (OneAgentSDKFactoryImpl.debugOneAgentSdkStub) { + OneAgentSDKFactoryImpl.logDebug("- invalid MessagingSystemInfo object provided: " + + (messagingSystem == null ? "null" : messagingSystem.getClass().getName())); + } + return IncomingMessageReceiveTracerNoop.INSTANCE; + } + Object agentObject = apiProxy.oneAgentSDK_traceIncomingMessageReceive(agentSdkImpl, (MessagingSystemInfoImpl) messagingSystem); + if (agentObject == null) { + if (OneAgentSDKFactoryImpl.debugOneAgentSdkStub) { + OneAgentSDKFactoryImpl.logDebug("- OneAgent failed to provide provide object"); + } + return IncomingMessageReceiveTracerNoop.INSTANCE; + } + return new IncomingMessageReceiveTracerProxy(apiProxy, agentObject); + } + + @Override + public IncomingMessageProcessTracer traceIncomingMessageProcess(MessagingSystemInfo messagingSystem) { + if (messagingSystem instanceof MessagingSystemInfoNoop) { + return IncomingMessageProcessTracerNoop.INSTANCE; + } else if (!(messagingSystem instanceof MessagingSystemInfoImpl)) { + if (OneAgentSDKFactoryImpl.debugOneAgentSdkStub) { + OneAgentSDKFactoryImpl.logDebug("- invalid MessagingSystemInfo object provided: " + + (messagingSystem == null ? "null" : messagingSystem.getClass().getName())); + } + return IncomingMessageProcessTracerNoop.INSTANCE; + } + Object agentObject = apiProxy.oneAgentSDK_traceIncomingMessageProcess(agentSdkImpl, (MessagingSystemInfoImpl) messagingSystem); + if (agentObject == null) { + if (OneAgentSDKFactoryImpl.debugOneAgentSdkStub) { + OneAgentSDKFactoryImpl.logDebug("- OneAgent failed to provide provide object"); + } + return IncomingMessageProcessTracerNoop.INSTANCE; + } + return new IncomingMessageProcessTracerProxy(apiProxy, agentObject); + } + } diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OutgoingMessageTracerProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OutgoingMessageTracerProxy.java new file mode 100644 index 0000000..10f1bc8 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OutgoingMessageTracerProxy.java @@ -0,0 +1,46 @@ +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.impl.proxy; + +import com.dynatrace.oneagent.sdk.api.OutgoingMessageTracer; + +public class OutgoingMessageTracerProxy extends TraceableProxy implements OutgoingMessageTracer { + + OutgoingMessageTracerProxy(SDK2AgentInternalApiProxy apiProxy, Object outgoingMessageTracer) { + super(apiProxy, outgoingMessageTracer); + } + + @Override + public String getDynatraceStringTag() { + return apiProxy.outgoingTaggable_getDynatraceStringTag(agentsNodeObject); + } + + @Override + public byte[] getDynatraceByteTag() { + return apiProxy.outgoingTaggable_getDynatraceByteTag(agentsNodeObject); + } + + @Override + public void setVendorMessageId(String vendorMessageId) { + apiProxy.messageTracer_setVendorMessageId(agentsNodeObject, vendorMessageId); + } + + @Override + public void setCorrelationId(String correlationId) { + apiProxy.messageTracer_setCorrelationId(agentsNodeObject, correlationId); + } + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/SDK2AgentInternalApiProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/SDK2AgentInternalApiProxy.java index 7e0f319..4051a83 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/SDK2AgentInternalApiProxy.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/SDK2AgentInternalApiProxy.java @@ -41,6 +41,9 @@ public class SDK2AgentInternalApiProxy { private final Method oneAgentSDK_addCustomRequestAttribute_3; // String, double private final Method oneAgentSDK_traceIncomingWebRequest; private final Method oneAgentSDK_traceOutgoingWebRequest; + private final Method oneAgentSDK_traceIncomingMessageReceive; + private final Method oneAgentSDK_traceIncomingMessageProcess; + private final Method oneAgentSDK_traceOutgoingMessage; private final Method tracer_start; private final Method tracer_end; private final Method tracer_error_1; // string @@ -56,6 +59,8 @@ public class SDK2AgentInternalApiProxy { private final Method webRequestTracer_addRequestHeader; private final Method incomingWebRequestTracer_setRemoteAddress; private final Method incomingWebRequestTracer_addParameter; + private final Method messageTracer_setVendorMessageId; + private final Method messageTracer_setCorrelationId; public SDK2AgentInternalApiProxy(Object agentImpl) throws NoSuchMethodException, SecurityException { this.agentImpl = agentImpl; @@ -80,6 +85,12 @@ public SDK2AgentInternalApiProxy(Object agentImpl) throws NoSuchMethodException, new Class[] { Object.class, String.class, String.class, String.class, String.class, String.class }); oneAgentSDK_traceOutgoingWebRequest = findMethod("oneAgentSDK_traceOutgoingWebRequest", new Class[] { Object.class, String.class, String.class }); + oneAgentSDK_traceIncomingMessageReceive = findMethod("oneAgentSDK_traceIncomingMessageReceive", + new Class[] { Object.class, String.class, String.class, String.class, Integer.TYPE, String.class }); + oneAgentSDK_traceIncomingMessageProcess = findMethod("oneAgentSDK_traceIncomingMessageProcess", + new Class[] { Object.class, String.class, String.class, String.class, Integer.TYPE, String.class }); + oneAgentSDK_traceOutgoingMessage =findMethod("oneAgentSDK_traceOutgoingMessage", + new Class[] { Object.class, String.class, String.class, String.class, Integer.TYPE, String.class }); tracer_start = findMethod("tracer_start", new Class[] { Object.class }); tracer_end = findMethod("tracer_end", new Class[] { Object.class }); tracer_error_1 = findMethod("tracer_error", new Class[] { Object.class, String.class }); @@ -106,6 +117,10 @@ public SDK2AgentInternalApiProxy(Object agentImpl) throws NoSuchMethodException, new Class[] { Object.class, String.class }); incomingWebRequestTracer_addParameter = findMethod("incomingWebRequestTracer_addParameter", new Class[] { Object.class, String.class, String.class }); + messageTracer_setVendorMessageId = findMethod("messageTracer_setVendorMessageId", + new Class[] { Object.class, String.class }); + messageTracer_setCorrelationId = findMethod("messageTracer_setCorrelationId", + new Class[] { Object.class, String.class }); } private Method findMethod(String name, Class... args) throws NoSuchMethodException, SecurityException { @@ -155,6 +170,24 @@ Object oneAgentSDK_traceIncomingWebRequest(Object agentSdkImpl, WebApplicationIn Object oneAgentSDK_traceOutgoingWebRequest(Object agentSdkImpl, String url, String method) { return invoke(oneAgentSDK_traceOutgoingWebRequest, agentSdkImpl, url, method); } + + Object oneAgentSDK_traceOutgoingMessage(Object agentSdkImpl, MessagingSystemInfoImpl messagingSystem) { + return invoke(oneAgentSDK_traceOutgoingMessage, agentSdkImpl, messagingSystem.getVendorName(), + messagingSystem.getDestinationName(), messagingSystem.getDestinationType().getName(), + messagingSystem.getChannelType().getSDKConstant(),messagingSystem.getChannelEndpoint()); + } + + Object oneAgentSDK_traceIncomingMessageReceive(Object agentSdkImpl, MessagingSystemInfoImpl messagingSystem) { + return invoke(oneAgentSDK_traceIncomingMessageReceive, agentSdkImpl, messagingSystem.getVendorName(), + messagingSystem.getDestinationName(), messagingSystem.getDestinationType().getName(), + messagingSystem.getChannelType().getSDKConstant(),messagingSystem.getChannelEndpoint()); + } + + Object oneAgentSDK_traceIncomingMessageProcess(Object agentSdkImpl, MessagingSystemInfoImpl messagingSystem) { + return invoke(oneAgentSDK_traceIncomingMessageProcess, agentSdkImpl, messagingSystem.getVendorName(), + messagingSystem.getDestinationName(), messagingSystem.getDestinationType().getName(), + messagingSystem.getChannelType().getSDKConstant(),messagingSystem.getChannelEndpoint()); + } void oneAgentSDK_setLoggingCallback(Object sdk, Object loggingCallback) { invoke(oneAgentSDK_setLoggingCallback, sdk, loggingCallback); @@ -236,4 +269,12 @@ void incomingWebRequestTracer_addParameter(Object incomingWebRequestTracer, Stri invoke(incomingWebRequestTracer_addParameter, incomingWebRequestTracer, name, value); } + void messageTracer_setVendorMessageId(Object messageTracer, String vendorMessageId) { + invoke(messageTracer_setVendorMessageId, messageTracer, vendorMessageId); + } + + void messageTracer_setCorrelationId(Object messageTracer, String correlationId) { + invoke(messageTracer_setCorrelationId, messageTracer, correlationId); + } + } From 9439bd222646d637b094f2a0790196fe5453074a Mon Sep 17 00:00:00 2001 From: Alram Lechner Date: Wed, 8 May 2019 08:54:31 +0200 Subject: [PATCH 18/36] Add database request (#13) added support to trace database requests --- README.md | 29 +- docs/META-INF/MANIFEST.MF | 2 + docs/_config.yml | 1 - docs/allclasses-frame.html | 12 +- docs/allclasses-noframe.html | 12 +- .../oneagent/sdk/OneAgentSDKFactory.html | 8 +- ...inable.html => DatabaseRequestTracer.html} | 91 +- .../oneagent/sdk/api/InProcessLink.html | 8 +- .../oneagent/sdk/api/InProcessLinkTracer.html | 8 +- .../sdk/api/IncomingMessageProcessTracer.html | 12 +- .../sdk/api/IncomingMessageReceiveTracer.html | 8 +- .../sdk/api/IncomingRemoteCallTracer.html | 8 +- .../oneagent/sdk/api/IncomingTaggable.html | 8 +- .../sdk/api/IncomingWebRequestTracer.html | 8 +- .../oneagent/sdk/api/LoggingCallback.html | 8 +- .../oneagent/sdk/api/OneAgentSDK.html | 68 +- .../sdk/api/OutgoingMessageTracer.html | 8 +- .../sdk/api/OutgoingRemoteCallTracer.html | 8 +- .../oneagent/sdk/api/OutgoingTaggable.html | 8 +- .../sdk/api/OutgoingWebRequestTracer.html | 8 +- .../dynatrace/oneagent/sdk/api/Tracer.html | 10 +- .../oneagent/sdk/api/enums/ChannelType.html | 12 +- .../sdk/api/enums/DatabaseVendor.html | 914 ++++++++++++++++++ .../sdk/api/enums/MessageDestinationType.html | 12 +- .../sdk/api/enums/MessageSystemVendor.html | 12 +- .../oneagent/sdk/api/enums/SDKState.html | 8 +- .../oneagent/sdk/api/enums/package-frame.html | 8 +- .../sdk/api/enums/package-summary.html | 12 +- .../oneagent/sdk/api/enums/package-tree.html | 10 +- .../oneagent/sdk/api/infos/DatabaseInfo.html | 174 ++++ .../sdk/api/infos/MessagingSystemInfo.html | 12 +- .../sdk/api/infos/WebApplicationInfo.html | 8 +- .../oneagent/sdk/api/infos/package-frame.html | 8 +- .../sdk/api/infos/package-summary.html | 12 +- .../oneagent/sdk/api/infos/package-tree.html | 10 +- .../oneagent/sdk/api/package-frame.html | 8 +- .../oneagent/sdk/api/package-summary.html | 12 +- .../oneagent/sdk/api/package-tree.html | 10 +- .../dynatrace/oneagent/sdk/package-frame.html | 6 +- .../oneagent/sdk/package-summary.html | 8 +- .../dynatrace/oneagent/sdk/package-tree.html | 8 +- docs/constant-values.html | 8 +- docs/deprecated-list.html | 8 +- docs/help-doc.html | 8 +- docs/index-all.html | 39 +- docs/index.html | 40 +- docs/overview-frame.html | 6 +- docs/overview-summary.html | 10 +- docs/overview-tree.html | 14 +- samples/README.md | 9 +- samples/database/pom.xml | 84 ++ .../sdk/samples/database/DatabaseApp.java | 85 ++ .../database/StdErrLoggingCallback.java | 37 + .../oneagent/sdk/OneAgentSDKFactory.java | 2 +- .../sdk/api/DatabaseRequestTracer.java | 42 + .../oneagent/sdk/api/InProcessLink.java | 2 +- .../oneagent/sdk/api/InProcessLinkTracer.java | 2 +- .../sdk/api/IncomingMessageProcessTracer.java | 2 +- .../sdk/api/IncomingMessageReceiveTracer.java | 2 +- .../sdk/api/IncomingRemoteCallTracer.java | 2 +- .../oneagent/sdk/api/IncomingTaggable.java | 2 +- .../sdk/api/IncomingWebRequestTracer.java | 2 +- .../oneagent/sdk/api/LoggingCallback.java | 2 +- .../oneagent/sdk/api/OneAgentSDK.java | 31 +- .../sdk/api/OutgoingMessageTracer.java | 2 +- .../sdk/api/OutgoingRemoteCallTracer.java | 2 +- .../oneagent/sdk/api/OutgoingTaggable.java | 2 +- .../sdk/api/OutgoingWebRequestTracer.java | 2 +- .../dynatrace/oneagent/sdk/api/Tracer.java | 2 +- .../oneagent/sdk/api/enums/ChannelType.java | 2 +- .../sdk/api/enums/DatabaseVendor.java | 78 ++ .../sdk/api/enums/MessageDestinationType.java | 2 +- .../sdk/api/enums/MessageSystemVendor.java | 6 +- .../oneagent/sdk/api/enums/SDKState.java | 2 +- .../oneagent/sdk/api/infos/DatabaseInfo.java | 26 + .../sdk/api/infos/MessagingSystemInfo.java | 2 +- .../sdk/api/infos/WebApplicationInfo.java | 2 +- .../sdk/impl/OneAgentSDKFactoryImpl.java | 20 +- .../sdk/impl/SDKInstanceProvider.java | 2 +- .../sdk/impl/noop/DatabaseInfoNoop.java | 22 + .../impl/noop/DatabaseRequestTracerNoop.java | 51 + .../sdk/impl/noop/InProcessLinkNoop.java | 2 +- .../impl/noop/InProcessLinkTracerNoop.java | 2 +- .../IncomingMessageProcessTracerNoop.java | 2 +- .../IncomingMessageReceiveTracerNoop.java | 2 +- .../noop/IncomingWebRequestTracerNoop.java | 2 +- .../impl/noop/MessagingSystemInfoNoop.java | 2 +- .../oneagent/sdk/impl/noop/NodeNoop.java | 2 +- .../sdk/impl/noop/OneAgentSDKNoop.java | 15 +- .../impl/noop/OutgoingMessageTracerNoop.java | 2 +- .../noop/OutgoingWebRequestTracerNoop.java | 2 +- .../impl/noop/RemoteCallClientTracerNoop.java | 2 +- .../impl/noop/RemoteCallServerTracerNoop.java | 2 +- .../sdk/impl/noop/WebApplicationInfoNoop.java | 2 +- .../sdk/impl/proxy/DatabaseInfoImpl.java | 50 + .../proxy/DatabaseRequestTracerProxy.java | 36 + .../sdk/impl/proxy/InProcessLinkImpl.java | 2 +- .../impl/proxy/InProcessLinkTracerProxy.java | 2 +- .../IncomingMessageProcessTracerProxy.java | 2 +- .../IncomingMessageReceiveTracerProxy.java | 2 +- .../impl/proxy/IncomingWebRequestProxy.java | 2 +- .../impl/proxy/MessagingSystemInfoImpl.java | 2 +- .../sdk/impl/proxy/OneAgentSDKProxy.java | 34 +- .../proxy/OutgoingMessageTracerProxy.java | 2 +- .../proxy/OutgoingWebRequestTracerProxy.java | 2 +- .../sdk/impl/proxy/RemoteCallClientProxy.java | 2 +- .../sdk/impl/proxy/RemoteCallServerProxy.java | 2 +- .../impl/proxy/SDK2AgentInternalApiProxy.java | 37 +- .../sdk/impl/proxy/TraceableProxy.java | 2 +- .../impl/proxy/WebApplicationInfoImpl.java | 2 +- .../oneagent/sdk/impl/proxy/package-info.java | 2 +- 111 files changed, 2188 insertions(+), 295 deletions(-) create mode 100644 docs/META-INF/MANIFEST.MF delete mode 100644 docs/_config.yml rename docs/com/dynatrace/oneagent/sdk/api/{Joinable.html => DatabaseRequestTracer.html} (64%) create mode 100644 docs/com/dynatrace/oneagent/sdk/api/enums/DatabaseVendor.html create mode 100644 docs/com/dynatrace/oneagent/sdk/api/infos/DatabaseInfo.html create mode 100644 samples/database/pom.xml create mode 100644 samples/database/src/main/java/com/dynatrace/oneagent/sdk/samples/database/DatabaseApp.java create mode 100644 samples/database/src/main/java/com/dynatrace/oneagent/sdk/samples/database/StdErrLoggingCallback.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/api/DatabaseRequestTracer.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/api/enums/DatabaseVendor.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/api/infos/DatabaseInfo.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/impl/noop/DatabaseInfoNoop.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/impl/noop/DatabaseRequestTracerNoop.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/DatabaseInfoImpl.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/DatabaseRequestTracerProxy.java diff --git a/README.md b/README.md index 8ef62dd..411d49f 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,7 @@ This is the official Java implementation of the [Dynatrace OneAgent SDK](https:/ * [Trace incoming web requests](#inwebrequests) * [Trace outgoing web requests](#outwebrequests) * [Trace messaging](#messaging) + * [Trace SQL database requests](#databaseRequest) * [Further reading](#furtherreading) * [Help & Support](#help) * [Release notes](#releasenotes) @@ -46,6 +47,7 @@ This is the official Java implementation of the [Dynatrace OneAgent SDK](https:/ |OneAgent SDK for Java|Required OneAgent version| |:--------------------|:------------------------| +|1.7.0 |>=1.167 | |1.6.0 |>=1.161 | |1.4.0 |>=1.151 | |1.3.0 |>=1.149 | @@ -65,7 +67,7 @@ If you want to integrate the OneAgent SDK into your application, just add the fo com.dynatrace.oneagent.sdk.java oneagent-sdk - 1.6.0 + 1.7.0 compile @@ -145,6 +147,7 @@ A more detailed specification of the features can be found in [Dynatrace OneAgen |Feature |Required OneAgent SDK for Java version| |:----------------------------------------------|:-------------------------------------| +|Trace database requests |>=1.7.0 | |Trace messaging |>=1.6.0 | |Outgoing webrequests |>=1.4.0 | |Incoming webrequests |>=1.3.0 | @@ -430,6 +433,29 @@ public void onMessage(Message message) { } } ``` + + +### Trace SQL database requests + +A SQL database request is traced by calling `traceSqlDatabaseRequest`. For details about usage see the [OneAgentSDK specification](https://github.com/Dynatrace/OneAgent-SDK#database) + +```java +String sql = "SELECT * FROM transformationdata WHERE transformation_id = " + id; + +DatabaseInfo databaseInfo = oneAgentSdk.createDatabaseInfo("TransformationDb", DatabaseVendor.FIREBIRD.getVendorName(), ChannelType.TCP_IP, "db-serv01.acme.com:2323"); + +DatabaseRequestTracer databaseTracer = oneAgentSdk.traceSqlDatabaseRequest(databaseInfo, sql); +databaseTracer.start(); +try { + Result result = executeTheDatabaseCall(sql); + databaseTracer.setReturnedRowCount(result.getRows().getLength()); +} catch (InterruptedException e) { + databaseTracer.error(e); + // handle or rethrow +} finally { + databaseTracer.end(); +} +``` @@ -470,6 +496,7 @@ see also https://github.com/Dynatrace/OneAgent-SDK-for-Java/releases |Version|Description |Links | |:------|:-------------------------------------------|:----------------------------------------| +|1.7.0 |Added support for database requests |[binary](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.7.0/oneagent-sdk-1.7.0.jar) [source](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.7.0/oneagent-sdk-1.7.0-sources.jar) [javadoc](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.7.0/oneagent-sdk-1.7.0-javadoc.jar)| |1.6.0 |Added support for messaging |[binary](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.6.0/oneagent-sdk-1.6.0.jar) [source](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.6.0/oneagent-sdk-1.6.0-sources.jar) [javadoc](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.6.0/oneagent-sdk-1.6.0-javadoc.jar)| |1.4.0 |Added support for outgoing webrequests |[binary](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.4.0/oneagent-sdk-1.4.0.jar) [source](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.4.0/oneagent-sdk-1.4.0-sources.jar) [javadoc](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.4.0/oneagent-sdk-1.4.0-javadoc.jar)| |1.3.0 |Added support for incoming webrequests |[binary](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.3.0/oneagent-sdk-1.3.0.jar) [source](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.3.0/oneagent-sdk-1.3.0-sources.jar) [javadoc](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.3.0/oneagent-sdk-1.3.0-javadoc.jar)| diff --git a/docs/META-INF/MANIFEST.MF b/docs/META-INF/MANIFEST.MF new file mode 100644 index 0000000..59499bc --- /dev/null +++ b/docs/META-INF/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 + diff --git a/docs/_config.yml b/docs/_config.yml deleted file mode 100644 index c419263..0000000 --- a/docs/_config.yml +++ /dev/null @@ -1 +0,0 @@ -theme: jekyll-theme-cayman \ No newline at end of file diff --git a/docs/allclasses-frame.html b/docs/allclasses-frame.html index bac2412..00b291d 100644 --- a/docs/allclasses-frame.html +++ b/docs/allclasses-frame.html @@ -2,12 +2,12 @@ - + -All Classes (sdk 1.5.0 API) +All Classes (sdk 1.7.0 API) - + @@ -23,6 +23,12 @@ ChannelType
    +DatabaseInfo +
    +DatabaseRequestTracer +
    +DatabaseVendor +
    IncomingMessageProcessTracer
    IncomingMessageReceiveTracer diff --git a/docs/allclasses-noframe.html b/docs/allclasses-noframe.html index a7b8523..a862d7d 100644 --- a/docs/allclasses-noframe.html +++ b/docs/allclasses-noframe.html @@ -2,12 +2,12 @@ - + -All Classes (sdk 1.5.0 API) +All Classes (sdk 1.7.0 API) - + @@ -23,6 +23,12 @@ ChannelType
    +DatabaseInfo +
    +DatabaseRequestTracer +
    +DatabaseVendor +
    IncomingMessageProcessTracer
    IncomingMessageReceiveTracer diff --git a/docs/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.html b/docs/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.html index aa3faab..d23c2c9 100644 --- a/docs/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.html +++ b/docs/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.html @@ -2,12 +2,12 @@ - + -OneAgentSDKFactory (sdk 1.5.0 API) +OneAgentSDKFactory (sdk 1.7.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="OneAgentSDKFactory (sdk 1.5.0 API)"; + parent.document.title="OneAgentSDKFactory (sdk 1.7.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/Joinable.html b/docs/com/dynatrace/oneagent/sdk/api/DatabaseRequestTracer.html similarity index 64% rename from docs/com/dynatrace/oneagent/sdk/api/Joinable.html rename to docs/com/dynatrace/oneagent/sdk/api/DatabaseRequestTracer.html index e4fe618..a5be256 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/Joinable.html +++ b/docs/com/dynatrace/oneagent/sdk/api/DatabaseRequestTracer.html @@ -2,12 +2,12 @@ - + -Joinable (sdk 1.5.0 API) +DatabaseRequestTracer (sdk 1.7.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Joinable (sdk 1.5.0 API)"; + parent.document.title="DatabaseRequestTracer (sdk 1.7.0 API)"; } } @@ -54,11 +54,11 @@ PREV CLASS  - NEXT CLASS + PREV CLASS  + NEXT CLASS
    - FRAMES   - NO FRAMES   + FRAMES   + NO FRAMES     diff --git a/docs/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.html b/docs/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.html index 4c3fc76..fabafb4 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.html +++ b/docs/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.html @@ -2,12 +2,12 @@ - + -InProcessLinkTracer (sdk 1.5.0 API) +InProcessLinkTracer (sdk 1.7.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="InProcessLinkTracer (sdk 1.5.0 API)"; + parent.document.title="InProcessLinkTracer (sdk 1.7.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/IncomingMessageProcessTracer.html b/docs/com/dynatrace/oneagent/sdk/api/IncomingMessageProcessTracer.html index 3bef0da..d505dcb 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/IncomingMessageProcessTracer.html +++ b/docs/com/dynatrace/oneagent/sdk/api/IncomingMessageProcessTracer.html @@ -2,12 +2,12 @@ - + -IncomingMessageProcessTracer (sdk 1.5.0 API) +IncomingMessageProcessTracer (sdk 1.7.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="IncomingMessageProcessTracer (sdk 1.5.0 API)"; + parent.document.title="IncomingMessageProcessTracer (sdk 1.7.0 API)"; } } @@ -54,7 +54,7 @@ - PREV CLASS  + PREV CLASS   NEXT CLASS FRAMES   @@ -228,7 +228,7 @@

    - PREV CLASS  + PREV CLASS   NEXT CLASS FRAMES   diff --git a/docs/com/dynatrace/oneagent/sdk/api/IncomingMessageReceiveTracer.html b/docs/com/dynatrace/oneagent/sdk/api/IncomingMessageReceiveTracer.html index 455b39b..81da10c 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/IncomingMessageReceiveTracer.html +++ b/docs/com/dynatrace/oneagent/sdk/api/IncomingMessageReceiveTracer.html @@ -2,12 +2,12 @@ - + -IncomingMessageReceiveTracer (sdk 1.5.0 API) +IncomingMessageReceiveTracer (sdk 1.7.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="IncomingMessageReceiveTracer (sdk 1.5.0 API)"; + parent.document.title="IncomingMessageReceiveTracer (sdk 1.7.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.html b/docs/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.html index 85f0a00..9f85780 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.html +++ b/docs/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.html @@ -2,12 +2,12 @@ - + -IncomingRemoteCallTracer (sdk 1.5.0 API) +IncomingRemoteCallTracer (sdk 1.7.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="IncomingRemoteCallTracer (sdk 1.5.0 API)"; + parent.document.title="IncomingRemoteCallTracer (sdk 1.7.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/IncomingTaggable.html b/docs/com/dynatrace/oneagent/sdk/api/IncomingTaggable.html index a07fcfd..bb8054e 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/IncomingTaggable.html +++ b/docs/com/dynatrace/oneagent/sdk/api/IncomingTaggable.html @@ -2,12 +2,12 @@ - + -IncomingTaggable (sdk 1.5.0 API) +IncomingTaggable (sdk 1.7.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="IncomingTaggable (sdk 1.5.0 API)"; + parent.document.title="IncomingTaggable (sdk 1.7.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/IncomingWebRequestTracer.html b/docs/com/dynatrace/oneagent/sdk/api/IncomingWebRequestTracer.html index e9ac10e..403053d 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/IncomingWebRequestTracer.html +++ b/docs/com/dynatrace/oneagent/sdk/api/IncomingWebRequestTracer.html @@ -2,12 +2,12 @@ - + -IncomingWebRequestTracer (sdk 1.5.0 API) +IncomingWebRequestTracer (sdk 1.7.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="IncomingWebRequestTracer (sdk 1.5.0 API)"; + parent.document.title="IncomingWebRequestTracer (sdk 1.7.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/LoggingCallback.html b/docs/com/dynatrace/oneagent/sdk/api/LoggingCallback.html index e3a9be5..550f017 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/LoggingCallback.html +++ b/docs/com/dynatrace/oneagent/sdk/api/LoggingCallback.html @@ -2,12 +2,12 @@ - + -LoggingCallback (sdk 1.5.0 API) +LoggingCallback (sdk 1.7.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="LoggingCallback (sdk 1.5.0 API)"; + parent.document.title="LoggingCallback (sdk 1.7.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/OneAgentSDK.html b/docs/com/dynatrace/oneagent/sdk/api/OneAgentSDK.html index dcd0d86..4ec5d7f 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/OneAgentSDK.html +++ b/docs/com/dynatrace/oneagent/sdk/api/OneAgentSDK.html @@ -2,12 +2,12 @@ - + -OneAgentSDK (sdk 1.5.0 API) +OneAgentSDK (sdk 1.7.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="OneAgentSDK (sdk 1.5.0 API)"; + parent.document.title="OneAgentSDK (sdk 1.7.0 API)"; } } @@ -177,6 +177,17 @@

    + DatabaseInfo +createDatabaseInfo(java.lang.String name, + java.lang.String vendor, + ChannelType channelType, + java.lang.String channelEndpoint) + +
    +          Initializes a DatabaseInfo instance that is required for tracing database requests. + + +  InProcessLink createInProcessLink() @@ -295,6 +306,15 @@


              Traces an outgoing web request. + + + DatabaseRequestTracer +traceSqlDatabaseRequest(DatabaseInfo databaseInfo, + java.lang.String statement) + +
    +          Creates a tracer for tracing outgoing SQL database requests. +  

    @@ -343,6 +363,46 @@

    +

    +createDatabaseInfo

    +
    +DatabaseInfo createDatabaseInfo(java.lang.String name,
    +                                java.lang.String vendor,
    +                                ChannelType channelType,
    +                                java.lang.String channelEndpoint)
    +
    +
    Initializes a DatabaseInfo instance that is required for tracing database requests. +

    +

    +
    Parameters:
    name - name of the database
    vendor - database vendor name (e.g. Oracle, MySQL, ...), can be a user defined name + If possible use a constant defined in DatabaseVendor
    channelType - communication protocol used to communicate with the database.
    channelEndpoint - this represents the communication endpoint for the database. This information allows Dynatrace to tie the database requests to a specific process or cloud service. It is optional. + * for TCP/IP: host name/IP of the server-side (can include port in the form of "host:port") + * for UNIX domain sockets: name of domain socket file + * for named pipes: name of pipe +
    Returns:
    DatabaseInfo instance to work with
    Since:
    +
    1.7.0
    +
    +
    +
    +
    + +

    +traceSqlDatabaseRequest

    +
    +DatabaseRequestTracer traceSqlDatabaseRequest(DatabaseInfo databaseInfo,
    +                                              java.lang.String statement)
    +
    +
    Creates a tracer for tracing outgoing SQL database requests. +

    +

    +
    Parameters:
    databaseInfo - information about database
    statement - database SQL statement +
    Returns:
    DatabaseRequestTracer to work with
    Since:
    +
    1.7.0
    +
    +
    +
    +
    +

    createWebApplicationInfo

    diff --git a/docs/com/dynatrace/oneagent/sdk/api/OutgoingMessageTracer.html b/docs/com/dynatrace/oneagent/sdk/api/OutgoingMessageTracer.html
    index 49f0efe..40e1488 100644
    --- a/docs/com/dynatrace/oneagent/sdk/api/OutgoingMessageTracer.html
    +++ b/docs/com/dynatrace/oneagent/sdk/api/OutgoingMessageTracer.html
    @@ -2,12 +2,12 @@
     
     
     
    -
    +
     
    -OutgoingMessageTracer (sdk 1.5.0 API)
    +OutgoingMessageTracer (sdk 1.7.0 API)
     
     
    -
    +
     
     
     
    @@ -15,7 +15,7 @@
     function windowTitle()
     {
         if (location.href.indexOf('is-external=true') == -1) {
    -        parent.document.title="OutgoingMessageTracer (sdk 1.5.0 API)";
    +        parent.document.title="OutgoingMessageTracer (sdk 1.7.0 API)";
         }
     }
     
    diff --git a/docs/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.html b/docs/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.html
    index e069f7c..1b84eca 100644
    --- a/docs/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.html
    +++ b/docs/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.html
    @@ -2,12 +2,12 @@
     
     
     
    -
    +
     
    -OutgoingRemoteCallTracer (sdk 1.5.0 API)
    +OutgoingRemoteCallTracer (sdk 1.7.0 API)
     
     
    -
    +
     
     
     
    @@ -15,7 +15,7 @@
     function windowTitle()
     {
         if (location.href.indexOf('is-external=true') == -1) {
    -        parent.document.title="OutgoingRemoteCallTracer (sdk 1.5.0 API)";
    +        parent.document.title="OutgoingRemoteCallTracer (sdk 1.7.0 API)";
         }
     }
     
    diff --git a/docs/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.html b/docs/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.html
    index 6b0d52d..154050d 100644
    --- a/docs/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.html
    +++ b/docs/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.html
    @@ -2,12 +2,12 @@
     
     
     
    -
    +
     
    -OutgoingTaggable (sdk 1.5.0 API)
    +OutgoingTaggable (sdk 1.7.0 API)
     
     
    -
    +
     
     
     
    @@ -15,7 +15,7 @@
     function windowTitle()
     {
         if (location.href.indexOf('is-external=true') == -1) {
    -        parent.document.title="OutgoingTaggable (sdk 1.5.0 API)";
    +        parent.document.title="OutgoingTaggable (sdk 1.7.0 API)";
         }
     }
     
    diff --git a/docs/com/dynatrace/oneagent/sdk/api/OutgoingWebRequestTracer.html b/docs/com/dynatrace/oneagent/sdk/api/OutgoingWebRequestTracer.html
    index f121047..5aebe32 100644
    --- a/docs/com/dynatrace/oneagent/sdk/api/OutgoingWebRequestTracer.html
    +++ b/docs/com/dynatrace/oneagent/sdk/api/OutgoingWebRequestTracer.html
    @@ -2,12 +2,12 @@
     
     
     
    -
    +
     
    -OutgoingWebRequestTracer (sdk 1.5.0 API)
    +OutgoingWebRequestTracer (sdk 1.7.0 API)
     
     
    -
    +
     
     
     
    @@ -15,7 +15,7 @@
     function windowTitle()
     {
         if (location.href.indexOf('is-external=true') == -1) {
    -        parent.document.title="OutgoingWebRequestTracer (sdk 1.5.0 API)";
    +        parent.document.title="OutgoingWebRequestTracer (sdk 1.7.0 API)";
         }
     }
     
    diff --git a/docs/com/dynatrace/oneagent/sdk/api/Tracer.html b/docs/com/dynatrace/oneagent/sdk/api/Tracer.html
    index 6ed5a88..622a0ad 100644
    --- a/docs/com/dynatrace/oneagent/sdk/api/Tracer.html
    +++ b/docs/com/dynatrace/oneagent/sdk/api/Tracer.html
    @@ -2,12 +2,12 @@
     
     
     
    -
    +
     
    -Tracer (sdk 1.5.0 API)
    +Tracer (sdk 1.7.0 API)
     
     
    -
    +
     
     
     
    @@ -15,7 +15,7 @@
     function windowTitle()
     {
         if (location.href.indexOf('is-external=true') == -1) {
    -        parent.document.title="Tracer (sdk 1.5.0 API)";
    +        parent.document.title="Tracer (sdk 1.7.0 API)";
         }
     }
     
    @@ -91,7 +91,7 @@ 


    Interface Tracer

    -
    All Known Subinterfaces:
    IncomingMessageProcessTracer, IncomingMessageReceiveTracer, IncomingRemoteCallTracer, IncomingWebRequestTracer, InProcessLinkTracer, OutgoingMessageTracer, OutgoingRemoteCallTracer, OutgoingWebRequestTracer
    +
    All Known Subinterfaces:
    DatabaseRequestTracer, IncomingMessageProcessTracer, IncomingMessageReceiveTracer, IncomingRemoteCallTracer, IncomingWebRequestTracer, InProcessLinkTracer, OutgoingMessageTracer, OutgoingRemoteCallTracer, OutgoingWebRequestTracer

    diff --git a/docs/com/dynatrace/oneagent/sdk/api/enums/ChannelType.html b/docs/com/dynatrace/oneagent/sdk/api/enums/ChannelType.html index d5298ff..a52851d 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/enums/ChannelType.html +++ b/docs/com/dynatrace/oneagent/sdk/api/enums/ChannelType.html @@ -2,12 +2,12 @@ - + -ChannelType (sdk 1.5.0 API) +ChannelType (sdk 1.7.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="ChannelType (sdk 1.5.0 API)"; + parent.document.title="ChannelType (sdk 1.7.0 API)"; } } @@ -55,7 +55,7 @@  PREV CLASS  - NEXT CLASSNEXT CLASS FRAMES    NO FRAMES   @@ -357,7 +357,7 @@

     PREV CLASS  - NEXT CLASSNEXT CLASS FRAMES    NO FRAMES   diff --git a/docs/com/dynatrace/oneagent/sdk/api/enums/DatabaseVendor.html b/docs/com/dynatrace/oneagent/sdk/api/enums/DatabaseVendor.html new file mode 100644 index 0000000..7043de7 --- /dev/null +++ b/docs/com/dynatrace/oneagent/sdk/api/enums/DatabaseVendor.html @@ -0,0 +1,914 @@ + + + + + + +DatabaseVendor (sdk 1.7.0 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +com.dynatrace.oneagent.sdk.api.enums +
    +Enum DatabaseVendor

    +
    +java.lang.Object
    +  extended by java.lang.Enum<DatabaseVendor>
    +      extended by com.dynatrace.oneagent.sdk.api.enums.DatabaseVendor
    +
    +
    +
    All Implemented Interfaces:
    java.io.Serializable, java.lang.Comparable<DatabaseVendor>
    +
    +
    +
    +
    public enum DatabaseVendor
    extends java.lang.Enum<DatabaseVendor>
    +

    + +

    +Enumerates all well-known database vendors. See OneAgentSDK.createDatabaseInfo(String, String, ChannelType, String). + Using these constants ensures that services captured by OneAgentSDK are handled the same way as traced via built-in sensors. +

    + +

    +

    +
    Since:
    +
    1.7.0
    +
    +
    + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Enum Constant Summary
    ADABAS + +
    +           
    APACHE_HIVE + +
    +           
    CACHE + +
    +           
    CASSANDRA + +
    +           
    CLOUDSCAPE + +
    +           
    COLDFUSION_IMQ + +
    +           
    COUCHBASE + +
    +           
    DB2 + +
    +           
    DERBY_CLIENT + +
    +           
    DERBY_EMBEDDED + +
    +           
    ENTERPRISE_DB + +
    +           
    FILEMAKER + +
    +           
    FIREBIRD + +
    +           
    FIRST_SQL + +
    +           
    H2 + +
    +           
    HANADB + +
    +           
    HSQLDB + +
    +           
    INFORMIX + +
    +           
    INGRES + +
    +           
    INSTANT_DB + +
    +           
    INTERBASE + +
    +           
    MARIADB + +
    +           
    MAXDB + +
    +           
    MYSQL + +
    +           
    NETEZZA + +
    +           
    ORACLE + +
    +           
    PERVASIVE + +
    +           
    POINTBASE + +
    +           
    POSTGRESQL + +
    +           
    PROGRESS + +
    +           
    REDSHIFT + +
    +           
    SQLITE + +
    +           
    SQLSERVER + +
    +           
    SYBASE + +
    +           
    TERADATA + +
    +           
    VERTICA + +
    +           
    +  + + + + + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + java.lang.StringgetVendorName() + +
    +           
    + java.lang.StringtoString() + +
    +           
    +static DatabaseVendorvalueOf(java.lang.String name) + +
    +          Returns the enum constant of this type with the specified name.
    +static DatabaseVendor[]values() + +
    +          Returns an array containing the constants of this enum type, in +the order they are declared.
    + + + + + + + +
    Methods inherited from class java.lang.Enum
    clone, compareTo, equals, finalize, getDeclaringClass, hashCode, name, ordinal, valueOf
    + + + + + + + +
    Methods inherited from class java.lang.Object
    getClass, notify, notifyAll, wait, wait, wait
    +  +

    + + + + + + + + +
    +Enum Constant Detail
    + +

    +APACHE_HIVE

    +
    +public static final DatabaseVendor APACHE_HIVE
    +
    +
    +
    +
    +
    + +

    +CLOUDSCAPE

    +
    +public static final DatabaseVendor CLOUDSCAPE
    +
    +
    +
    +
    +
    + +

    +HSQLDB

    +
    +public static final DatabaseVendor HSQLDB
    +
    +
    +
    +
    +
    + +

    +PROGRESS

    +
    +public static final DatabaseVendor PROGRESS
    +
    +
    +
    +
    +
    + +

    +MAXDB

    +
    +public static final DatabaseVendor MAXDB
    +
    +
    +
    +
    +
    + +

    +HANADB

    +
    +public static final DatabaseVendor HANADB
    +
    +
    +
    +
    +
    + +

    +INGRES

    +
    +public static final DatabaseVendor INGRES
    +
    +
    +
    +
    +
    + +

    +FIRST_SQL

    +
    +public static final DatabaseVendor FIRST_SQL
    +
    +
    +
    +
    +
    + +

    +ENTERPRISE_DB

    +
    +public static final DatabaseVendor ENTERPRISE_DB
    +
    +
    +
    +
    +
    + +

    +CACHE

    +
    +public static final DatabaseVendor CACHE
    +
    +
    +
    +
    +
    + +

    +ADABAS

    +
    +public static final DatabaseVendor ADABAS
    +
    +
    +
    +
    +
    + +

    +FIREBIRD

    +
    +public static final DatabaseVendor FIREBIRD
    +
    +
    +
    +
    +
    + +

    +DB2

    +
    +public static final DatabaseVendor DB2
    +
    +
    +
    +
    +
    + +

    +DERBY_CLIENT

    +
    +public static final DatabaseVendor DERBY_CLIENT
    +
    +
    +
    +
    +
    + +

    +DERBY_EMBEDDED

    +
    +public static final DatabaseVendor DERBY_EMBEDDED
    +
    +
    +
    +
    +
    + +

    +FILEMAKER

    +
    +public static final DatabaseVendor FILEMAKER
    +
    +
    +
    +
    +
    + +

    +INFORMIX

    +
    +public static final DatabaseVendor INFORMIX
    +
    +
    +
    +
    +
    + +

    +INSTANT_DB

    +
    +public static final DatabaseVendor INSTANT_DB
    +
    +
    +
    +
    +
    + +

    +INTERBASE

    +
    +public static final DatabaseVendor INTERBASE
    +
    +
    +
    +
    +
    + +

    +MYSQL

    +
    +public static final DatabaseVendor MYSQL
    +
    +
    +
    +
    +
    + +

    +MARIADB

    +
    +public static final DatabaseVendor MARIADB
    +
    +
    +
    +
    +
    + +

    +NETEZZA

    +
    +public static final DatabaseVendor NETEZZA
    +
    +
    +
    +
    +
    + +

    +ORACLE

    +
    +public static final DatabaseVendor ORACLE
    +
    +
    +
    +
    +
    + +

    +PERVASIVE

    +
    +public static final DatabaseVendor PERVASIVE
    +
    +
    +
    +
    +
    + +

    +POINTBASE

    +
    +public static final DatabaseVendor POINTBASE
    +
    +
    +
    +
    +
    + +

    +POSTGRESQL

    +
    +public static final DatabaseVendor POSTGRESQL
    +
    +
    +
    +
    +
    + +

    +SQLSERVER

    +
    +public static final DatabaseVendor SQLSERVER
    +
    +
    +
    +
    +
    + +

    +SQLITE

    +
    +public static final DatabaseVendor SQLITE
    +
    +
    +
    +
    +
    + +

    +SYBASE

    +
    +public static final DatabaseVendor SYBASE
    +
    +
    +
    +
    +
    + +

    +TERADATA

    +
    +public static final DatabaseVendor TERADATA
    +
    +
    +
    +
    +
    + +

    +VERTICA

    +
    +public static final DatabaseVendor VERTICA
    +
    +
    +
    +
    +
    + +

    +CASSANDRA

    +
    +public static final DatabaseVendor CASSANDRA
    +
    +
    +
    +
    +
    + +

    +H2

    +
    +public static final DatabaseVendor H2
    +
    +
    +
    +
    +
    + +

    +COLDFUSION_IMQ

    +
    +public static final DatabaseVendor COLDFUSION_IMQ
    +
    +
    +
    +
    +
    + +

    +REDSHIFT

    +
    +public static final DatabaseVendor REDSHIFT
    +
    +
    +
    +
    +
    + +

    +COUCHBASE

    +
    +public static final DatabaseVendor COUCHBASE
    +
    +
    +
    +
    + + + + + + + + +
    +Method Detail
    + +

    +values

    +
    +public static DatabaseVendor[] values()
    +
    +
    Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
    +for (DatabaseVendor c : DatabaseVendor.values())
    +    System.out.println(c);
    +
    +

    +

    + +
    Returns:
    an array containing the constants of this enum type, in +the order they are declared
    +
    +
    +
    + +

    +valueOf

    +
    +public static DatabaseVendor valueOf(java.lang.String name)
    +
    +
    Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.) +

    +

    +
    Parameters:
    name - the name of the enum constant to be returned. +
    Returns:
    the enum constant with the specified name +
    Throws: +
    java.lang.IllegalArgumentException - if this enum type has no constant +with the specified name +
    java.lang.NullPointerException - if the argument is null
    +
    +
    +
    + +

    +getVendorName

    +
    +public java.lang.String getVendorName()
    +
    +
    +
    +
    +
    +
    + +

    +toString

    +
    +public java.lang.String toString()
    +
    +
    +
    Overrides:
    toString in class java.lang.Enum<DatabaseVendor>
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + + + diff --git a/docs/com/dynatrace/oneagent/sdk/api/enums/MessageDestinationType.html b/docs/com/dynatrace/oneagent/sdk/api/enums/MessageDestinationType.html index 5184957..f594cdc 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/enums/MessageDestinationType.html +++ b/docs/com/dynatrace/oneagent/sdk/api/enums/MessageDestinationType.html @@ -2,12 +2,12 @@ - + -MessageDestinationType (sdk 1.5.0 API) +MessageDestinationType (sdk 1.7.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="MessageDestinationType (sdk 1.5.0 API)"; + parent.document.title="MessageDestinationType (sdk 1.7.0 API)"; } } @@ -54,7 +54,7 @@ PREV CLASS  + PREV CLASS   NEXT CLASS FRAMES   @@ -313,7 +313,7 @@

    PREV CLASS  + PREV CLASS   NEXT CLASS FRAMES   diff --git a/docs/com/dynatrace/oneagent/sdk/api/enums/MessageSystemVendor.html b/docs/com/dynatrace/oneagent/sdk/api/enums/MessageSystemVendor.html index e5ba808..c70ad0e 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/enums/MessageSystemVendor.html +++ b/docs/com/dynatrace/oneagent/sdk/api/enums/MessageSystemVendor.html @@ -2,12 +2,12 @@ - + -MessageSystemVendor (sdk 1.5.0 API) +MessageSystemVendor (sdk 1.7.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="MessageSystemVendor (sdk 1.5.0 API)"; + parent.document.title="MessageSystemVendor (sdk 1.7.0 API)"; } } @@ -109,6 +109,10 @@

    +

    +
    Since:
    +
    1.5
    +

    diff --git a/docs/com/dynatrace/oneagent/sdk/api/enums/SDKState.html b/docs/com/dynatrace/oneagent/sdk/api/enums/SDKState.html index afd3751..2ea4f8c 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/enums/SDKState.html +++ b/docs/com/dynatrace/oneagent/sdk/api/enums/SDKState.html @@ -2,12 +2,12 @@ - + -SDKState (sdk 1.5.0 API) +SDKState (sdk 1.7.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="SDKState (sdk 1.5.0 API)"; + parent.document.title="SDKState (sdk 1.7.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/enums/package-frame.html b/docs/com/dynatrace/oneagent/sdk/api/enums/package-frame.html index cbb0ac5..e347524 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/enums/package-frame.html +++ b/docs/com/dynatrace/oneagent/sdk/api/enums/package-frame.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api.enums (sdk 1.5.0 API) +com.dynatrace.oneagent.sdk.api.enums (sdk 1.7.0 API) - + @@ -25,6 +25,8 @@
    ChannelType
    +DatabaseVendor +
    MessageDestinationType
    MessageSystemVendor diff --git a/docs/com/dynatrace/oneagent/sdk/api/enums/package-summary.html b/docs/com/dynatrace/oneagent/sdk/api/enums/package-summary.html index 4952684..f2709aa 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/enums/package-summary.html +++ b/docs/com/dynatrace/oneagent/sdk/api/enums/package-summary.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api.enums (sdk 1.5.0 API) +com.dynatrace.oneagent.sdk.api.enums (sdk 1.7.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.dynatrace.oneagent.sdk.api.enums (sdk 1.5.0 API)"; + parent.document.title="com.dynatrace.oneagent.sdk.api.enums (sdk 1.7.0 API)"; } } @@ -92,6 +92,10 @@

    Defines the type of communication channel being used. +DatabaseVendor +Enumerates all well-known database vendors. + + MessageDestinationType Enumerates all well-known messaging destination types. diff --git a/docs/com/dynatrace/oneagent/sdk/api/enums/package-tree.html b/docs/com/dynatrace/oneagent/sdk/api/enums/package-tree.html index 5769575..17316ef 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/enums/package-tree.html +++ b/docs/com/dynatrace/oneagent/sdk/api/enums/package-tree.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api.enums Class Hierarchy (sdk 1.5.0 API) +com.dynatrace.oneagent.sdk.api.enums Class Hierarchy (sdk 1.7.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.dynatrace.oneagent.sdk.api.enums Class Hierarchy (sdk 1.5.0 API)"; + parent.document.title="com.dynatrace.oneagent.sdk.api.enums Class Hierarchy (sdk 1.7.0 API)"; } } @@ -93,7 +93,7 @@

  • java.lang.Object
    diff --git a/docs/com/dynatrace/oneagent/sdk/api/infos/DatabaseInfo.html b/docs/com/dynatrace/oneagent/sdk/api/infos/DatabaseInfo.html new file mode 100644 index 0000000..bdb6b93 --- /dev/null +++ b/docs/com/dynatrace/oneagent/sdk/api/infos/DatabaseInfo.html @@ -0,0 +1,174 @@ + + + + + + +DatabaseInfo (sdk 1.7.0 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +com.dynatrace.oneagent.sdk.api.infos +
    +Interface DatabaseInfo

    +
    +
    +
    public interface DatabaseInfo
    + + +

    +Type returned by OneAgentSDK.createDatabaseInfo(String, String, com.dynatrace.oneagent.sdk.api.enums.ChannelType, String) +

    + +

    +

    +
    Since:
    +
    1.7.0
    +
    +
    + +

    + +

    + +


    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + + + diff --git a/docs/com/dynatrace/oneagent/sdk/api/infos/MessagingSystemInfo.html b/docs/com/dynatrace/oneagent/sdk/api/infos/MessagingSystemInfo.html index b708525..c4b14d5 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/infos/MessagingSystemInfo.html +++ b/docs/com/dynatrace/oneagent/sdk/api/infos/MessagingSystemInfo.html @@ -2,12 +2,12 @@ - + -MessagingSystemInfo (sdk 1.5.0 API) +MessagingSystemInfo (sdk 1.7.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="MessagingSystemInfo (sdk 1.5.0 API)"; + parent.document.title="MessagingSystemInfo (sdk 1.7.0 API)"; } } @@ -54,7 +54,7 @@ - PREV CLASS  + PREV CLASS   NEXT CLASS FRAMES   @@ -139,7 +139,7 @@

    - PREV CLASS  + PREV CLASS   NEXT CLASS FRAMES   diff --git a/docs/com/dynatrace/oneagent/sdk/api/infos/WebApplicationInfo.html b/docs/com/dynatrace/oneagent/sdk/api/infos/WebApplicationInfo.html index 759ad21..16dcc05 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/infos/WebApplicationInfo.html +++ b/docs/com/dynatrace/oneagent/sdk/api/infos/WebApplicationInfo.html @@ -2,12 +2,12 @@ - + -WebApplicationInfo (sdk 1.5.0 API) +WebApplicationInfo (sdk 1.7.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="WebApplicationInfo (sdk 1.5.0 API)"; + parent.document.title="WebApplicationInfo (sdk 1.7.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/infos/package-frame.html b/docs/com/dynatrace/oneagent/sdk/api/infos/package-frame.html index c030f07..1ae39f8 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/infos/package-frame.html +++ b/docs/com/dynatrace/oneagent/sdk/api/infos/package-frame.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api.infos (sdk 1.5.0 API) +com.dynatrace.oneagent.sdk.api.infos (sdk 1.7.0 API) - + @@ -23,6 +23,8 @@ Interfaces 
    +DatabaseInfo +
    MessagingSystemInfo
    WebApplicationInfo
    diff --git a/docs/com/dynatrace/oneagent/sdk/api/infos/package-summary.html b/docs/com/dynatrace/oneagent/sdk/api/infos/package-summary.html index 1d6c5d5..c4223c6 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/infos/package-summary.html +++ b/docs/com/dynatrace/oneagent/sdk/api/infos/package-summary.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api.infos (sdk 1.5.0 API) +com.dynatrace.oneagent.sdk.api.infos (sdk 1.7.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.dynatrace.oneagent.sdk.api.infos (sdk 1.5.0 API)"; + parent.document.title="com.dynatrace.oneagent.sdk.api.infos (sdk 1.7.0 API)"; } } @@ -88,6 +88,10 @@

    Interface Summary +DatabaseInfo +Type returned by OneAgentSDK.createDatabaseInfo(String, String, com.dynatrace.oneagent.sdk.api.enums.ChannelType, String) + + MessagingSystemInfo Type returned by OneAgentSDK.createMessagingSystemInfo(String, String, com.dynatrace.oneagent.sdk.api.enums.MessageDestinationType, com.dynatrace.oneagent.sdk.api.enums.ChannelType, String) diff --git a/docs/com/dynatrace/oneagent/sdk/api/infos/package-tree.html b/docs/com/dynatrace/oneagent/sdk/api/infos/package-tree.html index 140ace9..2bdf242 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/infos/package-tree.html +++ b/docs/com/dynatrace/oneagent/sdk/api/infos/package-tree.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api.infos Class Hierarchy (sdk 1.5.0 API) +com.dynatrace.oneagent.sdk.api.infos Class Hierarchy (sdk 1.7.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.dynatrace.oneagent.sdk.api.infos Class Hierarchy (sdk 1.5.0 API)"; + parent.document.title="com.dynatrace.oneagent.sdk.api.infos Class Hierarchy (sdk 1.7.0 API)"; } } @@ -90,7 +90,7 @@

    Interface Hierarchy

    +
  • com.dynatrace.oneagent.sdk.api.infos.DatabaseInfo
  • com.dynatrace.oneagent.sdk.api.infos.MessagingSystemInfo
  • com.dynatrace.oneagent.sdk.api.infos.WebApplicationInfo
    diff --git a/docs/com/dynatrace/oneagent/sdk/api/package-frame.html b/docs/com/dynatrace/oneagent/sdk/api/package-frame.html index 2bc682e..5629847 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/package-frame.html +++ b/docs/com/dynatrace/oneagent/sdk/api/package-frame.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api (sdk 1.5.0 API) +com.dynatrace.oneagent.sdk.api (sdk 1.7.0 API) - + @@ -23,6 +23,8 @@ Interfaces
     
    +DatabaseRequestTracer +
    IncomingMessageProcessTracer
    IncomingMessageReceiveTracer diff --git a/docs/com/dynatrace/oneagent/sdk/api/package-summary.html b/docs/com/dynatrace/oneagent/sdk/api/package-summary.html index 5760d15..f7cea22 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/package-summary.html +++ b/docs/com/dynatrace/oneagent/sdk/api/package-summary.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api (sdk 1.5.0 API) +com.dynatrace.oneagent.sdk.api (sdk 1.7.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.dynatrace.oneagent.sdk.api (sdk 1.5.0 API)"; + parent.document.title="com.dynatrace.oneagent.sdk.api (sdk 1.7.0 API)"; } } @@ -88,6 +88,10 @@

    Interface Summary +DatabaseRequestTracer +Interface for outgoing database tracer. + + IncomingMessageProcessTracer Interface for processing message tracer. diff --git a/docs/com/dynatrace/oneagent/sdk/api/package-tree.html b/docs/com/dynatrace/oneagent/sdk/api/package-tree.html index 108a51c..6d741ad 100644 --- a/docs/com/dynatrace/oneagent/sdk/api/package-tree.html +++ b/docs/com/dynatrace/oneagent/sdk/api/package-tree.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api Class Hierarchy (sdk 1.5.0 API) +com.dynatrace.oneagent.sdk.api Class Hierarchy (sdk 1.7.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.dynatrace.oneagent.sdk.api Class Hierarchy (sdk 1.5.0 API)"; + parent.document.title="com.dynatrace.oneagent.sdk.api Class Hierarchy (sdk 1.7.0 API)"; } } @@ -101,7 +101,7 @@

  • com.dynatrace.oneagent.sdk.api.OutgoingWebRequestTracer (also extends com.dynatrace.oneagent.sdk.api.Tracer)
  • com.dynatrace.oneagent.sdk.api.Tracer
      -
    • com.dynatrace.oneagent.sdk.api.IncomingMessageProcessTracer (also extends com.dynatrace.oneagent.sdk.api.IncomingTaggable) +
    • com.dynatrace.oneagent.sdk.api.DatabaseRequestTracer
    • com.dynatrace.oneagent.sdk.api.IncomingMessageProcessTracer (also extends com.dynatrace.oneagent.sdk.api.IncomingTaggable)
    • com.dynatrace.oneagent.sdk.api.IncomingMessageReceiveTracer
    • com.dynatrace.oneagent.sdk.api.IncomingRemoteCallTracer (also extends com.dynatrace.oneagent.sdk.api.IncomingTaggable)
    • com.dynatrace.oneagent.sdk.api.IncomingWebRequestTracer (also extends com.dynatrace.oneagent.sdk.api.IncomingTaggable)
    • com.dynatrace.oneagent.sdk.api.InProcessLinkTracer
    • com.dynatrace.oneagent.sdk.api.OutgoingMessageTracer (also extends com.dynatrace.oneagent.sdk.api.OutgoingTaggable) diff --git a/docs/com/dynatrace/oneagent/sdk/package-frame.html b/docs/com/dynatrace/oneagent/sdk/package-frame.html index 4fc5033..fa519b2 100644 --- a/docs/com/dynatrace/oneagent/sdk/package-frame.html +++ b/docs/com/dynatrace/oneagent/sdk/package-frame.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk (sdk 1.5.0 API) +com.dynatrace.oneagent.sdk (sdk 1.7.0 API) - + diff --git a/docs/com/dynatrace/oneagent/sdk/package-summary.html b/docs/com/dynatrace/oneagent/sdk/package-summary.html index 83475e0..36e95fc 100644 --- a/docs/com/dynatrace/oneagent/sdk/package-summary.html +++ b/docs/com/dynatrace/oneagent/sdk/package-summary.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk (sdk 1.5.0 API) +com.dynatrace.oneagent.sdk (sdk 1.7.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.dynatrace.oneagent.sdk (sdk 1.5.0 API)"; + parent.document.title="com.dynatrace.oneagent.sdk (sdk 1.7.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/package-tree.html b/docs/com/dynatrace/oneagent/sdk/package-tree.html index f0ef21c..ba8d90f 100644 --- a/docs/com/dynatrace/oneagent/sdk/package-tree.html +++ b/docs/com/dynatrace/oneagent/sdk/package-tree.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk Class Hierarchy (sdk 1.5.0 API) +com.dynatrace.oneagent.sdk Class Hierarchy (sdk 1.7.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.dynatrace.oneagent.sdk Class Hierarchy (sdk 1.5.0 API)"; + parent.document.title="com.dynatrace.oneagent.sdk Class Hierarchy (sdk 1.7.0 API)"; } } diff --git a/docs/constant-values.html b/docs/constant-values.html index 9ec8b18..4c90b61 100644 --- a/docs/constant-values.html +++ b/docs/constant-values.html @@ -2,12 +2,12 @@ - + -Constant Field Values (sdk 1.5.0 API) +Constant Field Values (sdk 1.7.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Constant Field Values (sdk 1.5.0 API)"; + parent.document.title="Constant Field Values (sdk 1.7.0 API)"; } } diff --git a/docs/deprecated-list.html b/docs/deprecated-list.html index f7aad76..fdb3e2e 100644 --- a/docs/deprecated-list.html +++ b/docs/deprecated-list.html @@ -2,12 +2,12 @@ - + -Deprecated List (sdk 1.5.0 API) +Deprecated List (sdk 1.7.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Deprecated List (sdk 1.5.0 API)"; + parent.document.title="Deprecated List (sdk 1.7.0 API)"; } } diff --git a/docs/help-doc.html b/docs/help-doc.html index 954ab12..e4bcd68 100644 --- a/docs/help-doc.html +++ b/docs/help-doc.html @@ -2,12 +2,12 @@ - + -API Help (sdk 1.5.0 API) +API Help (sdk 1.7.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="API Help (sdk 1.5.0 API)"; + parent.document.title="API Help (sdk 1.7.0 API)"; } } diff --git a/docs/index-all.html b/docs/index-all.html index 38563b7..caab050 100644 --- a/docs/index-all.html +++ b/docs/index-all.html @@ -2,12 +2,12 @@ - + -Index (sdk 1.5.0 API) +Index (sdk 1.7.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Index (sdk 1.5.0 API)"; + parent.document.title="Index (sdk 1.7.0 API)"; } } @@ -113,7 +113,10 @@

      C

      -
      ChannelType - Enum in com.dynatrace.oneagent.sdk.api.enums
      Defines the type of communication channel being used.
      com.dynatrace.oneagent.sdk - package com.dynatrace.oneagent.sdk
       
      com.dynatrace.oneagent.sdk.api - package com.dynatrace.oneagent.sdk.api
       
      com.dynatrace.oneagent.sdk.api.enums - package com.dynatrace.oneagent.sdk.api.enums
       
      com.dynatrace.oneagent.sdk.api.infos - package com.dynatrace.oneagent.sdk.api.infos
       
      createInProcessLink() - +
      ChannelType - Enum in com.dynatrace.oneagent.sdk.api.enums
      Defines the type of communication channel being used.
      com.dynatrace.oneagent.sdk - package com.dynatrace.oneagent.sdk
       
      com.dynatrace.oneagent.sdk.api - package com.dynatrace.oneagent.sdk.api
       
      com.dynatrace.oneagent.sdk.api.enums - package com.dynatrace.oneagent.sdk.api.enums
       
      com.dynatrace.oneagent.sdk.api.infos - package com.dynatrace.oneagent.sdk.api.infos
       
      createDatabaseInfo(String, String, ChannelType, String) - +Method in interface com.dynatrace.oneagent.sdk.api.OneAgentSDK +
      Initializes a DatabaseInfo instance that is required for tracing database requests. +
      createInProcessLink() - Method in interface com.dynatrace.oneagent.sdk.api.OneAgentSDK
      Creates a link for in-process-linking.
      createInstance() - @@ -132,7 +135,7 @@

      D

      -
      DYNATRACE_HTTP_HEADERNAME - +
      DatabaseInfo - Interface in com.dynatrace.oneagent.sdk.api.infos
      Type returned by OneAgentSDK.createDatabaseInfo(String, String, com.dynatrace.oneagent.sdk.api.enums.ChannelType, String)
      DatabaseRequestTracer - Interface in com.dynatrace.oneagent.sdk.api
      Interface for outgoing database tracer.
      DatabaseVendor - Enum in com.dynatrace.oneagent.sdk.api.enums
      Enumerates all well-known database vendors.
      DYNATRACE_HTTP_HEADERNAME - Static variable in interface com.dynatrace.oneagent.sdk.api.OneAgentSDK
      Using this headername to transport Dynatrace tag inside an outgoing http request ensures compatibility to Dynatrace built-in sensors. @@ -178,6 +181,9 @@
      getSDKConstant() - Method in enum com.dynatrace.oneagent.sdk.api.enums.ChannelType
        +
      getVendorName() - +Method in enum com.dynatrace.oneagent.sdk.api.enums.DatabaseVendor +
       
      getVendorName() - Method in enum com.dynatrace.oneagent.sdk.api.enums.MessageSystemVendor
        @@ -235,6 +241,12 @@
      setRemoteAddress(String) - Method in interface com.dynatrace.oneagent.sdk.api.IncomingWebRequestTracer
      Validates and sets the remote IP address of the incoming web request. +
      setReturnedRowCount(int) - +Method in interface com.dynatrace.oneagent.sdk.api.DatabaseRequestTracer +
      Adds optional information about retrieved rows of the traced database request. +
      setRoundTripCount(int) - +Method in interface com.dynatrace.oneagent.sdk.api.DatabaseRequestTracer +
      Adds optional information about round-trip count to database server.
      setStatusCode(int) - Method in interface com.dynatrace.oneagent.sdk.api.IncomingWebRequestTracer
      Sets the HTTP response status code. @@ -255,6 +267,9 @@

      T

      +
      toString() - +Method in enum com.dynatrace.oneagent.sdk.api.enums.DatabaseVendor +
       
      toString() - Method in enum com.dynatrace.oneagent.sdk.api.enums.MessageSystemVendor
        @@ -282,7 +297,10 @@
      traceOutgoingWebRequest(String, String) - Method in interface com.dynatrace.oneagent.sdk.api.OneAgentSDK
      Traces an outgoing web request. -
      Tracer - Interface in com.dynatrace.oneagent.sdk.api
      Common interface for timing-related methods.
      +
      Tracer - Interface in com.dynatrace.oneagent.sdk.api
      Common interface for timing-related methods.
      traceSqlDatabaseRequest(DatabaseInfo, String) - +Method in interface com.dynatrace.oneagent.sdk.api.OneAgentSDK +
      Creates a tracer for tracing outgoing SQL database requests. +

      V

      @@ -290,6 +308,9 @@
      valueOf(String) - Static method in enum com.dynatrace.oneagent.sdk.api.enums.ChannelType
      Returns the enum constant of this type with the specified name. +
      valueOf(String) - +Static method in enum com.dynatrace.oneagent.sdk.api.enums.DatabaseVendor +
      Returns the enum constant of this type with the specified name.
      valueOf(String) - Static method in enum com.dynatrace.oneagent.sdk.api.enums.MessageDestinationType
      Returns the enum constant of this type with the specified name. @@ -303,6 +324,10 @@ Static method in enum com.dynatrace.oneagent.sdk.api.enums.ChannelType
      Returns an array containing the constants of this enum type, in the order they are declared. +
      values() - +Static method in enum com.dynatrace.oneagent.sdk.api.enums.DatabaseVendor +
      Returns an array containing the constants of this enum type, in +the order they are declared.
      values() - Static method in enum com.dynatrace.oneagent.sdk.api.enums.MessageDestinationType
      Returns an array containing the constants of this enum type, in diff --git a/docs/index.html b/docs/index.html index 883fa39..ec50c3d 100644 --- a/docs/index.html +++ b/docs/index.html @@ -2,16 +2,50 @@ - + -sdk 1.5.0 API +sdk 1.7.0 API @@ -80,7 +80,7 @@

      -sdk 1.5.0 API +sdk 1.7.0 API

      diff --git a/docs/overview-tree.html b/docs/overview-tree.html index 53c7d0b..0006066 100644 --- a/docs/overview-tree.html +++ b/docs/overview-tree.html @@ -2,12 +2,12 @@ - + -Class Hierarchy (sdk 1.5.0 API) +Class Hierarchy (sdk 1.7.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Class Hierarchy (sdk 1.5.0 API)"; + parent.document.title="Class Hierarchy (sdk 1.7.0 API)"; } } @@ -96,7 +96,7 @@

      Interface Hierarchy

        -
      • com.dynatrace.oneagent.sdk.api.IncomingTaggable
        diff --git a/samples/README.md b/samples/README.md index 1f8bfe1..c6e99f4 100644 --- a/samples/README.md +++ b/samples/README.md @@ -6,8 +6,9 @@ Sample applications showing how to use Dynatrace OneAgent SDK for Java to create - `remotecall`: shows usage of remote call API. Allows you to tag remote calls in the same or between different JVMs. - `in-process-linking`: shows usage of in-process-linking API. Allows you to tag eg. asynchronous execution inside the same process. -- `webrequest`: shows usage of outging- and incoming webrequests. +- `webrequest`: shows usage of outgoing and incoming web request tracing - `messaging`: shows usage of messaging +- `database`: shows usage of database request tracing ## Build and prepare running sample applications @@ -45,3 +46,9 @@ This Application shows how to trace outgoing, receiving and processing of incomi - run sample: `mvn exec:exec` +### Run DatabaseRequest sample application +This Application shows how to trace database requests. To run this sample you just go into the sample directory and run the sample by typing: + +- run sample: `mvn exec:exec` + +To run this sample you need to create a custom service for your tenant. See source of sample app for details. diff --git a/samples/database/pom.xml b/samples/database/pom.xml new file mode 100644 index 0000000..d77592c --- /dev/null +++ b/samples/database/pom.xml @@ -0,0 +1,84 @@ + + 4.0.0 + + com.dynatrace.oneagent.sdk.samples.messaging + messaging-sample + 1.7.0 + jar + + + + com.dynatrace.oneagent.sdk.java + oneagent-sdk + 1.7.0 + compile + + + + https://github.com/Dynatrace/OneAgent-SDK-Java + Dynatrace OneAgent SDK Java database request sample + + Dynatrace + http://www.dynatrace.com + + + + 1.6 + 1.6 + UTF-8 + UTF-8 + + + + + + + + + org.apache.maven.plugins + maven-jar-plugin + 2.4 + + + + true + com.dynatrace.oneagent.sdk.samples.database.DatabaseApp + + + + + + org.codehaus.mojo + exec-maven-plugin + 1.6.0 + + + + exec + + + + + java + + ${agent.agentpath} + -classpath + + com.dynatrace.oneagent.sdk.samples.database.DatabaseApp + + + + + + + \ No newline at end of file diff --git a/samples/database/src/main/java/com/dynatrace/oneagent/sdk/samples/database/DatabaseApp.java b/samples/database/src/main/java/com/dynatrace/oneagent/sdk/samples/database/DatabaseApp.java new file mode 100644 index 0000000..5056081 --- /dev/null +++ b/samples/database/src/main/java/com/dynatrace/oneagent/sdk/samples/database/DatabaseApp.java @@ -0,0 +1,85 @@ +package com.dynatrace.oneagent.sdk.samples.database; + +import com.dynatrace.oneagent.sdk.OneAgentSDKFactory; +import com.dynatrace.oneagent.sdk.api.DatabaseRequestTracer; +import com.dynatrace.oneagent.sdk.api.OneAgentSDK; +import com.dynatrace.oneagent.sdk.api.enums.ChannelType; +import com.dynatrace.oneagent.sdk.api.infos.DatabaseInfo; + +/** + * Sample application shows how database requests should be traced. + * + * @author Alram.Lechner + * + */ +public class DatabaseApp { + + private final OneAgentSDK oneAgentSdk; + + static DatabaseApp instance; + + private DatabaseApp() { + oneAgentSdk = OneAgentSDKFactory.createInstance(); + oneAgentSdk.setLoggingCallback(new StdErrLoggingCallback()); + switch (oneAgentSdk.getCurrentState()) { + case ACTIVE: + System.out.println("SDK is active and capturing."); + break; + case PERMANENTLY_INACTIVE: + System.err.println( + "SDK is PERMANENTLY_INACTIVE; Probably no OneAgent injected or OneAgent is incompatible with SDK."); + break; + case TEMPORARILY_INACTIVE: + System.err.println( + "SDK is TEMPORARILY_INACTIVE; OneAgent has been deactivated - check OneAgent configuration."); + break; + default: + System.err.println("SDK is in unknown state."); + break; + } + instance = this; + } + + public static void main(String args[]) { + System.out.println("*************************************************************"); + System.out.println("** Running database request sample **"); + System.out.println("*************************************************************"); + try { + DatabaseApp app = new DatabaseApp(); + + app.traceSqlRequest("Select * from anyTable"); + + System.out.println("sample application stopped. sleeping a while, so OneAgent is able to send data to server ..."); + Thread.sleep(15000 * 3); // we have to wait - so OneAgent is able to send data to server + } catch (Exception e) { + System.err.println("database request sample failed: " + e.getMessage()); + e.printStackTrace(); + System.exit(-1); + } + } + + /** + * You need to add a custom service for this method. a database request will only be captured, if it s part of an already + * started transaction. + * see Dynatrace help + * for more information about a custom service. + */ + private void traceSqlRequest(String sql) { + DatabaseInfo databaseInfo = oneAgentSdk.createDatabaseInfo("myCoolDatabase", "UnsupportedDatabaseVendor", ChannelType.TCP_IP, "theDbHost.localdomain:3434"); + DatabaseRequestTracer databaseRequestTracer = oneAgentSdk.traceSqlDatabaseRequest(databaseInfo, sql); + databaseRequestTracer.start(); + try { + executeRequest(sql); + } catch(Exception e) { + databaseRequestTracer.error(e); + // handle or re-throw exception! + } finally { + databaseRequestTracer.end(); + } + } + + private void executeRequest(String sql) { + // run the sql against the db ... + } + +} diff --git a/samples/database/src/main/java/com/dynatrace/oneagent/sdk/samples/database/StdErrLoggingCallback.java b/samples/database/src/main/java/com/dynatrace/oneagent/sdk/samples/database/StdErrLoggingCallback.java new file mode 100644 index 0000000..c6d131d --- /dev/null +++ b/samples/database/src/main/java/com/dynatrace/oneagent/sdk/samples/database/StdErrLoggingCallback.java @@ -0,0 +1,37 @@ +package com.dynatrace.oneagent.sdk.samples.database; + +/* + * Copyright 2018 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import com.dynatrace.oneagent.sdk.api.LoggingCallback; + +/** + * Implementation of OneAgent Logging Callback. Just printing output messages to + * std err. + */ +public class StdErrLoggingCallback implements LoggingCallback { + + @Override + public void error(String message) { + System.err.println("[OneAgent SDK ERROR]: " + message); + } + + @Override + public void warn(String message) { + System.err.println("[OneAgent SDK WARNING]: " + message); + } + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.java b/src/main/java/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.java index 2f16894..f1bb884 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.java @@ -1,5 +1,5 @@ /* - * Copyright 2018 Dynatrace LLC + * Copyright 2019 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/DatabaseRequestTracer.java b/src/main/java/com/dynatrace/oneagent/sdk/api/DatabaseRequestTracer.java new file mode 100644 index 0000000..3e2e94d --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/DatabaseRequestTracer.java @@ -0,0 +1,42 @@ +/* + * Copyright 2019 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.api; + +/** + * Interface for outgoing database tracer. + * https://github.com/Dynatrace/OneAgent-SDK-for-Java#databaseRequest + * + * @since 1.7.0 + */ +public interface DatabaseRequestTracer extends Tracer { + + /** + * Adds optional information about retrieved rows of the traced database request. + * + * @param returnedRowCount number of rows returned by this traced database request. Only positive values are allowed. + * @since 1.7.0 + */ + public void setReturnedRowCount(int returnedRowCount); + + /** + * Adds optional information about round-trip count to database server. + * + * @param roundTripCount count of round-trips that took place. Only positive values are allowed. + * @since 1.7.0 + */ + public void setRoundTripCount(int roundTripCount); + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/InProcessLink.java b/src/main/java/com/dynatrace/oneagent/sdk/api/InProcessLink.java index 2df3d65..3bf52d4 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/InProcessLink.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/InProcessLink.java @@ -1,5 +1,5 @@ /* - * Copyright 2018 Dynatrace LLC + * Copyright 2019 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.java b/src/main/java/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.java index 42a42c0..ed9b04e 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.java @@ -1,5 +1,5 @@ /* - * Copyright 2018 Dynatrace LLC + * Copyright 2019 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingMessageProcessTracer.java b/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingMessageProcessTracer.java index 9a71fe5..50d5751 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingMessageProcessTracer.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingMessageProcessTracer.java @@ -1,5 +1,5 @@ /* - * Copyright 2018 Dynatrace LLC + * Copyright 2019 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingMessageReceiveTracer.java b/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingMessageReceiveTracer.java index f89a255..ab144e0 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingMessageReceiveTracer.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingMessageReceiveTracer.java @@ -1,5 +1,5 @@ /* - * Copyright 2018 Dynatrace LLC + * Copyright 2019 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.java b/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.java index a6e185f..440b6cc 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.java @@ -1,5 +1,5 @@ /* - * Copyright 2018 Dynatrace LLC + * Copyright 2019 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingTaggable.java b/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingTaggable.java index 39dec5a..eae1673 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingTaggable.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingTaggable.java @@ -1,5 +1,5 @@ /* - * Copyright 2018 Dynatrace LLC + * Copyright 2019 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingWebRequestTracer.java b/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingWebRequestTracer.java index 9a1e445..a2541ae 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingWebRequestTracer.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingWebRequestTracer.java @@ -1,5 +1,5 @@ /* - * Copyright 2018 Dynatrace LLC + * Copyright 2019 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/LoggingCallback.java b/src/main/java/com/dynatrace/oneagent/sdk/api/LoggingCallback.java index 4eb4071..1190a30 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/LoggingCallback.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/LoggingCallback.java @@ -1,5 +1,5 @@ /* - * Copyright 2018 Dynatrace LLC + * Copyright 2019 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/OneAgentSDK.java b/src/main/java/com/dynatrace/oneagent/sdk/api/OneAgentSDK.java index aa46dad..84306d2 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/OneAgentSDK.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/OneAgentSDK.java @@ -1,5 +1,5 @@ /* - * Copyright 2018 Dynatrace LLC + * Copyright 2019 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,6 +18,7 @@ import com.dynatrace.oneagent.sdk.api.enums.ChannelType; import com.dynatrace.oneagent.sdk.api.enums.MessageDestinationType; import com.dynatrace.oneagent.sdk.api.enums.SDKState; +import com.dynatrace.oneagent.sdk.api.infos.DatabaseInfo; import com.dynatrace.oneagent.sdk.api.infos.MessagingSystemInfo; import com.dynatrace.oneagent.sdk.api.infos.WebApplicationInfo; @@ -44,6 +45,34 @@ public interface OneAgentSDK { * Using this propertyname to transport Dynatrace tag along with the message, ensures compatibility to Dynatrace built-in sensors. */ public static final String DYNATRACE_MESSAGE_PROPERTYNAME = "dtdTraceTagInfo"; + + // ***** outgoing Database ***** + + /** + * Initializes a DatabaseInfo instance that is required for tracing database requests. + * + * @param name name of the database + * @param vendor database vendor name (e.g. Oracle, MySQL, ...), can be a user defined name + * If possible use a constant defined in {@link com.dynatrace.oneagent.sdk.api.enums.DatabaseVendor} + * @param channelType communication protocol used to communicate with the database. + * @param channelEndpoint this represents the communication endpoint for the database. This information allows Dynatrace to tie the database requests to a specific process or cloud service. It is optional. + * * for TCP/IP: host name/IP of the server-side (can include port in the form of "host:port") + * * for UNIX domain sockets: name of domain socket file + * * for named pipes: name of pipe + * @return {@link DatabaseInfo} instance to work with + * @since 1.7.0 + */ + DatabaseInfo createDatabaseInfo(String name, String vendor, ChannelType channelType, String channelEndpoint); + + /** + * Creates a tracer for tracing outgoing SQL database requests. + * + * @param databaseInfo information about database + * @param statement database SQL statement + * @return {@link DatabaseRequestTracer} to work with + * @since 1.7.0 + */ + DatabaseRequestTracer traceSqlDatabaseRequest(DatabaseInfo databaseInfo, String statement); // ***** Web Requests (incoming) ***** diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingMessageTracer.java b/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingMessageTracer.java index d1c0ee1..cfe5977 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingMessageTracer.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingMessageTracer.java @@ -1,5 +1,5 @@ /* - * Copyright 2018 Dynatrace LLC + * Copyright 2019 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.java b/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.java index 34f0d3f..8d26b4b 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.java @@ -1,5 +1,5 @@ /* - * Copyright 2018 Dynatrace LLC + * Copyright 2019 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.java b/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.java index 850e72b..22a8b8e 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.java @@ -1,5 +1,5 @@ /* - * Copyright 2018 Dynatrace LLC + * Copyright 2019 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingWebRequestTracer.java b/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingWebRequestTracer.java index 6842592..dd45469 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingWebRequestTracer.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingWebRequestTracer.java @@ -1,5 +1,5 @@ /* - * Copyright 2018 Dynatrace LLC + * Copyright 2019 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/Tracer.java b/src/main/java/com/dynatrace/oneagent/sdk/api/Tracer.java index 6b4e543..5bb8969 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/Tracer.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/Tracer.java @@ -1,5 +1,5 @@ /* - * Copyright 2018 Dynatrace LLC + * Copyright 2019 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/enums/ChannelType.java b/src/main/java/com/dynatrace/oneagent/sdk/api/enums/ChannelType.java index eba52b3..f15f0b1 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/enums/ChannelType.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/enums/ChannelType.java @@ -1,5 +1,5 @@ /* - * Copyright 2018 Dynatrace LLC + * Copyright 2019 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/enums/DatabaseVendor.java b/src/main/java/com/dynatrace/oneagent/sdk/api/enums/DatabaseVendor.java new file mode 100644 index 0000000..ce6762d --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/enums/DatabaseVendor.java @@ -0,0 +1,78 @@ +/* + * Copyright 2019 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.api.enums; + +import com.dynatrace.oneagent.sdk.api.OneAgentSDK; + +/** + * Enumerates all well-known database vendors. See {@link OneAgentSDK#createDatabaseInfo(String, String, ChannelType, String)}. + * Using these constants ensures that services captured by OneAgentSDK are handled the same way as traced via built-in sensors. + * @since 1.7.0 + */ +public enum DatabaseVendor { + + APACHE_HIVE("ApacheHive"), + CLOUDSCAPE("Cloudscape"), + HSQLDB("HSQLDB"), + PROGRESS("Progress"), + MAXDB("MaxDB"), + HANADB("HanaDB"), + INGRES("Ingres"), + FIRST_SQL("FirstSQL"), + ENTERPRISE_DB("EnterpriseDB"), + CACHE("Cache"), + ADABAS("Adabas"), + FIREBIRD("Firebird"), + DB2("DB2"), + DERBY_CLIENT("Derby Client"), + DERBY_EMBEDDED("Derby Embedded"), + FILEMAKER("Filemaker"), + INFORMIX("Informix"), + INSTANT_DB("InstantDb"), + INTERBASE("Interbase"), + MYSQL("MySQL"), + MARIADB("MariaDB"), + NETEZZA("Netezza"), + ORACLE("Oracle"), + PERVASIVE("Pervasive"), + POINTBASE("Pointbase"), + POSTGRESQL("PostgreSQL"), + SQLSERVER("SQL Server"), + SQLITE("sqlite"), + SYBASE("Sybase"), + TERADATA("Teradata"), + VERTICA("Vertica"), + CASSANDRA("Cassandra"), + H2("H2"), + COLDFUSION_IMQ("ColdFusion IMQ"), + REDSHIFT("Amazon Redshift"), + COUCHBASE("Couchbase"); + + private final String vendorName; + + private DatabaseVendor(String vendorName) { + this.vendorName = vendorName; + } + + public String getVendorName() { + return vendorName; + } + + @Override + public String toString() { + return vendorName; + } +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/enums/MessageDestinationType.java b/src/main/java/com/dynatrace/oneagent/sdk/api/enums/MessageDestinationType.java index d11859b..f890189 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/enums/MessageDestinationType.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/enums/MessageDestinationType.java @@ -1,5 +1,5 @@ /* - * Copyright 2018 Dynatrace LLC + * Copyright 2019 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/enums/MessageSystemVendor.java b/src/main/java/com/dynatrace/oneagent/sdk/api/enums/MessageSystemVendor.java index cc86d50..4ae51e7 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/enums/MessageSystemVendor.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/enums/MessageSystemVendor.java @@ -1,5 +1,5 @@ /* - * Copyright 2018 Dynatrace LLC + * Copyright 2019 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,7 +19,9 @@ /** * Enumerates all well-known messaging systems. See {@link OneAgentSDK#createMessagingSystemInfo(String, String, MessageDestinationType, ChannelType, String)}. - * Using these constants ensures that services captured by OneAgentSDK are handled the same way as traced via built-in sensors. + * Using these constants ensures that services captured by OneAgentSDK are handled the same way as traced via built-in sensors. + * + * @since 1.5 */ public enum MessageSystemVendor { diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/enums/SDKState.java b/src/main/java/com/dynatrace/oneagent/sdk/api/enums/SDKState.java index 303a91d..11e4884 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/enums/SDKState.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/enums/SDKState.java @@ -1,5 +1,5 @@ /* - * Copyright 2018 Dynatrace LLC + * Copyright 2019 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/infos/DatabaseInfo.java b/src/main/java/com/dynatrace/oneagent/sdk/api/infos/DatabaseInfo.java new file mode 100644 index 0000000..cbd36b8 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/infos/DatabaseInfo.java @@ -0,0 +1,26 @@ +/* + * Copyright 2019 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.api.infos; + +import com.dynatrace.oneagent.sdk.api.OneAgentSDK; + +/** + * Type returned by {@link OneAgentSDK#createDatabaseInfo(String, String, com.dynatrace.oneagent.sdk.api.enums.ChannelType, String)} + * @since 1.7.0 + */ +public interface DatabaseInfo { + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/infos/MessagingSystemInfo.java b/src/main/java/com/dynatrace/oneagent/sdk/api/infos/MessagingSystemInfo.java index adffb5b..732e0d8 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/infos/MessagingSystemInfo.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/infos/MessagingSystemInfo.java @@ -1,5 +1,5 @@ /* - * Copyright 2018 Dynatrace LLC + * Copyright 2019 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/infos/WebApplicationInfo.java b/src/main/java/com/dynatrace/oneagent/sdk/api/infos/WebApplicationInfo.java index 7019d2e..90aead4 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/infos/WebApplicationInfo.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/infos/WebApplicationInfo.java @@ -1,5 +1,5 @@ /* - * Copyright 2018 Dynatrace LLC + * Copyright 2019 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/OneAgentSDKFactoryImpl.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/OneAgentSDKFactoryImpl.java index bfb9c73..d2d62be 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/OneAgentSDKFactoryImpl.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/OneAgentSDKFactoryImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2018 Dynatrace LLC + * Copyright 2019 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -30,13 +30,10 @@ public class OneAgentSDKFactoryImpl { * OneAgent), increase oneSdkFix only. */ static final int oneSdkMajor = 1; - static final int oneSdkMinor = 5; + static final int oneSdkMinor = 7; static final int oneSdkFix = 0; - /** the only SDK instance (one for every classLoader) */ - private static OneAgentSDK oneSDK = null; - - public static boolean debugOneAgentSdkStub = false; + public static final boolean debugOneAgentSdkStub = Boolean.parseBoolean(System.getProperty("com.dynatrace.oneagent.sdk.debug", "false")); private static OneAgentSDK createOneSDK() { Object agentApiImpl = SDKInstanceProvider.create(oneSdkMajor, oneSdkMinor, oneSdkFix); @@ -66,16 +63,11 @@ private static OneAgentSDK createOneSDK() { } } - public static synchronized OneAgentSDK createInstance() { - if (oneSDK == null) { - debugOneAgentSdkStub = Boolean - .parseBoolean(System.getProperty("com.dynatrace.oneagent.sdk.debug", "false")); - oneSDK = createOneSDK(); - } - return oneSDK; + public static OneAgentSDK createInstance() { + return createOneSDK(); } public static void logDebug(String msg) { System.out.println("[onesdk ] " + msg); } -} +} \ No newline at end of file diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/SDKInstanceProvider.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/SDKInstanceProvider.java index f5a3252..7311cb9 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/SDKInstanceProvider.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/SDKInstanceProvider.java @@ -1,5 +1,5 @@ /* - * Copyright 2018 Dynatrace LLC + * Copyright 2019 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/DatabaseInfoNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/DatabaseInfoNoop.java new file mode 100644 index 0000000..13ca984 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/DatabaseInfoNoop.java @@ -0,0 +1,22 @@ +/* + * Copyright 2019 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.impl.noop; + +import com.dynatrace.oneagent.sdk.api.infos.DatabaseInfo; + +public class DatabaseInfoNoop implements DatabaseInfo { + public static final DatabaseInfo INSTANCE = new DatabaseInfoNoop(); +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/DatabaseRequestTracerNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/DatabaseRequestTracerNoop.java new file mode 100644 index 0000000..3252ac3 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/DatabaseRequestTracerNoop.java @@ -0,0 +1,51 @@ +/* + * Copyright 2019 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.impl.noop; + +import com.dynatrace.oneagent.sdk.api.DatabaseRequestTracer; + +public class DatabaseRequestTracerNoop extends NodeNoop implements DatabaseRequestTracer { + + public static final DatabaseRequestTracerNoop INSTANCE = new DatabaseRequestTracerNoop(); + + private DatabaseRequestTracerNoop() { + } + + @Override + public void start() { + } + + @Override + public void end() { + } + + @Override + public void error(String message) { + } + + @Override + public void error(Throwable throwable) { + } + + @Override + public void setReturnedRowCount(int rowsReturned) { + } + + @Override + public void setRoundTripCount(int roundTripCount) { + } + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/InProcessLinkNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/InProcessLinkNoop.java index da0c0d1..09f163e 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/InProcessLinkNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/InProcessLinkNoop.java @@ -1,5 +1,5 @@ /* - * Copyright 2018 Dynatrace LLC + * Copyright 2019 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/InProcessLinkTracerNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/InProcessLinkTracerNoop.java index c775be8..74ea9af 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/InProcessLinkTracerNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/InProcessLinkTracerNoop.java @@ -1,5 +1,5 @@ /* - * Copyright 2018 Dynatrace LLC + * Copyright 2019 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/IncomingMessageProcessTracerNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/IncomingMessageProcessTracerNoop.java index 1938e74..c47ef85 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/IncomingMessageProcessTracerNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/IncomingMessageProcessTracerNoop.java @@ -1,5 +1,5 @@ /* - * Copyright 2018 Dynatrace LLC + * Copyright 2019 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/IncomingMessageReceiveTracerNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/IncomingMessageReceiveTracerNoop.java index 99b98b8..2b21b85 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/IncomingMessageReceiveTracerNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/IncomingMessageReceiveTracerNoop.java @@ -1,5 +1,5 @@ /* - * Copyright 2018 Dynatrace LLC + * Copyright 2019 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/IncomingWebRequestTracerNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/IncomingWebRequestTracerNoop.java index 18fa25e..d5aecc2 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/IncomingWebRequestTracerNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/IncomingWebRequestTracerNoop.java @@ -1,5 +1,5 @@ /* - * Copyright 2018 Dynatrace LLC + * Copyright 2019 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/MessagingSystemInfoNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/MessagingSystemInfoNoop.java index ab3ea75..dcbbecf 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/MessagingSystemInfoNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/MessagingSystemInfoNoop.java @@ -1,5 +1,5 @@ /* - * Copyright 2018 Dynatrace LLC + * Copyright 2019 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/NodeNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/NodeNoop.java index f2e63c9..574acee 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/NodeNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/NodeNoop.java @@ -1,5 +1,5 @@ /* - * Copyright 2018 Dynatrace LLC + * Copyright 2019 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OneAgentSDKNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OneAgentSDKNoop.java index a804310..700dba9 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OneAgentSDKNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OneAgentSDKNoop.java @@ -1,5 +1,5 @@ /* - * Copyright 2018 Dynatrace LLC + * Copyright 2019 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,6 +15,7 @@ */ package com.dynatrace.oneagent.sdk.impl.noop; +import com.dynatrace.oneagent.sdk.api.DatabaseRequestTracer; import com.dynatrace.oneagent.sdk.api.InProcessLink; import com.dynatrace.oneagent.sdk.api.InProcessLinkTracer; import com.dynatrace.oneagent.sdk.api.IncomingMessageProcessTracer; @@ -29,6 +30,7 @@ import com.dynatrace.oneagent.sdk.api.enums.ChannelType; import com.dynatrace.oneagent.sdk.api.enums.MessageDestinationType; import com.dynatrace.oneagent.sdk.api.enums.SDKState; +import com.dynatrace.oneagent.sdk.api.infos.DatabaseInfo; import com.dynatrace.oneagent.sdk.api.infos.MessagingSystemInfo; import com.dynatrace.oneagent.sdk.api.infos.WebApplicationInfo; @@ -124,4 +126,15 @@ public IncomingMessageReceiveTracer traceIncomingMessageReceive(MessagingSystemI public IncomingMessageProcessTracer traceIncomingMessageProcess(MessagingSystemInfo messagingSystem) { return IncomingMessageProcessTracerNoop.INSTANCE; } + + @Override + public DatabaseInfo createDatabaseInfo(String name, String vendor, ChannelType channelType, + String channelEndpoint) { + return DatabaseInfoNoop.INSTANCE; + } + + @Override + public DatabaseRequestTracer traceSqlDatabaseRequest(DatabaseInfo databaseInfo, String statement) { + return DatabaseRequestTracerNoop.INSTANCE; + } } diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OutgoingMessageTracerNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OutgoingMessageTracerNoop.java index 24aa263..f0602ff 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OutgoingMessageTracerNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OutgoingMessageTracerNoop.java @@ -1,5 +1,5 @@ /* - * Copyright 2018 Dynatrace LLC + * Copyright 2019 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OutgoingWebRequestTracerNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OutgoingWebRequestTracerNoop.java index 9841b04..45cb3b6 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OutgoingWebRequestTracerNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OutgoingWebRequestTracerNoop.java @@ -1,5 +1,5 @@ /* - * Copyright 2018 Dynatrace LLC + * Copyright 2019 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/RemoteCallClientTracerNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/RemoteCallClientTracerNoop.java index cec8d49..1ab9b6c 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/RemoteCallClientTracerNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/RemoteCallClientTracerNoop.java @@ -1,5 +1,5 @@ /* - * Copyright 2018 Dynatrace LLC + * Copyright 2019 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/RemoteCallServerTracerNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/RemoteCallServerTracerNoop.java index fed6339..610d071 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/RemoteCallServerTracerNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/RemoteCallServerTracerNoop.java @@ -1,5 +1,5 @@ /* - * Copyright 2018 Dynatrace LLC + * Copyright 2019 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/WebApplicationInfoNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/WebApplicationInfoNoop.java index 14becec..2a7f14b 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/WebApplicationInfoNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/WebApplicationInfoNoop.java @@ -1,5 +1,5 @@ /* - * Copyright 2018 Dynatrace LLC + * Copyright 2019 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/DatabaseInfoImpl.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/DatabaseInfoImpl.java new file mode 100644 index 0000000..307e2d6 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/DatabaseInfoImpl.java @@ -0,0 +1,50 @@ +/* + * Copyright 2019 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.impl.proxy; + +import com.dynatrace.oneagent.sdk.api.enums.ChannelType; +import com.dynatrace.oneagent.sdk.api.infos.DatabaseInfo; + +public class DatabaseInfoImpl implements DatabaseInfo { + + private final String name; + private final String vendor; + private final ChannelType channelType; + private final String channelEndpoint; + + DatabaseInfoImpl(String name, String vendor, ChannelType channelType, String channelEndpoint) { + this.name = name; + this.vendor = vendor; + this.channelType = channelType; + this.channelEndpoint = channelEndpoint; + } + + String getName() { + return name; + } + + String getVendor() { + return vendor; + } + + ChannelType getChannelType() { + return channelType; + } + + String getChannelEndpoint() { + return channelEndpoint; + } +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/DatabaseRequestTracerProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/DatabaseRequestTracerProxy.java new file mode 100644 index 0000000..19940bd --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/DatabaseRequestTracerProxy.java @@ -0,0 +1,36 @@ +/* + * Copyright 2019 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.impl.proxy; + +import com.dynatrace.oneagent.sdk.api.DatabaseRequestTracer; + +public class DatabaseRequestTracerProxy extends TraceableProxy implements DatabaseRequestTracer { + + DatabaseRequestTracerProxy(SDK2AgentInternalApiProxy apiProxy, Object outgoingMessageTracer) { + super(apiProxy, outgoingMessageTracer); + } + + @Override + public void setReturnedRowCount(int rowsReturned) { + apiProxy.databaseRequestTracer_setRowsReturned(agentsNodeObject, rowsReturned); + } + + @Override + public void setRoundTripCount(int roundTripCount) { + apiProxy.databaseRequestTracer_setRoundTripCount(agentsNodeObject, roundTripCount); + } + +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/InProcessLinkImpl.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/InProcessLinkImpl.java index 198bd96..300d464 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/InProcessLinkImpl.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/InProcessLinkImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2018 Dynatrace LLC + * Copyright 2019 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/InProcessLinkTracerProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/InProcessLinkTracerProxy.java index 340f21b..b11266d 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/InProcessLinkTracerProxy.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/InProcessLinkTracerProxy.java @@ -1,5 +1,5 @@ /* - * Copyright 2018 Dynatrace LLC + * Copyright 2019 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/IncomingMessageProcessTracerProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/IncomingMessageProcessTracerProxy.java index f27e557..3c94c3b 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/IncomingMessageProcessTracerProxy.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/IncomingMessageProcessTracerProxy.java @@ -1,5 +1,5 @@ /* - * Copyright 2018 Dynatrace LLC + * Copyright 2019 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/IncomingMessageReceiveTracerProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/IncomingMessageReceiveTracerProxy.java index 636b83c..8a4826e 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/IncomingMessageReceiveTracerProxy.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/IncomingMessageReceiveTracerProxy.java @@ -1,5 +1,5 @@ /* - * Copyright 2018 Dynatrace LLC + * Copyright 2019 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/IncomingWebRequestProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/IncomingWebRequestProxy.java index 43f515c..bf3a1f1 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/IncomingWebRequestProxy.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/IncomingWebRequestProxy.java @@ -1,5 +1,5 @@ /* - * Copyright 2018 Dynatrace LLC + * Copyright 2019 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/MessagingSystemInfoImpl.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/MessagingSystemInfoImpl.java index 1561f85..a0b5e50 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/MessagingSystemInfoImpl.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/MessagingSystemInfoImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2018 Dynatrace LLC + * Copyright 2019 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OneAgentSDKProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OneAgentSDKProxy.java index 81eb93e..24a0bee 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OneAgentSDKProxy.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OneAgentSDKProxy.java @@ -1,5 +1,5 @@ /* - * Copyright 2018 Dynatrace LLC + * Copyright 2019 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,6 +15,7 @@ */ package com.dynatrace.oneagent.sdk.impl.proxy; +import com.dynatrace.oneagent.sdk.api.DatabaseRequestTracer; import com.dynatrace.oneagent.sdk.api.InProcessLink; import com.dynatrace.oneagent.sdk.api.InProcessLinkTracer; import com.dynatrace.oneagent.sdk.api.IncomingMessageProcessTracer; @@ -29,9 +30,12 @@ import com.dynatrace.oneagent.sdk.api.enums.ChannelType; import com.dynatrace.oneagent.sdk.api.enums.MessageDestinationType; import com.dynatrace.oneagent.sdk.api.enums.SDKState; +import com.dynatrace.oneagent.sdk.api.infos.DatabaseInfo; import com.dynatrace.oneagent.sdk.api.infos.MessagingSystemInfo; import com.dynatrace.oneagent.sdk.api.infos.WebApplicationInfo; import com.dynatrace.oneagent.sdk.impl.OneAgentSDKFactoryImpl; +import com.dynatrace.oneagent.sdk.impl.noop.DatabaseInfoNoop; +import com.dynatrace.oneagent.sdk.impl.noop.DatabaseRequestTracerNoop; import com.dynatrace.oneagent.sdk.impl.noop.InProcessLinkNoop; import com.dynatrace.oneagent.sdk.impl.noop.InProcessLinkTracerNoop; import com.dynatrace.oneagent.sdk.impl.noop.IncomingMessageProcessTracerNoop; @@ -268,4 +272,32 @@ public IncomingMessageProcessTracer traceIncomingMessageProcess(MessagingSystemI return new IncomingMessageProcessTracerProxy(apiProxy, agentObject); } + @Override + public DatabaseInfo createDatabaseInfo(String name, String vendor, ChannelType channelType, + String channelEndpoint) { + return new DatabaseInfoImpl(name, vendor, channelType, channelEndpoint); + } + + @Override + public DatabaseRequestTracer traceSqlDatabaseRequest(DatabaseInfo databaseInfo, String statement) { + if (databaseInfo instanceof DatabaseInfoNoop) { + return DatabaseRequestTracerNoop.INSTANCE; + } else if (!(databaseInfo instanceof DatabaseInfoImpl)) { + if (OneAgentSDKFactoryImpl.debugOneAgentSdkStub) { + OneAgentSDKFactoryImpl.logDebug("- invalid DatabaseInfo object provided: " + + (databaseInfo == null ? "null" : databaseInfo.getClass().getName())); + } + return DatabaseRequestTracerNoop.INSTANCE; + } + + Object agentObject = apiProxy.oneAgentSDK_traceSQLDatabaseRequest(agentSdkImpl, (DatabaseInfoImpl) databaseInfo, statement); + if (agentObject == null) { + if (OneAgentSDKFactoryImpl.debugOneAgentSdkStub) { + OneAgentSDKFactoryImpl.logDebug("- OneAgent failed to provide provide object"); + } + return DatabaseRequestTracerNoop.INSTANCE; + } + return new DatabaseRequestTracerProxy(apiProxy, agentObject); + } + } diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OutgoingMessageTracerProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OutgoingMessageTracerProxy.java index 10f1bc8..838c59c 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OutgoingMessageTracerProxy.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OutgoingMessageTracerProxy.java @@ -1,5 +1,5 @@ /* - * Copyright 2018 Dynatrace LLC + * Copyright 2019 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OutgoingWebRequestTracerProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OutgoingWebRequestTracerProxy.java index db8c2e7..180fe72 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OutgoingWebRequestTracerProxy.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OutgoingWebRequestTracerProxy.java @@ -1,5 +1,5 @@ /* - * Copyright 2018 Dynatrace LLC + * Copyright 2019 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/RemoteCallClientProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/RemoteCallClientProxy.java index bd9e937..28bc7c6 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/RemoteCallClientProxy.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/RemoteCallClientProxy.java @@ -1,5 +1,5 @@ /* - * Copyright 2018 Dynatrace LLC + * Copyright 2019 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/RemoteCallServerProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/RemoteCallServerProxy.java index 73c713f..e074bed 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/RemoteCallServerProxy.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/RemoteCallServerProxy.java @@ -1,5 +1,5 @@ /* - * Copyright 2018 Dynatrace LLC + * Copyright 2019 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/SDK2AgentInternalApiProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/SDK2AgentInternalApiProxy.java index 4051a83..18198d6 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/SDK2AgentInternalApiProxy.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/SDK2AgentInternalApiProxy.java @@ -1,5 +1,5 @@ /* - * Copyright 2018 Dynatrace LLC + * Copyright 2019 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -44,6 +44,7 @@ public class SDK2AgentInternalApiProxy { private final Method oneAgentSDK_traceIncomingMessageReceive; private final Method oneAgentSDK_traceIncomingMessageProcess; private final Method oneAgentSDK_traceOutgoingMessage; + private final Method oneAgentSDK_traceSQLDatabaseRequest; private final Method tracer_start; private final Method tracer_end; private final Method tracer_error_1; // string @@ -61,6 +62,9 @@ public class SDK2AgentInternalApiProxy { private final Method incomingWebRequestTracer_addParameter; private final Method messageTracer_setVendorMessageId; private final Method messageTracer_setCorrelationId; + private final Method databaseRequestTracer_setRowsReturned; + private final Method databaseRequestTracer_setRoundTripCount; + public SDK2AgentInternalApiProxy(Object agentImpl) throws NoSuchMethodException, SecurityException { this.agentImpl = agentImpl; @@ -89,8 +93,10 @@ public SDK2AgentInternalApiProxy(Object agentImpl) throws NoSuchMethodException, new Class[] { Object.class, String.class, String.class, String.class, Integer.TYPE, String.class }); oneAgentSDK_traceIncomingMessageProcess = findMethod("oneAgentSDK_traceIncomingMessageProcess", new Class[] { Object.class, String.class, String.class, String.class, Integer.TYPE, String.class }); - oneAgentSDK_traceOutgoingMessage =findMethod("oneAgentSDK_traceOutgoingMessage", + oneAgentSDK_traceOutgoingMessage = findMethod("oneAgentSDK_traceOutgoingMessage", new Class[] { Object.class, String.class, String.class, String.class, Integer.TYPE, String.class }); + oneAgentSDK_traceSQLDatabaseRequest = findMethod("oneAgentSDK_traceSQLDatabaseRequest", + new Class[] { Object.class, String.class, String.class, Integer.TYPE, String.class, String.class }); tracer_start = findMethod("tracer_start", new Class[] { Object.class }); tracer_end = findMethod("tracer_end", new Class[] { Object.class }); tracer_error_1 = findMethod("tracer_error", new Class[] { Object.class, String.class }); @@ -121,6 +127,10 @@ public SDK2AgentInternalApiProxy(Object agentImpl) throws NoSuchMethodException, new Class[] { Object.class, String.class }); messageTracer_setCorrelationId = findMethod("messageTracer_setCorrelationId", new Class[] { Object.class, String.class }); + databaseRequestTracer_setRowsReturned = findMethod("databaseRequestTracer_setRowsReturned", + new Class[] { Object.class, Integer.TYPE }); + databaseRequestTracer_setRoundTripCount = findMethod("databaseRequestTracer_setRoundTripCount", + new Class[] { Object.class, Integer.TYPE }); } private Method findMethod(String name, Class... args) throws NoSuchMethodException, SecurityException { @@ -174,19 +184,28 @@ Object oneAgentSDK_traceOutgoingWebRequest(Object agentSdkImpl, String url, Stri Object oneAgentSDK_traceOutgoingMessage(Object agentSdkImpl, MessagingSystemInfoImpl messagingSystem) { return invoke(oneAgentSDK_traceOutgoingMessage, agentSdkImpl, messagingSystem.getVendorName(), messagingSystem.getDestinationName(), messagingSystem.getDestinationType().getName(), - messagingSystem.getChannelType().getSDKConstant(),messagingSystem.getChannelEndpoint()); + messagingSystem.getChannelType() == null ? -1 : messagingSystem.getChannelType().getSDKConstant(), + messagingSystem.getChannelEndpoint()); } Object oneAgentSDK_traceIncomingMessageReceive(Object agentSdkImpl, MessagingSystemInfoImpl messagingSystem) { return invoke(oneAgentSDK_traceIncomingMessageReceive, agentSdkImpl, messagingSystem.getVendorName(), messagingSystem.getDestinationName(), messagingSystem.getDestinationType().getName(), - messagingSystem.getChannelType().getSDKConstant(),messagingSystem.getChannelEndpoint()); + messagingSystem.getChannelType() == null ? -1 : messagingSystem.getChannelType().getSDKConstant(), + messagingSystem.getChannelEndpoint()); } Object oneAgentSDK_traceIncomingMessageProcess(Object agentSdkImpl, MessagingSystemInfoImpl messagingSystem) { return invoke(oneAgentSDK_traceIncomingMessageProcess, agentSdkImpl, messagingSystem.getVendorName(), messagingSystem.getDestinationName(), messagingSystem.getDestinationType().getName(), - messagingSystem.getChannelType().getSDKConstant(),messagingSystem.getChannelEndpoint()); + messagingSystem.getChannelType() == null ? -1 : messagingSystem.getChannelType().getSDKConstant(), + messagingSystem.getChannelEndpoint()); + } + + Object oneAgentSDK_traceSQLDatabaseRequest(Object agentSdkImpl, DatabaseInfoImpl databaseInfo, String sql) { + return invoke(oneAgentSDK_traceSQLDatabaseRequest, agentSdkImpl, databaseInfo.getName(), databaseInfo.getVendor(), + databaseInfo.getChannelType() == null ? -1 : databaseInfo.getChannelType().getSDKConstant(), + databaseInfo.getChannelEndpoint(), sql); } void oneAgentSDK_setLoggingCallback(Object sdk, Object loggingCallback) { @@ -277,4 +296,12 @@ void messageTracer_setCorrelationId(Object messageTracer, String correlationId) invoke(messageTracer_setCorrelationId, messageTracer, correlationId); } + void databaseRequestTracer_setRowsReturned(Object databaseRequestTracer, int rowsReturned) { + invoke(databaseRequestTracer_setRowsReturned, databaseRequestTracer, rowsReturned); + } + + void databaseRequestTracer_setRoundTripCount(Object databaseRequestTracer, int roundTripCount) { + invoke(databaseRequestTracer_setRoundTripCount, databaseRequestTracer, roundTripCount); + } + } diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/TraceableProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/TraceableProxy.java index 29a946d..6d98f23 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/TraceableProxy.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/TraceableProxy.java @@ -1,5 +1,5 @@ /* - * Copyright 2018 Dynatrace LLC + * Copyright 2019 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/WebApplicationInfoImpl.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/WebApplicationInfoImpl.java index 9cf2a96..acf876f 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/WebApplicationInfoImpl.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/WebApplicationInfoImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2018 Dynatrace LLC + * Copyright 2019 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/package-info.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/package-info.java index 6d3936f..e9b09db 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/package-info.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/package-info.java @@ -1,5 +1,5 @@ /* - * Copyright 2018 Dynatrace LLC + * Copyright 2019 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. From 3c3bd359cd38df9039c278aa75ddc7b742fcd97e Mon Sep 17 00:00:00 2001 From: Armin Ruech Date: Thu, 16 May 2019 16:21:30 +0200 Subject: [PATCH 19/36] Fix readme (WebApplicationInfo) --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 411d49f..4d80b44 100644 --- a/README.md +++ b/README.md @@ -254,11 +254,11 @@ When no service call is being traced, the custom request attributes are dropped. You can use the SDK to trace incoming web requests. This might be useful if Dynatrace does not support the respective web server framework or language processing the incoming web requests. -To trace an incoming web request you first need to create a WebServerInfo object. The info object represents the endpoint of your web server (web server +To trace an incoming web request you first need to create a WebApplicationInfo object. The info object represents the endpoint of your web server (web server name, application name and context root). This object should be reused for all traced web requests within for the same application. ```Java -WebServerInfo wsInfo = oneAgentSdk.createWebServerInfo("WebShopProduction", "CheckoutService", "/api/service/checkout"); +WebApplicationInfo wsInfo = oneAgentSdk.createWebApplicationInfo("WebShopProduction", "CheckoutService", "/api/service/checkout"); ``` To trace a specific incoming web request you then need to create a Tracer object. Make sure you provide all http headers from the request to the SDK by From b7258d0fd35bed7f2ab58731deecf3501fc4e145 Mon Sep 17 00:00:00 2001 From: Alram Lechner Date: Fri, 5 Jul 2019 15:21:56 +0200 Subject: [PATCH 20/36] removed EAP / beta labels (#15) added support policy --- README.md | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 4d80b44..4d9fe58 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,3 @@ -**Disclaimer: This SDK is currently in beta and still work in progress.** - # Dynatrace OneAgent SDK for Java This SDK allows Dynatrace customers to instrument java applications. This is useful to enhance the visibility for proprietary frameworks or @@ -9,7 +7,7 @@ This is the official Java implementation of the [Dynatrace OneAgent SDK](https:/ #### Table of Contents -* [Package contents](#package) +* [Package contents](#package) * [Requirements](#requirements) * [Integration](#integration) * [Dependencies](#dependencies) @@ -45,15 +43,15 @@ This is the official Java implementation of the [Dynatrace OneAgent SDK](https:/ - JRE 1.6 or higher - Dynatrace OneAgent (required versions see below) -|OneAgent SDK for Java|Required OneAgent version| -|:--------------------|:------------------------| -|1.7.0 |>=1.167 | -|1.6.0 |>=1.161 | -|1.4.0 |>=1.151 | -|1.3.0 |>=1.149 | -|1.2.0 |>=1.147 | -|1.1.0 |>=1.143 | -|1.0.3 |>=1.135 | +|OneAgent SDK for Java|Required OneAgent version|Support status| +|:--------------------|:------------------------|:-------------| +|1.7.0 |>=1.167 |Supported | +|1.6.0 |>=1.161 |Supported | +|1.4.0 |>=1.151 |Supported | +|1.3.0 |>=1.149 |Supported | +|1.2.0 |>=1.147 |Supported | +|1.1.0 |>=1.143 |Supported | +|1.0.3 |>=1.135 |Supported | @@ -469,7 +467,11 @@ try { ## Help & Support -The Dynatrace OneAgent SDK for Java is an open source project, currently in beta status. The features are fully supported by Dynatrace. +**Support policy** + +The Dynatrace OneAgent SDK for Java has GA status. The features are fully supported by Dynatrace. + +For detailed support policy see [Dynatrace OneAgent SDK help](https://github.com/Dynatrace/OneAgent-SDK#help). **Get Help** * Ask a question in the product forums From 4a14d9eef8aee430a7d2084e44011ea506b4d15d Mon Sep 17 00:00:00 2001 From: Wolfgang Ziegler Date: Thu, 3 Oct 2019 14:14:01 +0200 Subject: [PATCH 21/36] Documentation update * Fix typos * Lint Markdown * Add info about tracer thread affinity --- README.md | 204 ++++++++++++++++++++++++------------------------------ 1 file changed, 89 insertions(+), 115 deletions(-) diff --git a/README.md b/README.md index 4d9fe58..4aa3c18 100644 --- a/README.md +++ b/README.md @@ -1,47 +1,43 @@ # Dynatrace OneAgent SDK for Java -This SDK allows Dynatrace customers to instrument java applications. This is useful to enhance the visibility for proprietary frameworks or +This SDK allows Dynatrace customers to instrument java applications. This is useful to enhance the visibility for proprietary frameworks or custom frameworks not directly supported by Dynatrace OneAgent out-of-the-box. -This is the official Java implementation of the [Dynatrace OneAgent SDK](https://github.com/Dynatrace/OneAgent-SDK). +This is the official Java implementation of the [Dynatrace OneAgent SDK](https://github.com/Dynatrace/OneAgent-SDK). -#### Table of Contents +## Table of Contents -* [Package contents](#package) +* [Package contents](#package-contents) * [Requirements](#requirements) * [Integration](#integration) - * [Dependencies](#dependencies) - * [Troubleshooting](#troubleshooting) -* [API Concepts](#apiconcepts) - * [OneAgentSDK object](#oneagentsdkobject) - * [Tracers](#tracers) + * [Dependencies](#dependencies) + * [Troubleshooting](#troubleshooting) +* [API concepts](#api-concepts) + * [OneAgentSDK object](#oneagentsdk-object) + * [Tracers](#tracers) * [Features](#features) - * [Trace incoming and outgoing remote calls](#remoting) - * [In process linking](#inprocess) - * [Add custom request attributes](#scav) - * [Trace web requests](#webrequests) - * [Trace incoming web requests](#inwebrequests) - * [Trace outgoing web requests](#outwebrequests) - * [Trace messaging](#messaging) - * [Trace SQL database requests](#databaseRequest) -* [Further reading](#furtherreading) -* [Help & Support](#help) -* [Release notes](#releasenotes) - - + * [Trace incoming and outgoing remote calls](#trace-incoming-and-outgoing-remote-calls) + * [In process linking](#in-process-linking) + * [Add custom request attributes](#add-custom-request-attributes) + * [Trace web requests](#trace-web-requests) + * [Trace incoming web requests](#trace-incoming-web-requests) + * [Trace outgoing web requests](#trace-outgoing-web-requests) + * [Trace messaging](#trace-messaging) + * [Trace SQL database requests](#trace-sql-database-requests) +* [Further reading](#further-reading) +* [Help & support](#help-&-support) +* [Release notes](#release-notes) ## Package contents -- `samples`: contains sample application, which demonstrates the usage of the SDK. see readme inside the samples directory for more details -- `docs`: contains the reference documentation (javadoc). The most recent version is also available online at [https://dynatrace.github.io/OneAgent-SDK-for-Java/](https://dynatrace.github.io/OneAgent-SDK-for-Java/). -- `LICENSE`: license under which the whole SDK and sample applications are published - - +* `samples`: contains sample application, which demonstrates the usage of the SDK. see readme inside the samples directory for more details +* `docs`: contains the reference documentation (javadoc). The most recent version is also available online at [https://dynatrace.github.io/OneAgent-SDK-for-Java/](https://dynatrace.github.io/OneAgent-SDK-for-Java/). +* `LICENSE`: license under which the whole SDK and sample applications are published ## Requirements -- JRE 1.6 or higher -- Dynatrace OneAgent (required versions see below) +* JRE 1.6 or higher +* Dynatrace OneAgent (required versions see below) |OneAgent SDK for Java|Required OneAgent version|Support status| |:--------------------|:------------------------|:-------------| @@ -53,74 +49,68 @@ This is the official Java implementation of the [Dynatrace OneAgent SDK](https:/ |1.1.0 |>=1.143 |Supported | |1.0.3 |>=1.135 |Supported | - - ## Integration - - ### Dependencies + If you want to integrate the OneAgent SDK into your application, just add the following maven dependency: - - com.dynatrace.oneagent.sdk.java - oneagent-sdk - 1.7.0 - compile - +```xml + + com.dynatrace.oneagent.sdk.java + oneagent-sdk + 1.7.0 + compile + +``` -If you prefer to integrate the SDK using plain jar file, just download them from mavenCentral. You can find the download links for each +If you prefer to integrate the SDK using plain jar file, just download them from mavenCentral. You can find the download links for each version in the [Release notes](#releasenotes) section. The Dynatrace OneAgent SDK for Java has no further dependencies. - - ### Troubleshooting -If the SDK can't connect to the OneAgent (see usage of SDKState in samples) or you you don't see the desired result in the Dynatrace UI, + +If the SDK can't connect to the OneAgent (see usage of SDKState in samples) or you you don't see the desired result in the Dynatrace UI, you can set the following system property to print debug information to standard out: - - -Dcom.dynatrace.oneagent.sdk.debug=true -Additionally you should/have to ensure, that you have set a `LoggingCallback`. For usage see class `StdErrLoggingCallback` in -`remotecall-server` module (in samples/remotecall folder). +```java +-Dcom.dynatrace.oneagent.sdk.debug=true +``` - +Additionally you should/have to ensure, that you have set a `LoggingCallback`. For usage see class `StdErrLoggingCallback` in +`remotecall-server` module (in samples/remotecall folder). -## API Concepts +## API concepts Common concepts of the Dynatrace OneAgent SDK are explained the [Dynatrace OneAgent SDK repository](https://github.com/Dynatrace/OneAgent-SDK#apiconcepts). - - ### OneAgentSDK object -Use OneAgentSDKFactory.createInstance() to obtain an OneAgentSDK instance. You should reuse this object over the whole application +Use OneAgentSDKFactory.createInstance() to obtain an OneAgentSDK instance. You should reuse this object over the whole application and if possible JVM lifetime: ```Java OneAgentSDK oneAgentSdk = OneAgentSDKFactory.createInstance(); switch (oneAgentSdk.getCurrentState()) { case ACTIVE: - break; + break; case PERMANENTLY_INACTIVE: - break; + break; case TEMPORARILY_INACTIVE: - break; + break; default: - break; + break; } ``` -It is good practice to check the SDK state regularly as it may change at every point of time (except PERMANENTLY_INACTIVE never +It is good practice to check the SDK state regularly as it may change at every point of time (except PERMANENTLY_INACTIVE never changes over JVM lifetime). - - ### Tracers -To trace any kind of call you first need to create a Tracer. The Tracer object represents the logical and physical endpoint that -you want to call. A Tracer serves two purposes. First to time the call (duraction, cpu and more) and report errors. That is why +To trace any kind of call you first need to create a Tracer. The Tracer object represents the logical and physical endpoint that +you want to call. A Tracer serves two purposes. First to time the call (duration, cpu and more) and report errors. That is why each Tracer has these three methods. The error method must be called only once, and it must be in between start and end. ```Java @@ -130,15 +120,16 @@ void error(String message); void end(); ``` -The second purpose of a Tracer is to allow tracing across process boundaries. To achieve that these kind of traces supply so called -tags. Tags are strings or byte arrays that enable Dynatrace to trace a transaction end to end. As such the tag is the one information -that you need to transport across these calls yourselfs. - +The second purpose of a Tracer is to allow tracing across process boundaries. To achieve that these kind of traces supply so called +tags. Tags are strings or byte arrays that enable Dynatrace to trace a transaction end to end. As such the tag is the one information +that you need to transport across these calls as an SDK user. + +A Tracer instance can only be used from the thread on which it was created. See [in process linking](#in-process-linking) for tracing across thread boundaries. ## Features -The feature sets differ slightly with each language implementation. More functionality will be added over time, see Planned features for OneAgent SDK +The feature sets differ slightly with each language implementation. More functionality will be added over time, see Planned features for OneAgent SDK for details on upcoming features. A more detailed specification of the features can be found in [Dynatrace OneAgent SDK](https://github.com/Dynatrace/OneAgent-SDK#features). @@ -147,21 +138,19 @@ A more detailed specification of the features can be found in [Dynatrace OneAgen |:----------------------------------------------|:-------------------------------------| |Trace database requests |>=1.7.0 | |Trace messaging |>=1.6.0 | -|Outgoing webrequests |>=1.4.0 | -|Incoming webrequests |>=1.3.0 | +|Outgoing web requests |>=1.4.0 | +|Incoming web requests |>=1.3.0 | |Custom request attributes |>=1.2.0 | |In process linking |>=1.1.0 | |Trace incoming and outgoing remote calls |>=1.0.3 | - - ### Trace incoming and outgoing remote calls -You can use the SDK to trace proprietary IPC communication from one process to the other. This will enable you to see full Service Flow, PurePath +You can use the SDK to trace proprietary IPC communication from one process to the other. This will enable you to see full Service Flow, PurePath and Smartscape topology for remoting technologies that Dynatrace is not aware of. -To trace any kind of remote call you first need to create a Tracer. The Tracer object represents the endpoint that you want to call, as such you -need to supply the name of the remote service and remote method. In addition you need to transport the tag in your remote call to the server side +To trace any kind of remote call you first need to create a Tracer. The Tracer object represents the endpoint that you want to call, as such you +need to supply the name of the remote service and remote method. In addition you need to transport the tag in your remote call to the server side if you want to trace it end to end. ```Java @@ -180,7 +169,7 @@ try { } ``` -On the server side you need to wrap the handling and processing of your remote call as well. This will not only trace the server side call and +On the server side you need to wrap the handling and processing of your remote call as well. This will not only trace the server side call and everything that happens, it will also connect it to the calling side. ```Java @@ -199,11 +188,10 @@ try { } ``` - - ### In process linking You can use the SDK to link inside a single process. To link for eg. an asynchronous execution, you need the following code: + ```Java OneAgentSDK oneAgentSdk = OneAgentSDKFactory.createInstance(); InProcessLink inProcessLink = oneAgentSdk.createInProcessLink(); @@ -225,11 +213,9 @@ try { } ``` - - ### Add custom request attributes -You can use the SDK to add custom request attributes to the current traced service. Custom request attributes allow you to do advanced filtering of +You can use the SDK to add custom request attributes to the current traced service. Custom request attributes allow you to do advanced filtering of your requests in Dynatrace. Adding custom request attributes to the currently traced service call is simple. Just call one of the addCustomRequestAttribute methods with your key and value: @@ -241,29 +227,24 @@ oneAgentSDK.addCustomRequestAttribute("salesAmount", 2500); When no service call is being traced, the custom request attributes are dropped. - - ### Trace web requests - - #### Trace incoming web requests -You can use the SDK to trace incoming web requests. This might be useful if Dynatrace does not support the respective web server framework or language +You can use the SDK to trace incoming web requests. This might be useful if Dynatrace does not support the respective web server framework or language processing the incoming web requests. -To trace an incoming web request you first need to create a WebApplicationInfo object. The info object represents the endpoint of your web server (web server -name, application name and context root). This object should be reused for all traced web requests within for the same application. +To trace an incoming web request you first need to create a WebApplicationInfo object. The info object represents the endpoint of your web server (web server name, application name and context root). This object should be reused for all traced web requests within for the same application. ```Java WebApplicationInfo wsInfo = oneAgentSdk.createWebApplicationInfo("WebShopProduction", "CheckoutService", "/api/service/checkout"); ``` -To trace a specific incoming web request you then need to create a Tracer object. Make sure you provide all http headers from the request to the SDK by +To trace a specific incoming web request you then need to create a Tracer object. Make sure you provide all http headers from the request to the SDK by calling addRequestHeader(...). This ensures that tagging with our built-in sensor will work. ```Java -IncomingWebRequestTracer tracer = oneAgentSdk.traceIncomingWebRequest(wsInfo,"https://www.oursupershop.com/api/service/checkout/save","POST") +IncomingWebRequestTracer tracer = oneAgentSdk.traceIncomingWebRequest(wsInfo,"https://www.oursupershop.com/api/service/checkout/save", "POST") for (Entry headerField : httpRequest.getHeaders().entrySet()) { incomingWebrequestTracer.addRequestHeader(headerField.getKey(), headerField.getValue()); @@ -290,14 +271,12 @@ try { } ``` - - #### Trace outgoing web requests -You can use the SDK to trace outgoing web requests. This might be useful if Dynatrace does not support the respective http library or +You can use the SDK to trace outgoing web requests. This might be useful if Dynatrace does not support the respective http library or language sending the request. -To trace an outgoing web request you need to create a Tracer object. It is important to send the Dynatrace Header. This ensures that +To trace an outgoing web request you need to create a Tracer object. It is important to send the Dynatrace Header. This ensures that tagging with our built-in sensor will work. ```Java @@ -311,19 +290,19 @@ for (Entry entry : yourHttpClient.getRequestHeaders().entrySet() outgoingWebRequestTracer.start(); try { yourHttpClient.setUrl(url); - + // sending HTTP header OneAgentSDK.DYNATRACE_HTTP_HEADERNAME is necessary for tagging: yourHttpClient.addRequestHeader(OneAgentSDK.DYNATRACE_HTTP_HEADERNAME, outgoingWebRequestTracer.getDynatraceStringTag()); yourHttpClient.processHttpRequest(); - + for (Entry> entry : yourHttpClient.getHeaderFields().entrySet()) { for (String value : entry.getValue()) { outgoingWebRequestTracer.addResponseHeader(entry.getKey(), value); } } outgoingWebRequestTracer.setStatusCode(yourHttpClient.getResponseCode()); - + } catch (Exception e) { outgoingWebRequestTracer.error(e); // rethrow or add your exception handling @@ -331,7 +310,6 @@ try { outgoingWebRequestTracer.end(); } ``` - ### Trace messaging @@ -342,7 +320,7 @@ You can use the SDK to trace messages sent or received via messaging & queuing s * processing a received message To trace an outgoing message, you simply need to create a MessagingSystemInfo and call traceOutgoingMessage with that instance: - + ```Java MessagingSystemInfo messagingSystemInfo = oneAgentSDK.createMessagingSystemInfo("myMessagingSystem", "requestQueue", MessageDestinationType.QUEUE, ChannelType.TCP_IP, "localhost:4711"); @@ -356,7 +334,7 @@ try { outgoingMessageTracer.setCorrelationId(toSend.correlationId); theQueue.send(messageToSend); - + // optional: add messageid provided from messaging system outgoingMessageTracer.setVendorMessageId(toSend.getMessageId()); } catch (Exception e) { @@ -367,7 +345,7 @@ try { } ``` -On the incoming side, we need to differentiate between the blocking receiving part and processing the received message. Therefore two +On the incoming side, we need to differentiate between the blocking receiving part and processing the received message. Therefore two different tracers are being used: `IncomingMessageReceiveTracer` and `IncomingMessageProcessTracer`. ```Java @@ -376,7 +354,7 @@ MessagingSystemInfo messagingSystemInfo = oneAgentSDK.createMessagingSystemInfo( // message receiving daemon task: while(true) { - IncomingMessageReceiveTracer incomingMessageReceiveTracer = + IncomingMessageReceiveTracer incomingMessageReceiveTracer = oneAgentSDK.traceIncomingMessageReceive(messagingSystemInfo); incomingMessageReceiveTracer.start(); try { @@ -390,7 +368,7 @@ while(true) { incomingMessageProcessTracer.setCorrelationId(queryMessage.correlationId); incomingMessageProcessTracer.start(); try { - // do the work ... + // do the work ... } catch (Exception e) { incomingMessageProcessTracer.error(e.getMessage()); Logger.logError(e); @@ -406,7 +384,7 @@ while(true) { } ``` -In case of non-blocking receive (e. g. via eventhandler), there is no need to use `IncomingMessageReceiveTracer` - just trace processing +In case of non-blocking receive (e. g. via event handler), there is no need to use `IncomingMessageReceiveTracer` - just trace processing of the message by using the `IncomingMessageProcessTracer`: ```Java @@ -422,7 +400,7 @@ public void onMessage(Message message) { incomingMessageProcessTracer.setCorrelationId(queryMessage.correlationId); incomingMessageProcessTracer.start(); try { - // do the work ... + // do the work ... } catch (Exception e) { incomingMessageProcessTracer.error(e.getMessage()); // rethrow or add your exception handling @@ -431,7 +409,6 @@ public void onMessage(Message message) { } } ``` - ### Trace SQL database requests @@ -455,29 +432,27 @@ try { } ``` - - -## Further readings +## Further reading * What is the OneAgent SDK? in the Dynatrace documentation * Feedback & Roadmap thread in AnswerHub * Blog: Dynatrace OneAgent SDK for Java: End-to-end monitoring for proprietary Java frameworks - - -## Help & Support +## Help & support -**Support policy** +### Support policy The Dynatrace OneAgent SDK for Java has GA status. The features are fully supported by Dynatrace. For detailed support policy see [Dynatrace OneAgent SDK help](https://github.com/Dynatrace/OneAgent-SDK#help). -**Get Help** +### Get help + * Ask a question in the product forums * Read the product documentation **Open a GitHub issue to:** + * Report minor defects, minor items or typos * Ask for improvements or changes in the SDK API * Ask any questions related to the community effort @@ -485,16 +460,15 @@ For detailed support policy see [Dynatrace OneAgent SDK help](https://github.com SLAs don't apply for GitHub tickets **Customers can open a ticket on the Dynatrace support portal to:** + * Get support from the Dynatrace technical support engineering team * Manage and resolve product related technical issues SLAs apply according to the customer's support level. - - ## Release notes -see also https://github.com/Dynatrace/OneAgent-SDK-for-Java/releases +see also |Version|Description |Links | |:------|:-------------------------------------------|:----------------------------------------| From 853031d6ae3642c9aee962d3a93492c4254600d6 Mon Sep 17 00:00:00 2001 From: Wolfgang Ziegler Date: Wed, 9 Oct 2019 16:08:09 +0200 Subject: [PATCH 22/36] Doc improvement --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 4aa3c18..b1517f0 100644 --- a/README.md +++ b/README.md @@ -432,6 +432,9 @@ try { } ``` +Please note that SQL database traces are only created if they occur within some other SDK trace (e.g. incoming remote call) +or a OneAgent built-in trace (e.g. incoming web request). + ## Further reading * What is the OneAgent SDK? in the Dynatrace documentation From f818d2368e31ce679e7bc4d05be3a2c34fa5f002 Mon Sep 17 00:00:00 2001 From: Armin Ruech Date: Thu, 10 Oct 2019 11:21:49 +0200 Subject: [PATCH 23/36] Fix messaging sample (#19) --- samples/messaging/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/messaging/pom.xml b/samples/messaging/pom.xml index 256d4c7..5835fed 100644 --- a/samples/messaging/pom.xml +++ b/samples/messaging/pom.xml @@ -6,14 +6,14 @@ com.dynatrace.oneagent.sdk.samples.messaging messaging-sample - 1.5.0 + 1.6.0 jar com.dynatrace.oneagent.sdk.java oneagent-sdk - 1.5.0 + 1.6.0 compile From 8bdf7a8d1d0e2a3183734f76f9ea82f8150ccb30 Mon Sep 17 00:00:00 2001 From: Peter Schmidbauer Date: Tue, 15 Oct 2019 10:06:04 +0200 Subject: [PATCH 24/36] Fix typos and improve wording in readme (#20) --- README.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index b1517f0..3747e54 100644 --- a/README.md +++ b/README.md @@ -30,9 +30,9 @@ This is the official Java implementation of the [Dynatrace OneAgent SDK](https:/ ## Package contents -* `samples`: contains sample application, which demonstrates the usage of the SDK. see readme inside the samples directory for more details +* `samples`: contains sample application, which demonstrates the usage of the SDK. See readme inside the samples directory for more details. * `docs`: contains the reference documentation (javadoc). The most recent version is also available online at [https://dynatrace.github.io/OneAgent-SDK-for-Java/](https://dynatrace.github.io/OneAgent-SDK-for-Java/). -* `LICENSE`: license under which the whole SDK and sample applications are published +* `LICENSE`: license under which the whole SDK and sample applications are published. ## Requirements @@ -53,7 +53,7 @@ This is the official Java implementation of the [Dynatrace OneAgent SDK](https:/ ### Dependencies -If you want to integrate the OneAgent SDK into your application, just add the following maven dependency: +If you want to integrate the OneAgent SDK into your application, just add the following Maven dependency: ```xml @@ -64,7 +64,7 @@ If you want to integrate the OneAgent SDK into your application, just add the fo ``` -If you prefer to integrate the SDK using plain jar file, just download them from mavenCentral. You can find the download links for each +If you prefer to integrate the SDK using plain jar file, just download them from Maven Central. You can find the download links for each version in the [Release notes](#releasenotes) section. The Dynatrace OneAgent SDK for Java has no further dependencies. @@ -83,12 +83,12 @@ Additionally you should/have to ensure, that you have set a `LoggingCallback`. F ## API concepts -Common concepts of the Dynatrace OneAgent SDK are explained the [Dynatrace OneAgent SDK repository](https://github.com/Dynatrace/OneAgent-SDK#apiconcepts). +Common concepts of the Dynatrace OneAgent SDK are explained in the [Dynatrace OneAgent SDK repository](https://github.com/Dynatrace/OneAgent-SDK#apiconcepts). ### OneAgentSDK object -Use OneAgentSDKFactory.createInstance() to obtain an OneAgentSDK instance. You should reuse this object over the whole application -and if possible JVM lifetime: +Use OneAgentSDKFactory.createInstance() to obtain an OneAgentSDK instance. You should reuse this object throughout the whole application +and, if possible, JVM lifetime: ```Java OneAgentSDK oneAgentSdk = OneAgentSDKFactory.createInstance(); @@ -104,13 +104,13 @@ default: } ``` -It is good practice to check the SDK state regularly as it may change at every point of time (except PERMANENTLY_INACTIVE never -changes over JVM lifetime). +It is good practice to check the SDK state regularly as it may change at any point in time (except for PERMANENTLY_INACTIVE, which never +changes throughout the JVM lifetime). ### Tracers To trace any kind of call you first need to create a Tracer. The Tracer object represents the logical and physical endpoint that -you want to call. A Tracer serves two purposes. First to time the call (duration, cpu and more) and report errors. That is why +you want to call. A Tracer serves two purposes. First, to time the call (duration, cpu and more) and report errors. That is why each Tracer has these three methods. The error method must be called only once, and it must be in between start and end. ```Java From c5dc1097245b285ebfca962b347a60e17aaeb295 Mon Sep 17 00:00:00 2001 From: Wolfgang Ziegler Date: Tue, 15 Oct 2019 18:48:54 +0200 Subject: [PATCH 25/36] Add link to spec repo regarding message tracers. (#21) --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 3747e54..0626652 100644 --- a/README.md +++ b/README.md @@ -410,6 +410,8 @@ public void onMessage(Message message) { } ``` +> Please also see the [documentation on messaging tracers in the specification repository](https://github.com/Dynatrace/OneAgent-SDK#messaging). + ### Trace SQL database requests A SQL database request is traced by calling `traceSqlDatabaseRequest`. For details about usage see the [OneAgentSDK specification](https://github.com/Dynatrace/OneAgent-SDK#database) From 8a56f2a5a0b380404473ff84201b629e39792023 Mon Sep 17 00:00:00 2001 From: "wolfgang.ziegler" Date: Thu, 4 Feb 2021 12:59:54 +0100 Subject: [PATCH 26/36] Release 1.8 --- README.md | 997 +++++++++--------- docs/allclasses-frame.html | 8 +- docs/allclasses-noframe.html | 8 +- .../oneagent/sdk/OneAgentSDKFactory.html | 8 +- .../oneagent/sdk/api/CustomServiceTracer.html | 197 ++++ .../sdk/api/DatabaseRequestTracer.html | 12 +- .../oneagent/sdk/api/InProcessLink.html | 8 +- .../oneagent/sdk/api/InProcessLinkTracer.html | 8 +- .../sdk/api/IncomingMessageProcessTracer.html | 8 +- .../sdk/api/IncomingMessageReceiveTracer.html | 8 +- .../sdk/api/IncomingRemoteCallTracer.html | 8 +- .../oneagent/sdk/api/IncomingTaggable.html | 8 +- .../sdk/api/IncomingWebRequestTracer.html | 8 +- .../oneagent/sdk/api/LoggingCallback.html | 8 +- .../oneagent/sdk/api/OneAgentSDK.html | 35 +- .../sdk/api/OutgoingMessageTracer.html | 8 +- .../sdk/api/OutgoingRemoteCallTracer.html | 8 +- .../oneagent/sdk/api/OutgoingTaggable.html | 8 +- .../sdk/api/OutgoingWebRequestTracer.html | 8 +- .../dynatrace/oneagent/sdk/api/Tracer.html | 10 +- .../oneagent/sdk/api/enums/ChannelType.html | 8 +- .../sdk/api/enums/DatabaseVendor.html | 8 +- .../sdk/api/enums/MessageDestinationType.html | 8 +- .../sdk/api/enums/MessageSystemVendor.html | 8 +- .../oneagent/sdk/api/enums/SDKState.html | 8 +- .../oneagent/sdk/api/enums/package-frame.html | 6 +- .../sdk/api/enums/package-summary.html | 8 +- .../oneagent/sdk/api/enums/package-tree.html | 10 +- .../oneagent/sdk/api/infos/DatabaseInfo.html | 8 +- .../sdk/api/infos/MessagingSystemInfo.html | 8 +- .../sdk/api/infos/WebApplicationInfo.html | 8 +- .../oneagent/sdk/api/infos/package-frame.html | 6 +- .../sdk/api/infos/package-summary.html | 8 +- .../oneagent/sdk/api/infos/package-tree.html | 8 +- .../oneagent/sdk/api/metric/FloatCounter.html | 225 ++++ .../oneagent/sdk/api/metric/FloatGauge.html | 225 ++++ .../sdk/api/metric/FloatStatistics.html | 225 ++++ .../sdk/api/metric/IntegerCounter.html | 225 ++++ .../oneagent/sdk/api/metric/IntegerGauge.html | 225 ++++ .../sdk/api/metric/IntegerStatistics.html | 225 ++++ .../oneagent/sdk/api/metric/Metric.html | 210 ++++ .../sdk/api/metric/package-frame.html | 44 + .../sdk/api/metric/package-summary.html | 179 ++++ .../oneagent/sdk/api/metric/package-tree.html | 151 +++ .../oneagent/sdk/api/package-frame.html | 8 +- .../oneagent/sdk/api/package-summary.html | 12 +- .../oneagent/sdk/api/package-tree.html | 10 +- .../dynatrace/oneagent/sdk/package-frame.html | 6 +- .../oneagent/sdk/package-summary.html | 8 +- .../dynatrace/oneagent/sdk/package-tree.html | 8 +- docs/constant-values.html | 8 +- docs/deprecated-list.html | 8 +- docs/help-doc.html | 8 +- docs/index-all.html | 13 +- docs/index.html | 40 +- docs/overview-frame.html | 6 +- docs/overview-summary.html | 10 +- docs/overview-tree.html | 12 +- docs/package-list | 0 docs/resources/inherit.gif | Bin docs/stylesheet.css | 0 .../oneagent/sdk/OneAgentSDKFactory.java | 2 +- .../oneagent/sdk/api/CustomServiceTracer.java | 25 + .../sdk/api/DatabaseRequestTracer.java | 4 +- .../oneagent/sdk/api/InProcessLink.java | 2 +- .../oneagent/sdk/api/InProcessLinkTracer.java | 2 +- .../sdk/api/IncomingMessageProcessTracer.java | 2 +- .../sdk/api/IncomingMessageReceiveTracer.java | 2 +- .../sdk/api/IncomingRemoteCallTracer.java | 2 +- .../oneagent/sdk/api/IncomingTaggable.java | 2 +- .../sdk/api/IncomingWebRequestTracer.java | 2 +- .../oneagent/sdk/api/LoggingCallback.java | 2 +- .../oneagent/sdk/api/OneAgentSDK.java | 16 +- .../sdk/api/OutgoingMessageTracer.java | 2 +- .../sdk/api/OutgoingRemoteCallTracer.java | 2 +- .../oneagent/sdk/api/OutgoingTaggable.java | 2 +- .../sdk/api/OutgoingWebRequestTracer.java | 2 +- .../dynatrace/oneagent/sdk/api/Tracer.java | 2 +- .../oneagent/sdk/api/enums/ChannelType.java | 2 +- .../sdk/api/enums/DatabaseVendor.java | 2 +- .../sdk/api/enums/MessageDestinationType.java | 2 +- .../sdk/api/enums/MessageSystemVendor.java | 2 +- .../oneagent/sdk/api/enums/SDKState.java | 2 +- .../oneagent/sdk/api/infos/DatabaseInfo.java | 2 +- .../sdk/api/infos/MessagingSystemInfo.java | 2 +- .../sdk/api/infos/WebApplicationInfo.java | 2 +- .../sdk/impl/OneAgentSDKFactoryImpl.java | 4 +- .../sdk/impl/SDKInstanceProvider.java | 2 +- .../impl/noop/CustomServiceTracerNoop.java | 42 + .../sdk/impl/noop/DatabaseInfoNoop.java | 7 +- .../impl/noop/DatabaseRequestTracerNoop.java | 4 +- .../sdk/impl/noop/InProcessLinkNoop.java | 6 +- .../impl/noop/InProcessLinkTracerNoop.java | 6 +- .../IncomingMessageProcessTracerNoop.java | 4 +- .../IncomingMessageReceiveTracerNoop.java | 4 +- .../noop/IncomingWebRequestTracerNoop.java | 4 +- .../impl/noop/MessagingSystemInfoNoop.java | 5 +- .../oneagent/sdk/impl/noop/NodeNoop.java | 4 +- .../sdk/impl/noop/OneAgentSDKNoop.java | 12 +- .../impl/noop/OutgoingMessageTracerNoop.java | 4 +- .../noop/OutgoingWebRequestTracerNoop.java | 7 +- .../impl/noop/RemoteCallClientTracerNoop.java | 4 +- .../impl/noop/RemoteCallServerTracerNoop.java | 4 +- .../sdk/impl/noop/WebApplicationInfoNoop.java | 6 +- .../impl/proxy/CustomServiceTracerProxy.java | 25 + .../sdk/impl/proxy/DatabaseInfoImpl.java | 4 +- .../proxy/DatabaseRequestTracerProxy.java | 4 +- .../sdk/impl/proxy/InProcessLinkImpl.java | 6 +- .../impl/proxy/InProcessLinkTracerProxy.java | 4 +- .../IncomingMessageProcessTracerProxy.java | 6 +- .../IncomingMessageReceiveTracerProxy.java | 6 +- .../impl/proxy/IncomingWebRequestProxy.java | 6 +- .../impl/proxy/MessagingSystemInfoImpl.java | 4 +- .../sdk/impl/proxy/OneAgentSDKProxy.java | 49 +- .../proxy/OutgoingMessageTracerProxy.java | 4 +- .../proxy/OutgoingWebRequestTracerProxy.java | 4 +- .../sdk/impl/proxy/RemoteCallClientProxy.java | 4 +- .../sdk/impl/proxy/RemoteCallServerProxy.java | 4 +- .../impl/proxy/SDK2AgentInternalApiProxy.java | 13 +- .../sdk/impl/proxy/TraceableProxy.java | 2 +- .../impl/proxy/WebApplicationInfoImpl.java | 4 +- .../oneagent/sdk/impl/proxy/package-info.java | 2 +- 122 files changed, 3123 insertions(+), 818 deletions(-) mode change 100644 => 100755 README.md mode change 100644 => 100755 docs/allclasses-frame.html mode change 100644 => 100755 docs/allclasses-noframe.html mode change 100644 => 100755 docs/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.html create mode 100755 docs/com/dynatrace/oneagent/sdk/api/CustomServiceTracer.html mode change 100644 => 100755 docs/com/dynatrace/oneagent/sdk/api/DatabaseRequestTracer.html mode change 100644 => 100755 docs/com/dynatrace/oneagent/sdk/api/InProcessLink.html mode change 100644 => 100755 docs/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.html mode change 100644 => 100755 docs/com/dynatrace/oneagent/sdk/api/IncomingMessageProcessTracer.html mode change 100644 => 100755 docs/com/dynatrace/oneagent/sdk/api/IncomingMessageReceiveTracer.html mode change 100644 => 100755 docs/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.html mode change 100644 => 100755 docs/com/dynatrace/oneagent/sdk/api/IncomingTaggable.html mode change 100644 => 100755 docs/com/dynatrace/oneagent/sdk/api/IncomingWebRequestTracer.html mode change 100644 => 100755 docs/com/dynatrace/oneagent/sdk/api/LoggingCallback.html mode change 100644 => 100755 docs/com/dynatrace/oneagent/sdk/api/OneAgentSDK.html mode change 100644 => 100755 docs/com/dynatrace/oneagent/sdk/api/OutgoingMessageTracer.html mode change 100644 => 100755 docs/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.html mode change 100644 => 100755 docs/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.html mode change 100644 => 100755 docs/com/dynatrace/oneagent/sdk/api/OutgoingWebRequestTracer.html mode change 100644 => 100755 docs/com/dynatrace/oneagent/sdk/api/Tracer.html mode change 100644 => 100755 docs/com/dynatrace/oneagent/sdk/api/enums/ChannelType.html mode change 100644 => 100755 docs/com/dynatrace/oneagent/sdk/api/enums/DatabaseVendor.html mode change 100644 => 100755 docs/com/dynatrace/oneagent/sdk/api/enums/MessageDestinationType.html mode change 100644 => 100755 docs/com/dynatrace/oneagent/sdk/api/enums/MessageSystemVendor.html mode change 100644 => 100755 docs/com/dynatrace/oneagent/sdk/api/enums/SDKState.html mode change 100644 => 100755 docs/com/dynatrace/oneagent/sdk/api/enums/package-frame.html mode change 100644 => 100755 docs/com/dynatrace/oneagent/sdk/api/enums/package-summary.html mode change 100644 => 100755 docs/com/dynatrace/oneagent/sdk/api/enums/package-tree.html mode change 100644 => 100755 docs/com/dynatrace/oneagent/sdk/api/infos/DatabaseInfo.html mode change 100644 => 100755 docs/com/dynatrace/oneagent/sdk/api/infos/MessagingSystemInfo.html mode change 100644 => 100755 docs/com/dynatrace/oneagent/sdk/api/infos/WebApplicationInfo.html mode change 100644 => 100755 docs/com/dynatrace/oneagent/sdk/api/infos/package-frame.html mode change 100644 => 100755 docs/com/dynatrace/oneagent/sdk/api/infos/package-summary.html mode change 100644 => 100755 docs/com/dynatrace/oneagent/sdk/api/infos/package-tree.html create mode 100755 docs/com/dynatrace/oneagent/sdk/api/metric/FloatCounter.html create mode 100755 docs/com/dynatrace/oneagent/sdk/api/metric/FloatGauge.html create mode 100755 docs/com/dynatrace/oneagent/sdk/api/metric/FloatStatistics.html create mode 100755 docs/com/dynatrace/oneagent/sdk/api/metric/IntegerCounter.html create mode 100755 docs/com/dynatrace/oneagent/sdk/api/metric/IntegerGauge.html create mode 100755 docs/com/dynatrace/oneagent/sdk/api/metric/IntegerStatistics.html create mode 100755 docs/com/dynatrace/oneagent/sdk/api/metric/Metric.html create mode 100755 docs/com/dynatrace/oneagent/sdk/api/metric/package-frame.html create mode 100755 docs/com/dynatrace/oneagent/sdk/api/metric/package-summary.html create mode 100755 docs/com/dynatrace/oneagent/sdk/api/metric/package-tree.html mode change 100644 => 100755 docs/com/dynatrace/oneagent/sdk/api/package-frame.html mode change 100644 => 100755 docs/com/dynatrace/oneagent/sdk/api/package-summary.html mode change 100644 => 100755 docs/com/dynatrace/oneagent/sdk/api/package-tree.html mode change 100644 => 100755 docs/com/dynatrace/oneagent/sdk/package-frame.html mode change 100644 => 100755 docs/com/dynatrace/oneagent/sdk/package-summary.html mode change 100644 => 100755 docs/com/dynatrace/oneagent/sdk/package-tree.html mode change 100644 => 100755 docs/constant-values.html mode change 100644 => 100755 docs/deprecated-list.html mode change 100644 => 100755 docs/help-doc.html mode change 100644 => 100755 docs/index-all.html mode change 100644 => 100755 docs/index.html mode change 100644 => 100755 docs/overview-frame.html mode change 100644 => 100755 docs/overview-summary.html mode change 100644 => 100755 docs/overview-tree.html mode change 100644 => 100755 docs/package-list mode change 100644 => 100755 docs/resources/inherit.gif mode change 100644 => 100755 docs/stylesheet.css create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/api/CustomServiceTracer.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/impl/noop/CustomServiceTracerNoop.java create mode 100644 src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/CustomServiceTracerProxy.java diff --git a/README.md b/README.md old mode 100644 new mode 100755 index 0626652..b592827 --- a/README.md +++ b/README.md @@ -1,486 +1,511 @@ -# Dynatrace OneAgent SDK for Java - -This SDK allows Dynatrace customers to instrument java applications. This is useful to enhance the visibility for proprietary frameworks or -custom frameworks not directly supported by Dynatrace OneAgent out-of-the-box. - -This is the official Java implementation of the [Dynatrace OneAgent SDK](https://github.com/Dynatrace/OneAgent-SDK). - -## Table of Contents - -* [Package contents](#package-contents) -* [Requirements](#requirements) -* [Integration](#integration) - * [Dependencies](#dependencies) - * [Troubleshooting](#troubleshooting) -* [API concepts](#api-concepts) - * [OneAgentSDK object](#oneagentsdk-object) - * [Tracers](#tracers) -* [Features](#features) - * [Trace incoming and outgoing remote calls](#trace-incoming-and-outgoing-remote-calls) - * [In process linking](#in-process-linking) - * [Add custom request attributes](#add-custom-request-attributes) - * [Trace web requests](#trace-web-requests) - * [Trace incoming web requests](#trace-incoming-web-requests) - * [Trace outgoing web requests](#trace-outgoing-web-requests) - * [Trace messaging](#trace-messaging) - * [Trace SQL database requests](#trace-sql-database-requests) -* [Further reading](#further-reading) -* [Help & support](#help-&-support) -* [Release notes](#release-notes) - -## Package contents - -* `samples`: contains sample application, which demonstrates the usage of the SDK. See readme inside the samples directory for more details. -* `docs`: contains the reference documentation (javadoc). The most recent version is also available online at [https://dynatrace.github.io/OneAgent-SDK-for-Java/](https://dynatrace.github.io/OneAgent-SDK-for-Java/). -* `LICENSE`: license under which the whole SDK and sample applications are published. - -## Requirements - -* JRE 1.6 or higher -* Dynatrace OneAgent (required versions see below) - -|OneAgent SDK for Java|Required OneAgent version|Support status| -|:--------------------|:------------------------|:-------------| -|1.7.0 |>=1.167 |Supported | -|1.6.0 |>=1.161 |Supported | -|1.4.0 |>=1.151 |Supported | -|1.3.0 |>=1.149 |Supported | -|1.2.0 |>=1.147 |Supported | -|1.1.0 |>=1.143 |Supported | -|1.0.3 |>=1.135 |Supported | - -## Integration - -### Dependencies - -If you want to integrate the OneAgent SDK into your application, just add the following Maven dependency: - -```xml - - com.dynatrace.oneagent.sdk.java - oneagent-sdk - 1.7.0 - compile - -``` - -If you prefer to integrate the SDK using plain jar file, just download them from Maven Central. You can find the download links for each -version in the [Release notes](#releasenotes) section. - -The Dynatrace OneAgent SDK for Java has no further dependencies. - -### Troubleshooting - -If the SDK can't connect to the OneAgent (see usage of SDKState in samples) or you you don't see the desired result in the Dynatrace UI, -you can set the following system property to print debug information to standard out: - -```java --Dcom.dynatrace.oneagent.sdk.debug=true -``` - -Additionally you should/have to ensure, that you have set a `LoggingCallback`. For usage see class `StdErrLoggingCallback` in -`remotecall-server` module (in samples/remotecall folder). - -## API concepts - -Common concepts of the Dynatrace OneAgent SDK are explained in the [Dynatrace OneAgent SDK repository](https://github.com/Dynatrace/OneAgent-SDK#apiconcepts). - -### OneAgentSDK object - -Use OneAgentSDKFactory.createInstance() to obtain an OneAgentSDK instance. You should reuse this object throughout the whole application -and, if possible, JVM lifetime: - -```Java -OneAgentSDK oneAgentSdk = OneAgentSDKFactory.createInstance(); -switch (oneAgentSdk.getCurrentState()) { -case ACTIVE: - break; -case PERMANENTLY_INACTIVE: - break; -case TEMPORARILY_INACTIVE: - break; -default: - break; -} -``` - -It is good practice to check the SDK state regularly as it may change at any point in time (except for PERMANENTLY_INACTIVE, which never -changes throughout the JVM lifetime). - -### Tracers - -To trace any kind of call you first need to create a Tracer. The Tracer object represents the logical and physical endpoint that -you want to call. A Tracer serves two purposes. First, to time the call (duration, cpu and more) and report errors. That is why -each Tracer has these three methods. The error method must be called only once, and it must be in between start and end. - -```Java -void start(); - -void error(String message); - -void end(); -``` - -The second purpose of a Tracer is to allow tracing across process boundaries. To achieve that these kind of traces supply so called -tags. Tags are strings or byte arrays that enable Dynatrace to trace a transaction end to end. As such the tag is the one information -that you need to transport across these calls as an SDK user. - -A Tracer instance can only be used from the thread on which it was created. See [in process linking](#in-process-linking) for tracing across thread boundaries. - -## Features - -The feature sets differ slightly with each language implementation. More functionality will be added over time, see Planned features for OneAgent SDK -for details on upcoming features. - -A more detailed specification of the features can be found in [Dynatrace OneAgent SDK](https://github.com/Dynatrace/OneAgent-SDK#features). - -|Feature |Required OneAgent SDK for Java version| -|:----------------------------------------------|:-------------------------------------| -|Trace database requests |>=1.7.0 | -|Trace messaging |>=1.6.0 | -|Outgoing web requests |>=1.4.0 | -|Incoming web requests |>=1.3.0 | -|Custom request attributes |>=1.2.0 | -|In process linking |>=1.1.0 | -|Trace incoming and outgoing remote calls |>=1.0.3 | - -### Trace incoming and outgoing remote calls - -You can use the SDK to trace proprietary IPC communication from one process to the other. This will enable you to see full Service Flow, PurePath -and Smartscape topology for remoting technologies that Dynatrace is not aware of. - -To trace any kind of remote call you first need to create a Tracer. The Tracer object represents the endpoint that you want to call, as such you -need to supply the name of the remote service and remote method. In addition you need to transport the tag in your remote call to the server side -if you want to trace it end to end. - -```Java -OneAgentSDK oneAgentSdk = OneAgentSDKFactory.createInstance(); -OutgoingRemoteCallTracer outgoingRemoteCall = oneAgentSdk.traceOutgoingRemoteCall("remoteMethodToCall", "RemoteServiceName", "rmi://Endpoint/service", ChannelType.TCP_IP, "remoteHost:1234"); -outgoingRemoteCall.setProtocolName("RMI/custom"); -outgoingRemoteCall.start(); -try { - String tag = outgoingRemoteCall.getDynatraceStringTag(); - // make the call and transport the tag across to server -} catch (Throwable e) { - outgoingRemoteCall.error(e); - // rethrow or add your exception handling -} finally { - outgoingRemoteCall.end(); -} -``` - -On the server side you need to wrap the handling and processing of your remote call as well. This will not only trace the server side call and -everything that happens, it will also connect it to the calling side. - -```Java -OneAgentSDK oneAgentSdk = OneAgentSDKFactory.createInstance(); -IncomingRemoteCallTracer incomingRemoteCall = oneAgentSdk.traceIncomingRemoteCall("remoteMethodToCall", "RemoteServiceName", "rmi://Endpoint/service"); -incomingRemoteCall.setDynatraceStringTag(tag); -incomingRemoteCall.start(); -try { - incomingRemoteCall.setProtocolName("RMI/custom"); - doSomeWork(); // process the remoteCall -} catch (Exception e) { - incomingRemoteCall.error(e); - // rethrow or add your exception handling -} finally{ - incomingRemoteCall.end(); -} -``` - -### In process linking - -You can use the SDK to link inside a single process. To link for eg. an asynchronous execution, you need the following code: - -```Java -OneAgentSDK oneAgentSdk = OneAgentSDKFactory.createInstance(); -InProcessLink inProcessLink = oneAgentSdk.createInProcessLink(); -``` - -Provide the returned ``inProcessLink`` to the code, that does the asynchronous execution: - -```Java -OneAgentSDK oneAgentSdk = OneAgentSDKFactory.createInstance(); -InProcessLinkTracer inProcessLinkTracer = oneAgentSdk.traceInProcessLink(inProcessLink); -inProcessLinkTracer.start(); -try { - // do the work ... -} catch (Exception e) { - inProcessLinkTracer.error(e); - // rethrow or add your exception handling -} finally { - inProcessLinkTracer.end(); -} -``` - -### Add custom request attributes - -You can use the SDK to add custom request attributes to the current traced service. Custom request attributes allow you to do advanced filtering of -your requests in Dynatrace. - -Adding custom request attributes to the currently traced service call is simple. Just call one of the addCustomRequestAttribute methods with your key and value: - -```Java -oneAgentSDK.addCustomRequestAttribute("region", "EMEA"); -oneAgentSDK.addCustomRequestAttribute("salesAmount", 2500); -``` - -When no service call is being traced, the custom request attributes are dropped. - -### Trace web requests - -#### Trace incoming web requests - -You can use the SDK to trace incoming web requests. This might be useful if Dynatrace does not support the respective web server framework or language -processing the incoming web requests. - -To trace an incoming web request you first need to create a WebApplicationInfo object. The info object represents the endpoint of your web server (web server name, application name and context root). This object should be reused for all traced web requests within for the same application. - -```Java -WebApplicationInfo wsInfo = oneAgentSdk.createWebApplicationInfo("WebShopProduction", "CheckoutService", "/api/service/checkout"); -``` - -To trace a specific incoming web request you then need to create a Tracer object. Make sure you provide all http headers from the request to the SDK by -calling addRequestHeader(...). This ensures that tagging with our built-in sensor will work. - -```Java -IncomingWebRequestTracer tracer = oneAgentSdk.traceIncomingWebRequest(wsInfo,"https://www.oursupershop.com/api/service/checkout/save", "POST") - -for (Entry headerField : httpRequest.getHeaders().entrySet()) { - incomingWebrequestTracer.addRequestHeader(headerField.getKey(), headerField.getValue()); -} - -for (Entry> parameterEntry : httpRequest.getParameters().entrySet()) { - for (String value : parameterEntry.getValue()) { - incomingWebrequestTracer.addParameter(parameterEntry.getKey(), value); - } -} - -incomingWebrequestTracer.setRemoteAddress(httpRequest.getRemoteHostName()); - -tracer.start(); -try { - int statusCodeReturnedToClient = processWebRequest(); - tracer.setStatusCode(statusCodeReturnedToClient); -} catch (Exception e) { - tracer.setStatusCode(500); // we expect that the container sends HTTP 500 status code in case request processing throws an exception - tracer.error(e); - throw e; -} finally { - tracer.end(); -} -``` - -#### Trace outgoing web requests - -You can use the SDK to trace outgoing web requests. This might be useful if Dynatrace does not support the respective http library or -language sending the request. - -To trace an outgoing web request you need to create a Tracer object. It is important to send the Dynatrace Header. This ensures that -tagging with our built-in sensor will work. - -```Java -OutgoingWebRequestTracer outgoingWebRequestTracer = oneAgentSdk.traceOutgoingWebRequest(url, "GET"); - -// provide all request headers to outgoingWebRequestTracer (optional): -for (Entry entry : yourHttpClient.getRequestHeaders().entrySet()) { - outgoingWebRequestTracer.addRequestHeader(entry.getKey(), entry.getValue()); -} - -outgoingWebRequestTracer.start(); -try { - yourHttpClient.setUrl(url); - - // sending HTTP header OneAgentSDK.DYNATRACE_HTTP_HEADERNAME is necessary for tagging: - yourHttpClient.addRequestHeader(OneAgentSDK.DYNATRACE_HTTP_HEADERNAME, outgoingWebRequestTracer.getDynatraceStringTag()); - - yourHttpClient.processHttpRequest(); - - for (Entry> entry : yourHttpClient.getHeaderFields().entrySet()) { - for (String value : entry.getValue()) { - outgoingWebRequestTracer.addResponseHeader(entry.getKey(), value); - } - } - outgoingWebRequestTracer.setStatusCode(yourHttpClient.getResponseCode()); - -} catch (Exception e) { - outgoingWebRequestTracer.error(e); - // rethrow or add your exception handling -} finally { - outgoingWebRequestTracer.end(); -} -``` - -### Trace messaging - -You can use the SDK to trace messages sent or received via messaging & queuing systems. When tracing messages, we distinguish between: - -* sending a message -* receiving a message -* processing a received message - -To trace an outgoing message, you simply need to create a MessagingSystemInfo and call traceOutgoingMessage with that instance: - -```Java -MessagingSystemInfo messagingSystemInfo = oneAgentSDK.createMessagingSystemInfo("myMessagingSystem", - "requestQueue", MessageDestinationType.QUEUE, ChannelType.TCP_IP, "localhost:4711"); -OutgoingMessageTracer outgoingMessageTracer = oneAgentSDK.traceOutgoingMessage(messagingSystemInfo); -outgoingMessageTracer.start(); -try { - // transport the dynatrace tag along with the message: - messageToSend.setHeaderField( - OneAgentSDK.DYNATRACE_MESSAGE_PROPERTYNAME, outgoingMessageTracer.getDynatraceStringTag()); - // optional: add application provided correlationId - outgoingMessageTracer.setCorrelationId(toSend.correlationId); - - theQueue.send(messageToSend); - - // optional: add messageid provided from messaging system - outgoingMessageTracer.setVendorMessageId(toSend.getMessageId()); -} catch (Exception e) { - outgoingMessageTracer.error(e.getMessage()); - // rethrow or add your exception handling -} finally { - outgoingMessageTracer.end(); -} -``` - -On the incoming side, we need to differentiate between the blocking receiving part and processing the received message. Therefore two -different tracers are being used: `IncomingMessageReceiveTracer` and `IncomingMessageProcessTracer`. - -```Java -MessagingSystemInfo messagingSystemInfo = oneAgentSDK.createMessagingSystemInfo("myMessagingSystem", - "requestQueue", MessageDestinationType.QUEUE, ChannelType.TCP_IP, "localhost:4711"); - -// message receiving daemon task: -while(true) { - IncomingMessageReceiveTracer incomingMessageReceiveTracer = - oneAgentSDK.traceIncomingMessageReceive(messagingSystemInfo); - incomingMessageReceiveTracer.start(); - try { - // blocking call - until message is being available: - Message queryMessage = theQueue.receive("client queries"); - IncomingMessageProcessTracer incomingMessageProcessTracer = oneAgentSDK - .traceIncomingMessageProcess(messagingSystemInfo); - incomingMessageProcessTracer.setDynatraceStringTag( - queryMessage.getHeaderField(OneAgentSDK.DYNATRACE_MESSAGE_PROPERTYNAME)); - incomingMessageProcessTracer.setVendorMessageId(queryMessage.msgId); - incomingMessageProcessTracer.setCorrelationId(queryMessage.correlationId); - incomingMessageProcessTracer.start(); - try { - // do the work ... - } catch (Exception e) { - incomingMessageProcessTracer.error(e.getMessage()); - Logger.logError(e); - } finally { - incomingMessageProcessTracer.end(); - } - } catch (Exception e) { - incomingMessageReceiveTracer.error(e.getMessage()); - // rethrow or add your exception handling - } finally { - incomingMessageReceiveTracer.end(); - } -} -``` - -In case of non-blocking receive (e. g. via event handler), there is no need to use `IncomingMessageReceiveTracer` - just trace processing -of the message by using the `IncomingMessageProcessTracer`: - -```Java -MessagingSystemInfo messagingSystemInfo = oneAgentSDK.createMessagingSystemInfo("myMessagingSystem", - "requestQueue", MessageDestinationType.QUEUE, ChannelType.TCP_IP, "localhost:4711"); - -public void onMessage(Message message) { - IncomingMessageProcessTracer incomingMessageProcessTracer = oneAgentSDK - .traceIncomingMessageProcess(messagingSystemInfo); - incomingMessageProcessTracer.setDynatraceStringTag((String) - message.getObjectProperty(OneAgentSDK.DYNATRACE_MESSAGE_PROPERTYNAME)); - incomingMessageProcessTracer.setVendorMessageId(queryMessage.msgId); - incomingMessageProcessTracer.setCorrelationId(queryMessage.correlationId); - incomingMessageProcessTracer.start(); - try { - // do the work ... - } catch (Exception e) { - incomingMessageProcessTracer.error(e.getMessage()); - // rethrow or add your exception handling - } finally { - incomingMessageProcessTracer.end(); - } -} -``` - -> Please also see the [documentation on messaging tracers in the specification repository](https://github.com/Dynatrace/OneAgent-SDK#messaging). - -### Trace SQL database requests - -A SQL database request is traced by calling `traceSqlDatabaseRequest`. For details about usage see the [OneAgentSDK specification](https://github.com/Dynatrace/OneAgent-SDK#database) - -```java -String sql = "SELECT * FROM transformationdata WHERE transformation_id = " + id; - -DatabaseInfo databaseInfo = oneAgentSdk.createDatabaseInfo("TransformationDb", DatabaseVendor.FIREBIRD.getVendorName(), ChannelType.TCP_IP, "db-serv01.acme.com:2323"); - -DatabaseRequestTracer databaseTracer = oneAgentSdk.traceSqlDatabaseRequest(databaseInfo, sql); -databaseTracer.start(); -try { - Result result = executeTheDatabaseCall(sql); - databaseTracer.setReturnedRowCount(result.getRows().getLength()); -} catch (InterruptedException e) { - databaseTracer.error(e); - // handle or rethrow -} finally { - databaseTracer.end(); -} -``` - -Please note that SQL database traces are only created if they occur within some other SDK trace (e.g. incoming remote call) -or a OneAgent built-in trace (e.g. incoming web request). - -## Further reading - -* What is the OneAgent SDK? in the Dynatrace documentation -* Feedback & Roadmap thread in AnswerHub -* Blog: Dynatrace OneAgent SDK for Java: End-to-end monitoring for proprietary Java frameworks - -## Help & support - -### Support policy - -The Dynatrace OneAgent SDK for Java has GA status. The features are fully supported by Dynatrace. - -For detailed support policy see [Dynatrace OneAgent SDK help](https://github.com/Dynatrace/OneAgent-SDK#help). - -### Get help - -* Ask a question in the product forums -* Read the product documentation - -**Open a GitHub issue to:** - -* Report minor defects, minor items or typos -* Ask for improvements or changes in the SDK API -* Ask any questions related to the community effort - -SLAs don't apply for GitHub tickets - -**Customers can open a ticket on the Dynatrace support portal to:** - -* Get support from the Dynatrace technical support engineering team -* Manage and resolve product related technical issues - -SLAs apply according to the customer's support level. - -## Release notes - -see also - -|Version|Description |Links | -|:------|:-------------------------------------------|:----------------------------------------| -|1.7.0 |Added support for database requests |[binary](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.7.0/oneagent-sdk-1.7.0.jar) [source](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.7.0/oneagent-sdk-1.7.0-sources.jar) [javadoc](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.7.0/oneagent-sdk-1.7.0-javadoc.jar)| -|1.6.0 |Added support for messaging |[binary](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.6.0/oneagent-sdk-1.6.0.jar) [source](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.6.0/oneagent-sdk-1.6.0-sources.jar) [javadoc](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.6.0/oneagent-sdk-1.6.0-javadoc.jar)| -|1.4.0 |Added support for outgoing webrequests |[binary](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.4.0/oneagent-sdk-1.4.0.jar) [source](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.4.0/oneagent-sdk-1.4.0-sources.jar) [javadoc](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.4.0/oneagent-sdk-1.4.0-javadoc.jar)| -|1.3.0 |Added support for incoming webrequests |[binary](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.3.0/oneagent-sdk-1.3.0.jar) [source](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.3.0/oneagent-sdk-1.3.0-sources.jar) [javadoc](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.3.0/oneagent-sdk-1.3.0-javadoc.jar)| -|1.2.0 |Added support for custom request attributes |[binary](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.2.0/oneagent-sdk-1.2.0.jar) [source](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.2.0/oneagent-sdk-1.2.0-sources.jar) [javadoc](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.2.0/oneagent-sdk-1.2.0-javadoc.jar)| -|1.1.0 |Added support for in-process-linking |[binary](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.1.0/oneagent-sdk-1.1.0.jar) [source](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.1.0/oneagent-sdk-1.1.0-sources.jar) [javadoc](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.1.0/oneagent-sdk-1.1.0-javadoc.jar)| -|1.0.3 |Initial release |[binary](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.0.3/oneagent-sdk-1.0.3.jar) [source](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.0.3/oneagent-sdk-1.0.3-sources.jar) [javadoc](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.0.3/oneagent-sdk-1.0.3-javadoc.jar)| +# Dynatrace OneAgent SDK for Java + +This SDK allows Dynatrace customers to instrument java applications. This is useful to enhance the visibility for proprietary frameworks or +custom frameworks not directly supported by Dynatrace OneAgent out-of-the-box. + +This is the official Java implementation of the [Dynatrace OneAgent SDK](https://github.com/Dynatrace/OneAgent-SDK). + +## Table of Contents + +* [Package contents](#package-contents) +* [Requirements](#requirements) +* [Integration](#integration) + * [Dependencies](#dependencies) + * [Troubleshooting](#troubleshooting) +* [API concepts](#api-concepts) + * [OneAgentSDK object](#oneagentsdk-object) + * [Tracers](#tracers) +* [Features](#features) + * [Trace incoming and outgoing remote calls](#trace-incoming-and-outgoing-remote-calls) + * [In process linking](#in-process-linking) + * [Add custom request attributes](#add-custom-request-attributes) + * [Custom services](#custom-services) + * [Trace web requests](#trace-web-requests) + * [Trace incoming web requests](#trace-incoming-web-requests) + * [Trace outgoing web requests](#trace-outgoing-web-requests) + * [Trace messaging](#trace-messaging) + * [Trace SQL database requests](#trace-sql-database-requests) +* [Further reading](#further-reading) +* [Help & support](#help-&-support) +* [Release notes](#release-notes) + +## Package contents + +* `samples`: contains sample application, which demonstrates the usage of the SDK. See readme inside the samples directory for more details. +* `docs`: contains the reference documentation (javadoc). The most recent version is also available online at [https://dynatrace.github.io/OneAgent-SDK-for-Java/](https://dynatrace.github.io/OneAgent-SDK-for-Java/). +* `LICENSE`: license under which the whole SDK and sample applications are published. + +## Requirements + +* JRE 1.6 or higher +* Dynatrace OneAgent (required versions see below) + +|OneAgent SDK for Java|Required OneAgent version|Support status| +|:--------------------|:------------------------|:-------------| +|1.8.0 |>=1.201 |Supported | +|1.7.0 |>=1.167 |Supported | +|1.6.0 |>=1.161 |Supported | +|1.4.0 |>=1.151 |Supported | +|1.3.0 |>=1.149 |Supported | +|1.2.0 |>=1.147 |Supported | +|1.1.0 |>=1.143 |Supported | +|1.0.3 |>=1.135 |Supported | + +## Integration + +### Dependencies + +If you want to integrate the OneAgent SDK into your application, just add the following Maven dependency: + +```xml + + com.dynatrace.oneagent.sdk.java + oneagent-sdk + 1.8.0 + compile + +``` + +If you prefer to integrate the SDK using plain jar file, just download them from Maven Central. You can find the download links for each +version in the [Release notes](#releasenotes) section. + +The Dynatrace OneAgent SDK for Java has no further dependencies. + +### Troubleshooting + +If the SDK can't connect to the OneAgent (see usage of SDKState in samples) or you you don't see the desired result in the Dynatrace UI, +you can set the following system property to print debug information to standard out: + +```java +-Dcom.dynatrace.oneagent.sdk.debug=true +``` + +Additionally you should/have to ensure, that you have set a `LoggingCallback`. For usage see class `StdErrLoggingCallback` in +`remotecall-server` module (in samples/remotecall folder). + +## API concepts + +Common concepts of the Dynatrace OneAgent SDK are explained in the [Dynatrace OneAgent SDK repository](https://github.com/Dynatrace/OneAgent-SDK#apiconcepts). + +### OneAgentSDK object + +Use OneAgentSDKFactory.createInstance() to obtain an OneAgentSDK instance. You should reuse this object throughout the whole application +and, if possible, JVM lifetime: + +```Java +OneAgentSDK oneAgentSdk = OneAgentSDKFactory.createInstance(); +switch (oneAgentSdk.getCurrentState()) { +case ACTIVE: + break; +case PERMANENTLY_INACTIVE: + break; +case TEMPORARILY_INACTIVE: + break; +default: + break; +} +``` + +It is good practice to check the SDK state regularly as it may change at any point in time (except for PERMANENTLY_INACTIVE, which never +changes throughout the JVM lifetime). + +### Tracers + +To trace any kind of call you first need to create a Tracer. The Tracer object represents the logical and physical endpoint that +you want to call. A Tracer serves two purposes. First, to time the call (duration, cpu and more) and report errors. That is why +each Tracer has these three methods. The error method must be called only once, and it must be in between start and end. + +```Java +void start(); + +void error(String message); + +void end(); +``` + +The second purpose of a Tracer is to allow tracing across process boundaries. To achieve that these kind of traces supply so called +tags. Tags are strings or byte arrays that enable Dynatrace to trace a transaction end to end. As such the tag is the one information +that you need to transport across these calls as an SDK user. + +A Tracer instance can only be used from the thread on which it was created. See [in process linking](#in-process-linking) for tracing across thread boundaries. + +## Features + +The feature sets differ slightly with each language implementation. More functionality will be added over time, see Planned features for OneAgent SDK +for details on upcoming features. + +A more detailed specification of the features can be found in [Dynatrace OneAgent SDK](https://github.com/Dynatrace/OneAgent-SDK#features). + +|Feature |Required OneAgent SDK for Java version| +|:----------------------------------------------|:-------------------------------------| +|Custom services |>=1.8.0 | +|Trace database requests |>=1.7.0 | +|Trace messaging |>=1.6.0 | +|Outgoing web requests |>=1.4.0 | +|Incoming web requests |>=1.3.0 | +|Custom request attributes |>=1.2.0 | +|In process linking |>=1.1.0 | +|Trace incoming and outgoing remote calls |>=1.0.3 | + +### Trace incoming and outgoing remote calls + +You can use the SDK to trace proprietary IPC communication from one process to the other. This will enable you to see full Service Flow, PurePath +and Smartscape topology for remoting technologies that Dynatrace is not aware of. + +To trace any kind of remote call you first need to create a Tracer. The Tracer object represents the endpoint that you want to call, as such you +need to supply the name of the remote service and remote method. In addition you need to transport the tag in your remote call to the server side +if you want to trace it end to end. + +```Java +OneAgentSDK oneAgentSdk = OneAgentSDKFactory.createInstance(); +OutgoingRemoteCallTracer outgoingRemoteCall = oneAgentSdk.traceOutgoingRemoteCall("remoteMethodToCall", "RemoteServiceName", "rmi://Endpoint/service", ChannelType.TCP_IP, "remoteHost:1234"); +outgoingRemoteCall.setProtocolName("RMI/custom"); +outgoingRemoteCall.start(); +try { + String tag = outgoingRemoteCall.getDynatraceStringTag(); + // make the call and transport the tag across to server +} catch (Throwable e) { + outgoingRemoteCall.error(e); + // rethrow or add your exception handling +} finally { + outgoingRemoteCall.end(); +} +``` + +On the server side you need to wrap the handling and processing of your remote call as well. This will not only trace the server side call and +everything that happens, it will also connect it to the calling side. + +```Java +OneAgentSDK oneAgentSdk = OneAgentSDKFactory.createInstance(); +IncomingRemoteCallTracer incomingRemoteCall = oneAgentSdk.traceIncomingRemoteCall("remoteMethodToCall", "RemoteServiceName", "rmi://Endpoint/service"); +incomingRemoteCall.setDynatraceStringTag(tag); +incomingRemoteCall.start(); +try { + incomingRemoteCall.setProtocolName("RMI/custom"); + doSomeWork(); // process the remoteCall +} catch (Exception e) { + incomingRemoteCall.error(e); + // rethrow or add your exception handling +} finally{ + incomingRemoteCall.end(); +} +``` + +### In process linking + +You can use the SDK to link inside a single process. To link for eg. an asynchronous execution, you need the following code: + +```Java +OneAgentSDK oneAgentSdk = OneAgentSDKFactory.createInstance(); +InProcessLink inProcessLink = oneAgentSdk.createInProcessLink(); +``` + +Provide the returned ``inProcessLink`` to the code, that does the asynchronous execution: + +```Java +OneAgentSDK oneAgentSdk = OneAgentSDKFactory.createInstance(); +InProcessLinkTracer inProcessLinkTracer = oneAgentSdk.traceInProcessLink(inProcessLink); +inProcessLinkTracer.start(); +try { + // do the work ... +} catch (Exception e) { + inProcessLinkTracer.error(e); + // rethrow or add your exception handling +} finally { + inProcessLinkTracer.end(); +} +``` + +### Add custom request attributes + +You can use the SDK to add custom request attributes to the current traced service. Custom request attributes allow you to do advanced filtering of +your requests in Dynatrace. + +Adding custom request attributes to the currently traced service call is simple. Just call one of the addCustomRequestAttribute methods with your key and value: + +```Java +oneAgentSDK.addCustomRequestAttribute("region", "EMEA"); +oneAgentSDK.addCustomRequestAttribute("salesAmount", 2500); +``` + +When no service call is being traced, the custom request attributes are dropped. + +### Custom services + +You can use the SDK to trace custom service methods. A custom service method is a meaningful +part of your code that you want to trace but that does not fit any other tracer. +An example could be the callback of a periodic timer. + +```Java +String serviceMethod = "onTimer"; +String serviceName = "PeriodicCleanupTask"; +CustomServiceTracer tracer = oneAgentSDK.traceCustomService(serviceMethod, serviceName); +tracer.start(); +try { + doMyCleanup(); +} catch (Exception e) { + tracer.error(e.getMessage()); + throw e; +} finally { + tracer.end(); +} +``` + +### Trace web requests + +#### Trace incoming web requests + +You can use the SDK to trace incoming web requests. This might be useful if Dynatrace does not support the respective web server framework or language +processing the incoming web requests. + +To trace an incoming web request you first need to create a WebApplicationInfo object. The info object represents the endpoint of your web server (web server name, application name and context root). This object should be reused for all traced web requests within for the same application. + +```Java +WebApplicationInfo wsInfo = oneAgentSdk.createWebApplicationInfo("WebShopProduction", "CheckoutService", "/api/service/checkout"); +``` + +To trace a specific incoming web request you then need to create a Tracer object. Make sure you provide all http headers from the request to the SDK by +calling addRequestHeader(...). This ensures that tagging with our built-in sensor will work. + +```Java +IncomingWebRequestTracer tracer = oneAgentSdk.traceIncomingWebRequest(wsInfo,"https://www.oursupershop.com/api/service/checkout/save", "POST") + +for (Entry headerField : httpRequest.getHeaders().entrySet()) { + incomingWebrequestTracer.addRequestHeader(headerField.getKey(), headerField.getValue()); +} + +for (Entry> parameterEntry : httpRequest.getParameters().entrySet()) { + for (String value : parameterEntry.getValue()) { + incomingWebrequestTracer.addParameter(parameterEntry.getKey(), value); + } +} + +incomingWebrequestTracer.setRemoteAddress(httpRequest.getRemoteHostName()); + +tracer.start(); +try { + int statusCodeReturnedToClient = processWebRequest(); + tracer.setStatusCode(statusCodeReturnedToClient); +} catch (Exception e) { + tracer.setStatusCode(500); // we expect that the container sends HTTP 500 status code in case request processing throws an exception + tracer.error(e); + throw e; +} finally { + tracer.end(); +} +``` + +#### Trace outgoing web requests + +You can use the SDK to trace outgoing web requests. This might be useful if Dynatrace does not support the respective http library or +language sending the request. + +To trace an outgoing web request you need to create a Tracer object. It is important to send the Dynatrace Header. This ensures that +tagging with our built-in sensor will work. + +```Java +OutgoingWebRequestTracer outgoingWebRequestTracer = oneAgentSdk.traceOutgoingWebRequest(url, "GET"); + +// provide all request headers to outgoingWebRequestTracer (optional): +for (Entry entry : yourHttpClient.getRequestHeaders().entrySet()) { + outgoingWebRequestTracer.addRequestHeader(entry.getKey(), entry.getValue()); +} + +outgoingWebRequestTracer.start(); +try { + yourHttpClient.setUrl(url); + + // sending HTTP header OneAgentSDK.DYNATRACE_HTTP_HEADERNAME is necessary for tagging: + yourHttpClient.addRequestHeader(OneAgentSDK.DYNATRACE_HTTP_HEADERNAME, outgoingWebRequestTracer.getDynatraceStringTag()); + + yourHttpClient.processHttpRequest(); + + for (Entry> entry : yourHttpClient.getHeaderFields().entrySet()) { + for (String value : entry.getValue()) { + outgoingWebRequestTracer.addResponseHeader(entry.getKey(), value); + } + } + outgoingWebRequestTracer.setStatusCode(yourHttpClient.getResponseCode()); + +} catch (Exception e) { + outgoingWebRequestTracer.error(e); + // rethrow or add your exception handling +} finally { + outgoingWebRequestTracer.end(); +} +``` + +### Trace messaging + +You can use the SDK to trace messages sent or received via messaging & queuing systems. When tracing messages, we distinguish between: + +* sending a message +* receiving a message +* processing a received message + +To trace an outgoing message, you simply need to create a MessagingSystemInfo and call traceOutgoingMessage with that instance: + +```Java +MessagingSystemInfo messagingSystemInfo = oneAgentSDK.createMessagingSystemInfo("myMessagingSystem", + "requestQueue", MessageDestinationType.QUEUE, ChannelType.TCP_IP, "localhost:4711"); +OutgoingMessageTracer outgoingMessageTracer = oneAgentSDK.traceOutgoingMessage(messagingSystemInfo); +outgoingMessageTracer.start(); +try { + // transport the dynatrace tag along with the message: + messageToSend.setHeaderField( + OneAgentSDK.DYNATRACE_MESSAGE_PROPERTYNAME, outgoingMessageTracer.getDynatraceStringTag()); + // optional: add application provided correlationId + outgoingMessageTracer.setCorrelationId(toSend.correlationId); + + theQueue.send(messageToSend); + + // optional: add messageid provided from messaging system + outgoingMessageTracer.setVendorMessageId(toSend.getMessageId()); +} catch (Exception e) { + outgoingMessageTracer.error(e.getMessage()); + // rethrow or add your exception handling +} finally { + outgoingMessageTracer.end(); +} +``` + +On the incoming side, we need to differentiate between the blocking receiving part and processing the received message. Therefore two +different tracers are being used: `IncomingMessageReceiveTracer` and `IncomingMessageProcessTracer`. + +```Java +MessagingSystemInfo messagingSystemInfo = oneAgentSDK.createMessagingSystemInfo("myMessagingSystem", + "requestQueue", MessageDestinationType.QUEUE, ChannelType.TCP_IP, "localhost:4711"); + +// message receiving daemon task: +while(true) { + IncomingMessageReceiveTracer incomingMessageReceiveTracer = + oneAgentSDK.traceIncomingMessageReceive(messagingSystemInfo); + incomingMessageReceiveTracer.start(); + try { + // blocking call - until message is being available: + Message queryMessage = theQueue.receive("client queries"); + IncomingMessageProcessTracer incomingMessageProcessTracer = oneAgentSDK + .traceIncomingMessageProcess(messagingSystemInfo); + incomingMessageProcessTracer.setDynatraceStringTag( + queryMessage.getHeaderField(OneAgentSDK.DYNATRACE_MESSAGE_PROPERTYNAME)); + incomingMessageProcessTracer.setVendorMessageId(queryMessage.msgId); + incomingMessageProcessTracer.setCorrelationId(queryMessage.correlationId); + incomingMessageProcessTracer.start(); + try { + // do the work ... + } catch (Exception e) { + incomingMessageProcessTracer.error(e.getMessage()); + Logger.logError(e); + } finally { + incomingMessageProcessTracer.end(); + } + } catch (Exception e) { + incomingMessageReceiveTracer.error(e.getMessage()); + // rethrow or add your exception handling + } finally { + incomingMessageReceiveTracer.end(); + } +} +``` + +In case of non-blocking receive (e. g. via event handler), there is no need to use `IncomingMessageReceiveTracer` - just trace processing +of the message by using the `IncomingMessageProcessTracer`: + +```Java +MessagingSystemInfo messagingSystemInfo = oneAgentSDK.createMessagingSystemInfo("myMessagingSystem", + "requestQueue", MessageDestinationType.QUEUE, ChannelType.TCP_IP, "localhost:4711"); + +public void onMessage(Message message) { + IncomingMessageProcessTracer incomingMessageProcessTracer = oneAgentSDK + .traceIncomingMessageProcess(messagingSystemInfo); + incomingMessageProcessTracer.setDynatraceStringTag((String) + message.getObjectProperty(OneAgentSDK.DYNATRACE_MESSAGE_PROPERTYNAME)); + incomingMessageProcessTracer.setVendorMessageId(queryMessage.msgId); + incomingMessageProcessTracer.setCorrelationId(queryMessage.correlationId); + incomingMessageProcessTracer.start(); + try { + // do the work ... + } catch (Exception e) { + incomingMessageProcessTracer.error(e.getMessage()); + // rethrow or add your exception handling + } finally { + incomingMessageProcessTracer.end(); + } +} +``` + +> Please also see the [documentation on messaging tracers in the specification repository](https://github.com/Dynatrace/OneAgent-SDK#messaging). + +### Trace SQL database requests + +A SQL database request is traced by calling `traceSqlDatabaseRequest`. For details about usage see the [OneAgentSDK specification](https://github.com/Dynatrace/OneAgent-SDK#database) + +```java +String sql = "SELECT * FROM transformationdata WHERE transformation_id = " + id; + +DatabaseInfo databaseInfo = oneAgentSdk.createDatabaseInfo("TransformationDb", DatabaseVendor.FIREBIRD.getVendorName(), ChannelType.TCP_IP, "db-serv01.acme.com:2323"); + +DatabaseRequestTracer databaseTracer = oneAgentSdk.traceSqlDatabaseRequest(databaseInfo, sql); +databaseTracer.start(); +try { + Result result = executeTheDatabaseCall(sql); + databaseTracer.setReturnedRowCount(result.getRows().getLength()); +} catch (InterruptedException e) { + databaseTracer.error(e); + // handle or rethrow +} finally { + databaseTracer.end(); +} +``` + +Please note that SQL database traces are only created if they occur within some other SDK trace (e.g. incoming remote call) +or a OneAgent built-in trace (e.g. incoming web request). + +## Further reading + +* What is the OneAgent SDK? in the Dynatrace documentation +* Feedback & Roadmap thread in AnswerHub +* Blog: Dynatrace OneAgent SDK for Java: End-to-end monitoring for proprietary Java frameworks + +## Help & support + +### Support policy + +The Dynatrace OneAgent SDK for Java has GA status. The features are fully supported by Dynatrace. + +For detailed support policy see [Dynatrace OneAgent SDK help](https://github.com/Dynatrace/OneAgent-SDK#help). + +### Get help + +* Ask a question in the product forums +* Read the product documentation + +**Open a GitHub issue to:** + +* Report minor defects, minor items or typos +* Ask for improvements or changes in the SDK API +* Ask any questions related to the community effort + +SLAs don't apply for GitHub tickets + +**Customers can open a ticket on the Dynatrace support portal to:** + +* Get support from the Dynatrace technical support engineering team +* Manage and resolve product related technical issues + +SLAs apply according to the customer's support level. + +## Release notes + +see also + +|Version|Description |Links | +|:------|:-------------------------------------------|:----------------------------------------| +|1.8.0 |Added support for custom services |[binary](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.8.0/oneagent-sdk-1.8.0.jar) [source](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.8.0/oneagent-sdk-1.8.0-sources.jar) [javadoc](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.8.0/oneagent-sdk-1.8.0-javadoc.jar)| +|1.7.0 |Added support for database requests |[binary](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.7.0/oneagent-sdk-1.7.0.jar) [source](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.7.0/oneagent-sdk-1.7.0-sources.jar) [javadoc](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.7.0/oneagent-sdk-1.7.0-javadoc.jar)| +|1.6.0 |Added support for messaging |[binary](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.6.0/oneagent-sdk-1.6.0.jar) [source](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.6.0/oneagent-sdk-1.6.0-sources.jar) [javadoc](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.6.0/oneagent-sdk-1.6.0-javadoc.jar)| +|1.4.0 |Added support for outgoing webrequests |[binary](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.4.0/oneagent-sdk-1.4.0.jar) [source](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.4.0/oneagent-sdk-1.4.0-sources.jar) [javadoc](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.4.0/oneagent-sdk-1.4.0-javadoc.jar)| +|1.3.0 |Added support for incoming webrequests |[binary](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.3.0/oneagent-sdk-1.3.0.jar) [source](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.3.0/oneagent-sdk-1.3.0-sources.jar) [javadoc](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.3.0/oneagent-sdk-1.3.0-javadoc.jar)| +|1.2.0 |Added support for custom request attributes |[binary](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.2.0/oneagent-sdk-1.2.0.jar) [source](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.2.0/oneagent-sdk-1.2.0-sources.jar) [javadoc](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.2.0/oneagent-sdk-1.2.0-javadoc.jar)| +|1.1.0 |Added support for in-process-linking |[binary](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.1.0/oneagent-sdk-1.1.0.jar) [source](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.1.0/oneagent-sdk-1.1.0-sources.jar) [javadoc](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.1.0/oneagent-sdk-1.1.0-javadoc.jar)| +|1.0.3 |Initial release |[binary](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.0.3/oneagent-sdk-1.0.3.jar) [source](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.0.3/oneagent-sdk-1.0.3-sources.jar) [javadoc](https://search.maven.org/remotecontent?filepath=com/dynatrace/oneagent/sdk/java/oneagent-sdk/1.0.3/oneagent-sdk-1.0.3-javadoc.jar)| diff --git a/docs/allclasses-frame.html b/docs/allclasses-frame.html old mode 100644 new mode 100755 index 00b291d..0a35419 --- a/docs/allclasses-frame.html +++ b/docs/allclasses-frame.html @@ -2,12 +2,12 @@ - + -All Classes (sdk 1.7.0 API) +All Classes (sdk 1.8.0 API) - + @@ -23,6 +23,8 @@ ChannelType
        +CustomServiceTracer +
        DatabaseInfo
        DatabaseRequestTracer diff --git a/docs/allclasses-noframe.html b/docs/allclasses-noframe.html old mode 100644 new mode 100755 index a862d7d..b891c3c --- a/docs/allclasses-noframe.html +++ b/docs/allclasses-noframe.html @@ -2,12 +2,12 @@ - + -All Classes (sdk 1.7.0 API) +All Classes (sdk 1.8.0 API) - + @@ -23,6 +23,8 @@ ChannelType
        +CustomServiceTracer +
        DatabaseInfo
        DatabaseRequestTracer diff --git a/docs/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.html b/docs/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.html old mode 100644 new mode 100755 index d23c2c9..946e003 --- a/docs/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.html +++ b/docs/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.html @@ -2,12 +2,12 @@ - + -OneAgentSDKFactory (sdk 1.7.0 API) +OneAgentSDKFactory (sdk 1.8.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="OneAgentSDKFactory (sdk 1.7.0 API)"; + parent.document.title="OneAgentSDKFactory (sdk 1.8.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/CustomServiceTracer.html b/docs/com/dynatrace/oneagent/sdk/api/CustomServiceTracer.html new file mode 100755 index 0000000..ba3d887 --- /dev/null +++ b/docs/com/dynatrace/oneagent/sdk/api/CustomServiceTracer.html @@ -0,0 +1,197 @@ + + + + + + +CustomServiceTracer (sdk 1.8.0 API) + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + +
        + +
        + + + +
        + +

        + +com.dynatrace.oneagent.sdk.api +
        +Interface CustomServiceTracer

        +
        +
        All Superinterfaces:
        Tracer
        +
        +
        +
        +
        public interface CustomServiceTracer
        extends Tracer
        + + +

        +Interface for tracing custom services. + https://github.com/Dynatrace/OneAgent-SDK#customservice +

        + +

        +

        +
        Since:
        +
        1.8.0
        +
        +
        + +

        + + + + + + + + +
        +Method Summary
        + + + + + + + +
        Methods inherited from interface com.dynatrace.oneagent.sdk.api.Tracer
        end, error, error, start
        +  +

        + +


        + + + + + + + + + + + + + + + + + + + +
        + +
        + + + +
        + + + diff --git a/docs/com/dynatrace/oneagent/sdk/api/DatabaseRequestTracer.html b/docs/com/dynatrace/oneagent/sdk/api/DatabaseRequestTracer.html old mode 100644 new mode 100755 index a5be256..cfa1291 --- a/docs/com/dynatrace/oneagent/sdk/api/DatabaseRequestTracer.html +++ b/docs/com/dynatrace/oneagent/sdk/api/DatabaseRequestTracer.html @@ -2,12 +2,12 @@ - + -DatabaseRequestTracer (sdk 1.7.0 API) +DatabaseRequestTracer (sdk 1.8.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="DatabaseRequestTracer (sdk 1.7.0 API)"; + parent.document.title="DatabaseRequestTracer (sdk 1.8.0 API)"; } } @@ -54,7 +54,7 @@ - PREV CLASS  + PREV CLASS   NEXT CLASS FRAMES   @@ -223,7 +223,7 @@

        - PREV CLASS  + PREV CLASS   NEXT CLASS FRAMES   diff --git a/docs/com/dynatrace/oneagent/sdk/api/InProcessLink.html b/docs/com/dynatrace/oneagent/sdk/api/InProcessLink.html old mode 100644 new mode 100755 index cac2176..ccbceac --- a/docs/com/dynatrace/oneagent/sdk/api/InProcessLink.html +++ b/docs/com/dynatrace/oneagent/sdk/api/InProcessLink.html @@ -2,12 +2,12 @@ - + -InProcessLink (sdk 1.7.0 API) +InProcessLink (sdk 1.8.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="InProcessLink (sdk 1.7.0 API)"; + parent.document.title="InProcessLink (sdk 1.8.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.html b/docs/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.html old mode 100644 new mode 100755 index fabafb4..56c6d34 --- a/docs/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.html +++ b/docs/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.html @@ -2,12 +2,12 @@ - + -InProcessLinkTracer (sdk 1.7.0 API) +InProcessLinkTracer (sdk 1.8.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="InProcessLinkTracer (sdk 1.7.0 API)"; + parent.document.title="InProcessLinkTracer (sdk 1.8.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/IncomingMessageProcessTracer.html b/docs/com/dynatrace/oneagent/sdk/api/IncomingMessageProcessTracer.html old mode 100644 new mode 100755 index d505dcb..7916bd5 --- a/docs/com/dynatrace/oneagent/sdk/api/IncomingMessageProcessTracer.html +++ b/docs/com/dynatrace/oneagent/sdk/api/IncomingMessageProcessTracer.html @@ -2,12 +2,12 @@ - + -IncomingMessageProcessTracer (sdk 1.7.0 API) +IncomingMessageProcessTracer (sdk 1.8.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="IncomingMessageProcessTracer (sdk 1.7.0 API)"; + parent.document.title="IncomingMessageProcessTracer (sdk 1.8.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/IncomingMessageReceiveTracer.html b/docs/com/dynatrace/oneagent/sdk/api/IncomingMessageReceiveTracer.html old mode 100644 new mode 100755 index 81da10c..9fcc9ea --- a/docs/com/dynatrace/oneagent/sdk/api/IncomingMessageReceiveTracer.html +++ b/docs/com/dynatrace/oneagent/sdk/api/IncomingMessageReceiveTracer.html @@ -2,12 +2,12 @@ - + -IncomingMessageReceiveTracer (sdk 1.7.0 API) +IncomingMessageReceiveTracer (sdk 1.8.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="IncomingMessageReceiveTracer (sdk 1.7.0 API)"; + parent.document.title="IncomingMessageReceiveTracer (sdk 1.8.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.html b/docs/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.html old mode 100644 new mode 100755 index 9f85780..2a42b65 --- a/docs/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.html +++ b/docs/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.html @@ -2,12 +2,12 @@ - + -IncomingRemoteCallTracer (sdk 1.7.0 API) +IncomingRemoteCallTracer (sdk 1.8.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="IncomingRemoteCallTracer (sdk 1.7.0 API)"; + parent.document.title="IncomingRemoteCallTracer (sdk 1.8.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/IncomingTaggable.html b/docs/com/dynatrace/oneagent/sdk/api/IncomingTaggable.html old mode 100644 new mode 100755 index bb8054e..345660d --- a/docs/com/dynatrace/oneagent/sdk/api/IncomingTaggable.html +++ b/docs/com/dynatrace/oneagent/sdk/api/IncomingTaggable.html @@ -2,12 +2,12 @@ - + -IncomingTaggable (sdk 1.7.0 API) +IncomingTaggable (sdk 1.8.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="IncomingTaggable (sdk 1.7.0 API)"; + parent.document.title="IncomingTaggable (sdk 1.8.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/IncomingWebRequestTracer.html b/docs/com/dynatrace/oneagent/sdk/api/IncomingWebRequestTracer.html old mode 100644 new mode 100755 index 403053d..cb238ad --- a/docs/com/dynatrace/oneagent/sdk/api/IncomingWebRequestTracer.html +++ b/docs/com/dynatrace/oneagent/sdk/api/IncomingWebRequestTracer.html @@ -2,12 +2,12 @@ - + -IncomingWebRequestTracer (sdk 1.7.0 API) +IncomingWebRequestTracer (sdk 1.8.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="IncomingWebRequestTracer (sdk 1.7.0 API)"; + parent.document.title="IncomingWebRequestTracer (sdk 1.8.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/LoggingCallback.html b/docs/com/dynatrace/oneagent/sdk/api/LoggingCallback.html old mode 100644 new mode 100755 index 550f017..569b8a0 --- a/docs/com/dynatrace/oneagent/sdk/api/LoggingCallback.html +++ b/docs/com/dynatrace/oneagent/sdk/api/LoggingCallback.html @@ -2,12 +2,12 @@ - + -LoggingCallback (sdk 1.7.0 API) +LoggingCallback (sdk 1.8.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="LoggingCallback (sdk 1.7.0 API)"; + parent.document.title="LoggingCallback (sdk 1.8.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/OneAgentSDK.html b/docs/com/dynatrace/oneagent/sdk/api/OneAgentSDK.html old mode 100644 new mode 100755 index 4ec5d7f..938fa09 --- a/docs/com/dynatrace/oneagent/sdk/api/OneAgentSDK.html +++ b/docs/com/dynatrace/oneagent/sdk/api/OneAgentSDK.html @@ -2,12 +2,12 @@ - + -OneAgentSDK (sdk 1.7.0 API) +OneAgentSDK (sdk 1.8.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="OneAgentSDK (sdk 1.7.0 API)"; + parent.document.title="OneAgentSDK (sdk 1.8.0 API)"; } } @@ -235,6 +235,15 @@

        + CustomServiceTracer +traceCustomService(java.lang.String serviceMethod, + java.lang.String serviceName) + +
        +          Creates a tracer for a custom transaction (Dynatrace calls them Custom service). + + +  IncomingMessageProcessTracer traceIncomingMessageProcess(MessagingSystemInfo messagingSystem) @@ -703,6 +712,24 @@

  • +
    + +

    +traceCustomService

    +
    +CustomServiceTracer traceCustomService(java.lang.String serviceMethod,
    +                                       java.lang.String serviceName)
    +
    +
    Creates a tracer for a custom transaction (Dynatrace calls them Custom service). Used whenever a transaction + should be traced, that does not match any of the specialised transaction types (e. g. DB-request, webrequest, ...). +

    +

    +
    Parameters:
    serviceMethod - service method being used for service creation.
    serviceName - service name being used for service creation. +
    Returns:
    CustomServiceTracer to work with
    Since:
    +
    1.8
    +
    +
    +

    diff --git a/docs/com/dynatrace/oneagent/sdk/api/OutgoingMessageTracer.html b/docs/com/dynatrace/oneagent/sdk/api/OutgoingMessageTracer.html old mode 100644 new mode 100755 index 40e1488..e6c6394 --- a/docs/com/dynatrace/oneagent/sdk/api/OutgoingMessageTracer.html +++ b/docs/com/dynatrace/oneagent/sdk/api/OutgoingMessageTracer.html @@ -2,12 +2,12 @@ - + -OutgoingMessageTracer (sdk 1.7.0 API) +OutgoingMessageTracer (sdk 1.8.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="OutgoingMessageTracer (sdk 1.7.0 API)"; + parent.document.title="OutgoingMessageTracer (sdk 1.8.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.html b/docs/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.html old mode 100644 new mode 100755 index 1b84eca..65f18db --- a/docs/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.html +++ b/docs/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.html @@ -2,12 +2,12 @@ - + -OutgoingRemoteCallTracer (sdk 1.7.0 API) +OutgoingRemoteCallTracer (sdk 1.8.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="OutgoingRemoteCallTracer (sdk 1.7.0 API)"; + parent.document.title="OutgoingRemoteCallTracer (sdk 1.8.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.html b/docs/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.html old mode 100644 new mode 100755 index 154050d..0e35efd --- a/docs/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.html +++ b/docs/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.html @@ -2,12 +2,12 @@ - + -OutgoingTaggable (sdk 1.7.0 API) +OutgoingTaggable (sdk 1.8.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="OutgoingTaggable (sdk 1.7.0 API)"; + parent.document.title="OutgoingTaggable (sdk 1.8.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/OutgoingWebRequestTracer.html b/docs/com/dynatrace/oneagent/sdk/api/OutgoingWebRequestTracer.html old mode 100644 new mode 100755 index 5aebe32..43febfe --- a/docs/com/dynatrace/oneagent/sdk/api/OutgoingWebRequestTracer.html +++ b/docs/com/dynatrace/oneagent/sdk/api/OutgoingWebRequestTracer.html @@ -2,12 +2,12 @@ - + -OutgoingWebRequestTracer (sdk 1.7.0 API) +OutgoingWebRequestTracer (sdk 1.8.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="OutgoingWebRequestTracer (sdk 1.7.0 API)"; + parent.document.title="OutgoingWebRequestTracer (sdk 1.8.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/Tracer.html b/docs/com/dynatrace/oneagent/sdk/api/Tracer.html old mode 100644 new mode 100755 index 622a0ad..341a2b4 --- a/docs/com/dynatrace/oneagent/sdk/api/Tracer.html +++ b/docs/com/dynatrace/oneagent/sdk/api/Tracer.html @@ -2,12 +2,12 @@ - + -Tracer (sdk 1.7.0 API) +Tracer (sdk 1.8.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Tracer (sdk 1.7.0 API)"; + parent.document.title="Tracer (sdk 1.8.0 API)"; } } @@ -91,7 +91,7 @@


    Interface Tracer

    -
    All Known Subinterfaces:
    DatabaseRequestTracer, IncomingMessageProcessTracer, IncomingMessageReceiveTracer, IncomingRemoteCallTracer, IncomingWebRequestTracer, InProcessLinkTracer, OutgoingMessageTracer, OutgoingRemoteCallTracer, OutgoingWebRequestTracer
    +
    All Known Subinterfaces:
    CustomServiceTracer, DatabaseRequestTracer, IncomingMessageProcessTracer, IncomingMessageReceiveTracer, IncomingRemoteCallTracer, IncomingWebRequestTracer, InProcessLinkTracer, OutgoingMessageTracer, OutgoingRemoteCallTracer, OutgoingWebRequestTracer

    diff --git a/docs/com/dynatrace/oneagent/sdk/api/enums/ChannelType.html b/docs/com/dynatrace/oneagent/sdk/api/enums/ChannelType.html old mode 100644 new mode 100755 index a52851d..9da623f --- a/docs/com/dynatrace/oneagent/sdk/api/enums/ChannelType.html +++ b/docs/com/dynatrace/oneagent/sdk/api/enums/ChannelType.html @@ -2,12 +2,12 @@ - + -ChannelType (sdk 1.7.0 API) +ChannelType (sdk 1.8.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="ChannelType (sdk 1.7.0 API)"; + parent.document.title="ChannelType (sdk 1.8.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/enums/DatabaseVendor.html b/docs/com/dynatrace/oneagent/sdk/api/enums/DatabaseVendor.html old mode 100644 new mode 100755 index 7043de7..be49ea3 --- a/docs/com/dynatrace/oneagent/sdk/api/enums/DatabaseVendor.html +++ b/docs/com/dynatrace/oneagent/sdk/api/enums/DatabaseVendor.html @@ -2,12 +2,12 @@ - + -DatabaseVendor (sdk 1.7.0 API) +DatabaseVendor (sdk 1.8.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="DatabaseVendor (sdk 1.7.0 API)"; + parent.document.title="DatabaseVendor (sdk 1.8.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/enums/MessageDestinationType.html b/docs/com/dynatrace/oneagent/sdk/api/enums/MessageDestinationType.html old mode 100644 new mode 100755 index f594cdc..24a87d9 --- a/docs/com/dynatrace/oneagent/sdk/api/enums/MessageDestinationType.html +++ b/docs/com/dynatrace/oneagent/sdk/api/enums/MessageDestinationType.html @@ -2,12 +2,12 @@ - + -MessageDestinationType (sdk 1.7.0 API) +MessageDestinationType (sdk 1.8.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="MessageDestinationType (sdk 1.7.0 API)"; + parent.document.title="MessageDestinationType (sdk 1.8.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/enums/MessageSystemVendor.html b/docs/com/dynatrace/oneagent/sdk/api/enums/MessageSystemVendor.html old mode 100644 new mode 100755 index c70ad0e..8be78b4 --- a/docs/com/dynatrace/oneagent/sdk/api/enums/MessageSystemVendor.html +++ b/docs/com/dynatrace/oneagent/sdk/api/enums/MessageSystemVendor.html @@ -2,12 +2,12 @@ - + -MessageSystemVendor (sdk 1.7.0 API) +MessageSystemVendor (sdk 1.8.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="MessageSystemVendor (sdk 1.7.0 API)"; + parent.document.title="MessageSystemVendor (sdk 1.8.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/enums/SDKState.html b/docs/com/dynatrace/oneagent/sdk/api/enums/SDKState.html old mode 100644 new mode 100755 index 2ea4f8c..b68c385 --- a/docs/com/dynatrace/oneagent/sdk/api/enums/SDKState.html +++ b/docs/com/dynatrace/oneagent/sdk/api/enums/SDKState.html @@ -2,12 +2,12 @@ - + -SDKState (sdk 1.7.0 API) +SDKState (sdk 1.8.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="SDKState (sdk 1.7.0 API)"; + parent.document.title="SDKState (sdk 1.8.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/enums/package-frame.html b/docs/com/dynatrace/oneagent/sdk/api/enums/package-frame.html old mode 100644 new mode 100755 index e347524..9366969 --- a/docs/com/dynatrace/oneagent/sdk/api/enums/package-frame.html +++ b/docs/com/dynatrace/oneagent/sdk/api/enums/package-frame.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api.enums (sdk 1.7.0 API) +com.dynatrace.oneagent.sdk.api.enums (sdk 1.8.0 API) - + diff --git a/docs/com/dynatrace/oneagent/sdk/api/enums/package-summary.html b/docs/com/dynatrace/oneagent/sdk/api/enums/package-summary.html old mode 100644 new mode 100755 index f2709aa..7d7faa0 --- a/docs/com/dynatrace/oneagent/sdk/api/enums/package-summary.html +++ b/docs/com/dynatrace/oneagent/sdk/api/enums/package-summary.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api.enums (sdk 1.7.0 API) +com.dynatrace.oneagent.sdk.api.enums (sdk 1.8.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.dynatrace.oneagent.sdk.api.enums (sdk 1.7.0 API)"; + parent.document.title="com.dynatrace.oneagent.sdk.api.enums (sdk 1.8.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/enums/package-tree.html b/docs/com/dynatrace/oneagent/sdk/api/enums/package-tree.html old mode 100644 new mode 100755 index 17316ef..b09f267 --- a/docs/com/dynatrace/oneagent/sdk/api/enums/package-tree.html +++ b/docs/com/dynatrace/oneagent/sdk/api/enums/package-tree.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api.enums Class Hierarchy (sdk 1.7.0 API) +com.dynatrace.oneagent.sdk.api.enums Class Hierarchy (sdk 1.8.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.dynatrace.oneagent.sdk.api.enums Class Hierarchy (sdk 1.7.0 API)"; + parent.document.title="com.dynatrace.oneagent.sdk.api.enums Class Hierarchy (sdk 1.8.0 API)"; } } @@ -93,7 +93,7 @@

  • java.lang.Object
    diff --git a/docs/com/dynatrace/oneagent/sdk/api/infos/DatabaseInfo.html b/docs/com/dynatrace/oneagent/sdk/api/infos/DatabaseInfo.html old mode 100644 new mode 100755 index bdb6b93..d6fb1f8 --- a/docs/com/dynatrace/oneagent/sdk/api/infos/DatabaseInfo.html +++ b/docs/com/dynatrace/oneagent/sdk/api/infos/DatabaseInfo.html @@ -2,12 +2,12 @@ - + -DatabaseInfo (sdk 1.7.0 API) +DatabaseInfo (sdk 1.8.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="DatabaseInfo (sdk 1.7.0 API)"; + parent.document.title="DatabaseInfo (sdk 1.8.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/infos/MessagingSystemInfo.html b/docs/com/dynatrace/oneagent/sdk/api/infos/MessagingSystemInfo.html old mode 100644 new mode 100755 index c4b14d5..71b1a78 --- a/docs/com/dynatrace/oneagent/sdk/api/infos/MessagingSystemInfo.html +++ b/docs/com/dynatrace/oneagent/sdk/api/infos/MessagingSystemInfo.html @@ -2,12 +2,12 @@ - + -MessagingSystemInfo (sdk 1.7.0 API) +MessagingSystemInfo (sdk 1.8.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="MessagingSystemInfo (sdk 1.7.0 API)"; + parent.document.title="MessagingSystemInfo (sdk 1.8.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/infos/WebApplicationInfo.html b/docs/com/dynatrace/oneagent/sdk/api/infos/WebApplicationInfo.html old mode 100644 new mode 100755 index 16dcc05..11d415c --- a/docs/com/dynatrace/oneagent/sdk/api/infos/WebApplicationInfo.html +++ b/docs/com/dynatrace/oneagent/sdk/api/infos/WebApplicationInfo.html @@ -2,12 +2,12 @@ - + -WebApplicationInfo (sdk 1.7.0 API) +WebApplicationInfo (sdk 1.8.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="WebApplicationInfo (sdk 1.7.0 API)"; + parent.document.title="WebApplicationInfo (sdk 1.8.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/infos/package-frame.html b/docs/com/dynatrace/oneagent/sdk/api/infos/package-frame.html old mode 100644 new mode 100755 index 1ae39f8..12c72b3 --- a/docs/com/dynatrace/oneagent/sdk/api/infos/package-frame.html +++ b/docs/com/dynatrace/oneagent/sdk/api/infos/package-frame.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api.infos (sdk 1.7.0 API) +com.dynatrace.oneagent.sdk.api.infos (sdk 1.8.0 API) - + diff --git a/docs/com/dynatrace/oneagent/sdk/api/infos/package-summary.html b/docs/com/dynatrace/oneagent/sdk/api/infos/package-summary.html old mode 100644 new mode 100755 index c4223c6..2a8126d --- a/docs/com/dynatrace/oneagent/sdk/api/infos/package-summary.html +++ b/docs/com/dynatrace/oneagent/sdk/api/infos/package-summary.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api.infos (sdk 1.7.0 API) +com.dynatrace.oneagent.sdk.api.infos (sdk 1.8.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.dynatrace.oneagent.sdk.api.infos (sdk 1.7.0 API)"; + parent.document.title="com.dynatrace.oneagent.sdk.api.infos (sdk 1.8.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/infos/package-tree.html b/docs/com/dynatrace/oneagent/sdk/api/infos/package-tree.html old mode 100644 new mode 100755 index 2bdf242..d966a17 --- a/docs/com/dynatrace/oneagent/sdk/api/infos/package-tree.html +++ b/docs/com/dynatrace/oneagent/sdk/api/infos/package-tree.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api.infos Class Hierarchy (sdk 1.7.0 API) +com.dynatrace.oneagent.sdk.api.infos Class Hierarchy (sdk 1.8.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.dynatrace.oneagent.sdk.api.infos Class Hierarchy (sdk 1.7.0 API)"; + parent.document.title="com.dynatrace.oneagent.sdk.api.infos Class Hierarchy (sdk 1.8.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/metric/FloatCounter.html b/docs/com/dynatrace/oneagent/sdk/api/metric/FloatCounter.html new file mode 100755 index 0000000..6c692ad --- /dev/null +++ b/docs/com/dynatrace/oneagent/sdk/api/metric/FloatCounter.html @@ -0,0 +1,225 @@ + + + + + + +FloatCounter (sdk 1.8.0 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +com.dynatrace.oneagent.sdk.api.metric +
    +Interface FloatCounter

    +
    +
    All Superinterfaces:
    Metric
    +
    +
    +
    +
    public interface FloatCounter
    extends Metric
    + + +

    +


    + +

    + + + + + + + + + + + + +
    +Method Summary
    + voidincreaseBy(double by, + java.lang.String dimension) + +
    +          Increase the counter by the provided value
    + + + + + + + +
    Methods inherited from interface com.dynatrace.oneagent.sdk.api.metric.Metric
    release
    +  +

    + + + + + + + + +
    +Method Detail
    + +

    +increaseBy

    +
    +void increaseBy(double by,
    +                java.lang.String dimension)
    +
    +
    Increase the counter by the provided value +

    +

    +
    +
    +
    +
    Parameters:
    by - value
    dimension - optional dimension. e. g. name of the concerned resource (disk + name, page name, ...). Parameter is optional - set to null if no + dimension should be reported.
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + + + diff --git a/docs/com/dynatrace/oneagent/sdk/api/metric/FloatGauge.html b/docs/com/dynatrace/oneagent/sdk/api/metric/FloatGauge.html new file mode 100755 index 0000000..730d65b --- /dev/null +++ b/docs/com/dynatrace/oneagent/sdk/api/metric/FloatGauge.html @@ -0,0 +1,225 @@ + + + + + + +FloatGauge (sdk 1.8.0 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +com.dynatrace.oneagent.sdk.api.metric +
    +Interface FloatGauge

    +
    +
    All Superinterfaces:
    Metric
    +
    +
    +
    +
    public interface FloatGauge
    extends Metric
    + + +

    +


    + +

    + + + + + + + + + + + + +
    +Method Summary
    + voidsetValue(double currentValue, + java.lang.String dimension) + +
    +          Sets the current value
    + + + + + + + +
    Methods inherited from interface com.dynatrace.oneagent.sdk.api.metric.Metric
    release
    +  +

    + + + + + + + + +
    +Method Detail
    + +

    +setValue

    +
    +void setValue(double currentValue,
    +              java.lang.String dimension)
    +
    +
    Sets the current value +

    +

    +
    +
    +
    +
    Parameters:
    currentValue - the current value
    dimension - optional dimension. e. g. name of the concerned resource (disk + name, page name, ...). Parameter is optional - set to null if + no dimension should be reported.
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + + + diff --git a/docs/com/dynatrace/oneagent/sdk/api/metric/FloatStatistics.html b/docs/com/dynatrace/oneagent/sdk/api/metric/FloatStatistics.html new file mode 100755 index 0000000..2a12764 --- /dev/null +++ b/docs/com/dynatrace/oneagent/sdk/api/metric/FloatStatistics.html @@ -0,0 +1,225 @@ + + + + + + +FloatStatistics (sdk 1.8.0 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +com.dynatrace.oneagent.sdk.api.metric +
    +Interface FloatStatistics

    +
    +
    All Superinterfaces:
    Metric
    +
    +
    +
    +
    public interface FloatStatistics
    extends Metric
    + + +

    +


    + +

    + + + + + + + + + + + + +
    +Method Summary
    + voidaddValue(double value, + java.lang.String dimension) + +
    +          Adds a new value to this statistics metric.
    + + + + + + + +
    Methods inherited from interface com.dynatrace.oneagent.sdk.api.metric.Metric
    release
    +  +

    + + + + + + + + +
    +Method Detail
    + +

    +addValue

    +
    +void addValue(double value,
    +              java.lang.String dimension)
    +
    +
    Adds a new value to this statistics metric. +

    +

    +
    +
    +
    +
    Parameters:
    value - the sample to be added
    dimension - optional dimension. e. g. name of the concerned resource (disk + name, page name, ...). Parameter is optional - set to null if + no dimension should be reported.
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + + + diff --git a/docs/com/dynatrace/oneagent/sdk/api/metric/IntegerCounter.html b/docs/com/dynatrace/oneagent/sdk/api/metric/IntegerCounter.html new file mode 100755 index 0000000..aa3b45d --- /dev/null +++ b/docs/com/dynatrace/oneagent/sdk/api/metric/IntegerCounter.html @@ -0,0 +1,225 @@ + + + + + + +IntegerCounter (sdk 1.8.0 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +com.dynatrace.oneagent.sdk.api.metric +
    +Interface IntegerCounter

    +
    +
    All Superinterfaces:
    Metric
    +
    +
    +
    +
    public interface IntegerCounter
    extends Metric
    + + +

    +


    + +

    + + + + + + + + + + + + +
    +Method Summary
    + voidincreaseBy(long by, + java.lang.String dimension) + +
    +          Increase the counter by the provided value
    + + + + + + + +
    Methods inherited from interface com.dynatrace.oneagent.sdk.api.metric.Metric
    release
    +  +

    + + + + + + + + +
    +Method Detail
    + +

    +increaseBy

    +
    +void increaseBy(long by,
    +                java.lang.String dimension)
    +
    +
    Increase the counter by the provided value +

    +

    +
    +
    +
    +
    Parameters:
    by - value
    dimension - optional dimension. e. g. name of the concerned resource (disk + name, page name, ...). Parameter is optional - set to null if no + dimension should be reported.
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + + + diff --git a/docs/com/dynatrace/oneagent/sdk/api/metric/IntegerGauge.html b/docs/com/dynatrace/oneagent/sdk/api/metric/IntegerGauge.html new file mode 100755 index 0000000..e2a9e9b --- /dev/null +++ b/docs/com/dynatrace/oneagent/sdk/api/metric/IntegerGauge.html @@ -0,0 +1,225 @@ + + + + + + +IntegerGauge (sdk 1.8.0 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +com.dynatrace.oneagent.sdk.api.metric +
    +Interface IntegerGauge

    +
    +
    All Superinterfaces:
    Metric
    +
    +
    +
    +
    public interface IntegerGauge
    extends Metric
    + + +

    +


    + +

    + + + + + + + + + + + + +
    +Method Summary
    + voidsetValue(long currentValue, + java.lang.String dimension) + +
    +          Sets the current value
    + + + + + + + +
    Methods inherited from interface com.dynatrace.oneagent.sdk.api.metric.Metric
    release
    +  +

    + + + + + + + + +
    +Method Detail
    + +

    +setValue

    +
    +void setValue(long currentValue,
    +              java.lang.String dimension)
    +
    +
    Sets the current value +

    +

    +
    +
    +
    +
    Parameters:
    currentValue - the current value
    dimension - optional dimension. e. g. name of the concerned resource (disk + name, page name, ...). Parameter is optional - set to null if + no dimension should be reported.
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + + + diff --git a/docs/com/dynatrace/oneagent/sdk/api/metric/IntegerStatistics.html b/docs/com/dynatrace/oneagent/sdk/api/metric/IntegerStatistics.html new file mode 100755 index 0000000..d20cf92 --- /dev/null +++ b/docs/com/dynatrace/oneagent/sdk/api/metric/IntegerStatistics.html @@ -0,0 +1,225 @@ + + + + + + +IntegerStatistics (sdk 1.8.0 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +com.dynatrace.oneagent.sdk.api.metric +
    +Interface IntegerStatistics

    +
    +
    All Superinterfaces:
    Metric
    +
    +
    +
    +
    public interface IntegerStatistics
    extends Metric
    + + +

    +


    + +

    + + + + + + + + + + + + +
    +Method Summary
    + voidaddValue(long value, + java.lang.String dimension) + +
    +          Adds a new value to this statistics metric.
    + + + + + + + +
    Methods inherited from interface com.dynatrace.oneagent.sdk.api.metric.Metric
    release
    +  +

    + + + + + + + + +
    +Method Detail
    + +

    +addValue

    +
    +void addValue(long value,
    +              java.lang.String dimension)
    +
    +
    Adds a new value to this statistics metric. +

    +

    +
    +
    +
    +
    Parameters:
    value - the value to be added
    dimension - optional dimension. e. g. name of the concerned resource (disk + name, page name, ...). Parameter is optional - set to null if + no dimension should be reported.
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + + + diff --git a/docs/com/dynatrace/oneagent/sdk/api/metric/Metric.html b/docs/com/dynatrace/oneagent/sdk/api/metric/Metric.html new file mode 100755 index 0000000..654777f --- /dev/null +++ b/docs/com/dynatrace/oneagent/sdk/api/metric/Metric.html @@ -0,0 +1,210 @@ + + + + + + +Metric (sdk 1.8.0 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +com.dynatrace.oneagent.sdk.api.metric +
    +Interface Metric

    +
    +
    All Known Subinterfaces:
    FloatCounter, FloatGauge, FloatStatistics, IntegerCounter, IntegerGauge, IntegerStatistics
    +
    +
    +
    +
    public interface Metric
    + + +

    +


    + +

    + + + + + + + + + + + + +
    +Method Summary
    + voidrelease() + +
    +          closes this metric reporter instance and releases resources therefore.
    +  +

    + + + + + + + + +
    +Method Detail
    + +

    +release

    +
    +void release()
    +
    +
    closes this metric reporter instance and releases resources therefore. + reporting on an instance is forbidden after this method has been called. +

    +

    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + + + diff --git a/docs/com/dynatrace/oneagent/sdk/api/metric/package-frame.html b/docs/com/dynatrace/oneagent/sdk/api/metric/package-frame.html new file mode 100755 index 0000000..eef0214 --- /dev/null +++ b/docs/com/dynatrace/oneagent/sdk/api/metric/package-frame.html @@ -0,0 +1,44 @@ + + + + + + +com.dynatrace.oneagent.sdk.api.metric (sdk 1.8.0 API) + + + + + + + + + + + +com.dynatrace.oneagent.sdk.api.metric + + + + +
    +Interfaces  + +
    +FloatCounter +
    +FloatGauge +
    +FloatStatistics +
    +IntegerCounter +
    +IntegerGauge +
    +IntegerStatistics +
    +Metric
    + + + + diff --git a/docs/com/dynatrace/oneagent/sdk/api/metric/package-summary.html b/docs/com/dynatrace/oneagent/sdk/api/metric/package-summary.html new file mode 100755 index 0000000..d8135ef --- /dev/null +++ b/docs/com/dynatrace/oneagent/sdk/api/metric/package-summary.html @@ -0,0 +1,179 @@ + + + + + + +com.dynatrace.oneagent.sdk.api.metric (sdk 1.8.0 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +

    +Package com.dynatrace.oneagent.sdk.api.metric +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Interface Summary
    FloatCounter 
    FloatGauge 
    FloatStatistics 
    IntegerCounter 
    IntegerGauge 
    IntegerStatistics 
    Metric 
    +  + +

    +

    +
    +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    + + + diff --git a/docs/com/dynatrace/oneagent/sdk/api/metric/package-tree.html b/docs/com/dynatrace/oneagent/sdk/api/metric/package-tree.html new file mode 100755 index 0000000..51ae45d --- /dev/null +++ b/docs/com/dynatrace/oneagent/sdk/api/metric/package-tree.html @@ -0,0 +1,151 @@ + + + + + + +com.dynatrace.oneagent.sdk.api.metric Class Hierarchy (sdk 1.8.0 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +

    +Hierarchy For Package com.dynatrace.oneagent.sdk.api.metric +

    +
    +
    +
    Package Hierarchies:
    All Packages
    +
    +

    +Interface Hierarchy +

    + +
    + + + + + + + + + + + + + + + +
    + +
    + + + +
    + + + diff --git a/docs/com/dynatrace/oneagent/sdk/api/package-frame.html b/docs/com/dynatrace/oneagent/sdk/api/package-frame.html old mode 100644 new mode 100755 index 5629847..dc8780c --- a/docs/com/dynatrace/oneagent/sdk/api/package-frame.html +++ b/docs/com/dynatrace/oneagent/sdk/api/package-frame.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api (sdk 1.7.0 API) +com.dynatrace.oneagent.sdk.api (sdk 1.8.0 API) - + @@ -23,6 +23,8 @@ Interfaces
     
    +CustomServiceTracer +
    DatabaseRequestTracer
    IncomingMessageProcessTracer diff --git a/docs/com/dynatrace/oneagent/sdk/api/package-summary.html b/docs/com/dynatrace/oneagent/sdk/api/package-summary.html old mode 100644 new mode 100755 index f7cea22..756d323 --- a/docs/com/dynatrace/oneagent/sdk/api/package-summary.html +++ b/docs/com/dynatrace/oneagent/sdk/api/package-summary.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api (sdk 1.7.0 API) +com.dynatrace.oneagent.sdk.api (sdk 1.8.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.dynatrace.oneagent.sdk.api (sdk 1.7.0 API)"; + parent.document.title="com.dynatrace.oneagent.sdk.api (sdk 1.8.0 API)"; } } @@ -88,6 +88,10 @@

    Interface Summary +CustomServiceTracer +Interface for tracing custom services. + + DatabaseRequestTracer Interface for outgoing database tracer. diff --git a/docs/com/dynatrace/oneagent/sdk/api/package-tree.html b/docs/com/dynatrace/oneagent/sdk/api/package-tree.html old mode 100644 new mode 100755 index 6d741ad..1f2cfdd --- a/docs/com/dynatrace/oneagent/sdk/api/package-tree.html +++ b/docs/com/dynatrace/oneagent/sdk/api/package-tree.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api Class Hierarchy (sdk 1.7.0 API) +com.dynatrace.oneagent.sdk.api Class Hierarchy (sdk 1.8.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.dynatrace.oneagent.sdk.api Class Hierarchy (sdk 1.7.0 API)"; + parent.document.title="com.dynatrace.oneagent.sdk.api Class Hierarchy (sdk 1.8.0 API)"; } } @@ -101,7 +101,7 @@

  • com.dynatrace.oneagent.sdk.api.OutgoingWebRequestTracer (also extends com.dynatrace.oneagent.sdk.api.Tracer)
  • com.dynatrace.oneagent.sdk.api.Tracer
      -
    • com.dynatrace.oneagent.sdk.api.DatabaseRequestTracer
    • com.dynatrace.oneagent.sdk.api.IncomingMessageProcessTracer (also extends com.dynatrace.oneagent.sdk.api.IncomingTaggable) +
    • com.dynatrace.oneagent.sdk.api.CustomServiceTracer
    • com.dynatrace.oneagent.sdk.api.DatabaseRequestTracer
    • com.dynatrace.oneagent.sdk.api.IncomingMessageProcessTracer (also extends com.dynatrace.oneagent.sdk.api.IncomingTaggable)
    • com.dynatrace.oneagent.sdk.api.IncomingMessageReceiveTracer
    • com.dynatrace.oneagent.sdk.api.IncomingRemoteCallTracer (also extends com.dynatrace.oneagent.sdk.api.IncomingTaggable)
    • com.dynatrace.oneagent.sdk.api.IncomingWebRequestTracer (also extends com.dynatrace.oneagent.sdk.api.IncomingTaggable)
    • com.dynatrace.oneagent.sdk.api.InProcessLinkTracer
    • com.dynatrace.oneagent.sdk.api.OutgoingMessageTracer (also extends com.dynatrace.oneagent.sdk.api.OutgoingTaggable) diff --git a/docs/com/dynatrace/oneagent/sdk/package-frame.html b/docs/com/dynatrace/oneagent/sdk/package-frame.html old mode 100644 new mode 100755 index fa519b2..f036acf --- a/docs/com/dynatrace/oneagent/sdk/package-frame.html +++ b/docs/com/dynatrace/oneagent/sdk/package-frame.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk (sdk 1.7.0 API) +com.dynatrace.oneagent.sdk (sdk 1.8.0 API) - + diff --git a/docs/com/dynatrace/oneagent/sdk/package-summary.html b/docs/com/dynatrace/oneagent/sdk/package-summary.html old mode 100644 new mode 100755 index 36e95fc..0812527 --- a/docs/com/dynatrace/oneagent/sdk/package-summary.html +++ b/docs/com/dynatrace/oneagent/sdk/package-summary.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk (sdk 1.7.0 API) +com.dynatrace.oneagent.sdk (sdk 1.8.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.dynatrace.oneagent.sdk (sdk 1.7.0 API)"; + parent.document.title="com.dynatrace.oneagent.sdk (sdk 1.8.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/package-tree.html b/docs/com/dynatrace/oneagent/sdk/package-tree.html old mode 100644 new mode 100755 index ba8d90f..69f3211 --- a/docs/com/dynatrace/oneagent/sdk/package-tree.html +++ b/docs/com/dynatrace/oneagent/sdk/package-tree.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk Class Hierarchy (sdk 1.7.0 API) +com.dynatrace.oneagent.sdk Class Hierarchy (sdk 1.8.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.dynatrace.oneagent.sdk Class Hierarchy (sdk 1.7.0 API)"; + parent.document.title="com.dynatrace.oneagent.sdk Class Hierarchy (sdk 1.8.0 API)"; } } diff --git a/docs/constant-values.html b/docs/constant-values.html old mode 100644 new mode 100755 index 4c90b61..242e252 --- a/docs/constant-values.html +++ b/docs/constant-values.html @@ -2,12 +2,12 @@ - + -Constant Field Values (sdk 1.7.0 API) +Constant Field Values (sdk 1.8.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Constant Field Values (sdk 1.7.0 API)"; + parent.document.title="Constant Field Values (sdk 1.8.0 API)"; } } diff --git a/docs/deprecated-list.html b/docs/deprecated-list.html old mode 100644 new mode 100755 index fdb3e2e..471d64d --- a/docs/deprecated-list.html +++ b/docs/deprecated-list.html @@ -2,12 +2,12 @@ - + -Deprecated List (sdk 1.7.0 API) +Deprecated List (sdk 1.8.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Deprecated List (sdk 1.7.0 API)"; + parent.document.title="Deprecated List (sdk 1.8.0 API)"; } } diff --git a/docs/help-doc.html b/docs/help-doc.html old mode 100644 new mode 100755 index e4bcd68..a1d3492 --- a/docs/help-doc.html +++ b/docs/help-doc.html @@ -2,12 +2,12 @@ - + -API Help (sdk 1.7.0 API) +API Help (sdk 1.8.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="API Help (sdk 1.7.0 API)"; + parent.document.title="API Help (sdk 1.8.0 API)"; } } diff --git a/docs/index-all.html b/docs/index-all.html old mode 100644 new mode 100755 index caab050..2ecb3d9 --- a/docs/index-all.html +++ b/docs/index-all.html @@ -2,12 +2,12 @@ - + -Index (sdk 1.7.0 API) +Index (sdk 1.8.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Index (sdk 1.7.0 API)"; + parent.document.title="Index (sdk 1.8.0 API)"; } } @@ -130,7 +130,7 @@ Method in interface com.dynatrace.oneagent.sdk.api.OneAgentSDK
      Initializes a WebApplicationInfo instance that is required for tracing incoming web requests. -
  • +
    CustomServiceTracer - Interface in com.dynatrace.oneagent.sdk.api
    Interface for tracing custom services.

    D

    @@ -273,6 +273,9 @@
    toString() - Method in enum com.dynatrace.oneagent.sdk.api.enums.MessageSystemVendor
      +
    traceCustomService(String, String) - +Method in interface com.dynatrace.oneagent.sdk.api.OneAgentSDK +
    Creates a tracer for a custom transaction (Dynatrace calls them Custom service).
    traceIncomingMessageProcess(MessagingSystemInfo) - Method in interface com.dynatrace.oneagent.sdk.api.OneAgentSDK
    Creates a tracer for processing (consuming) a received message (onMessage). diff --git a/docs/index.html b/docs/index.html old mode 100644 new mode 100755 index ec50c3d..ae7122e --- a/docs/index.html +++ b/docs/index.html @@ -2,50 +2,16 @@ - + -sdk 1.7.0 API +sdk 1.8.0 API @@ -80,7 +80,7 @@

    -sdk 1.7.0 API +sdk 1.8.0 API

    diff --git a/docs/overview-tree.html b/docs/overview-tree.html old mode 100644 new mode 100755 index 0006066..57444ac --- a/docs/overview-tree.html +++ b/docs/overview-tree.html @@ -2,12 +2,12 @@ - + -Class Hierarchy (sdk 1.7.0 API) +Class Hierarchy (sdk 1.8.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Class Hierarchy (sdk 1.7.0 API)"; + parent.document.title="Class Hierarchy (sdk 1.8.0 API)"; } } @@ -107,7 +107,7 @@

  • com.dynatrace.oneagent.sdk.api.OutgoingWebRequestTracer (also extends com.dynatrace.oneagent.sdk.api.Tracer)
  • com.dynatrace.oneagent.sdk.api.Tracer
    diff --git a/docs/package-list b/docs/package-list old mode 100644 new mode 100755 diff --git a/docs/resources/inherit.gif b/docs/resources/inherit.gif old mode 100644 new mode 100755 diff --git a/docs/stylesheet.css b/docs/stylesheet.css old mode 100644 new mode 100755 diff --git a/src/main/java/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.java b/src/main/java/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.java index f1bb884..eba5df3 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/CustomServiceTracer.java b/src/main/java/com/dynatrace/oneagent/sdk/api/CustomServiceTracer.java new file mode 100644 index 0000000..e57970f --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/CustomServiceTracer.java @@ -0,0 +1,25 @@ +/* + * Copyright 2021 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.api; + +/** + * Interface for tracing custom services. + * https://github.com/Dynatrace/OneAgent-SDK#customservice + * + * @since 1.8.0 + */ +public interface CustomServiceTracer extends Tracer { +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/DatabaseRequestTracer.java b/src/main/java/com/dynatrace/oneagent/sdk/api/DatabaseRequestTracer.java index 3e2e94d..7782216 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/DatabaseRequestTracer.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/DatabaseRequestTracer.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,7 +17,7 @@ /** * Interface for outgoing database tracer. - * https://github.com/Dynatrace/OneAgent-SDK-for-Java#databaseRequest + * https://github.com/Dynatrace/OneAgent-SDK#database * * @since 1.7.0 */ diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/InProcessLink.java b/src/main/java/com/dynatrace/oneagent/sdk/api/InProcessLink.java index 3bf52d4..49f11d0 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/InProcessLink.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/InProcessLink.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.java b/src/main/java/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.java index ed9b04e..26f77e7 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingMessageProcessTracer.java b/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingMessageProcessTracer.java index 50d5751..7f0954d 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingMessageProcessTracer.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingMessageProcessTracer.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingMessageReceiveTracer.java b/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingMessageReceiveTracer.java index ab144e0..1e9610e 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingMessageReceiveTracer.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingMessageReceiveTracer.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.java b/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.java index 440b6cc..d271903 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingTaggable.java b/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingTaggable.java index eae1673..8237d0d 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingTaggable.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingTaggable.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingWebRequestTracer.java b/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingWebRequestTracer.java index a2541ae..95f9055 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingWebRequestTracer.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingWebRequestTracer.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/LoggingCallback.java b/src/main/java/com/dynatrace/oneagent/sdk/api/LoggingCallback.java index 1190a30..9bbf702 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/LoggingCallback.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/LoggingCallback.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/OneAgentSDK.java b/src/main/java/com/dynatrace/oneagent/sdk/api/OneAgentSDK.java index 84306d2..cc47ffa 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/OneAgentSDK.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/OneAgentSDK.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -269,7 +269,7 @@ OutgoingRemoteCallTracer traceOutgoingRemoteCall(String serviceMethod, String se * @since 1.5 */ IncomingMessageProcessTracer traceIncomingMessageProcess(MessagingSystemInfo messagingSystem); - + // ***** various ***** /** @@ -292,4 +292,16 @@ OutgoingRemoteCallTracer traceOutgoingRemoteCall(String serviceMethod, String se * @since 1.0 */ SDKState getCurrentState(); + + /** + * Creates a tracer for a custom transaction (Dynatrace calls them Custom service). Used whenever a transaction + * should be traced, that does not match any of the specialised transaction types (e. g. DB-request, webrequest, ...). + * + * @param serviceMethod service method being used for service creation. + * @param serviceName service name being used for service creation. + * + * @return {@link CustomServiceTracer} to work with + * @since 1.8 + */ + CustomServiceTracer traceCustomService(String serviceMethod, String serviceName); } diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingMessageTracer.java b/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingMessageTracer.java index cfe5977..1754ccd 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingMessageTracer.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingMessageTracer.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.java b/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.java index 8d26b4b..ca47f78 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.java b/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.java index 22a8b8e..114bb23 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingWebRequestTracer.java b/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingWebRequestTracer.java index dd45469..54e83f3 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingWebRequestTracer.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingWebRequestTracer.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/Tracer.java b/src/main/java/com/dynatrace/oneagent/sdk/api/Tracer.java index 5bb8969..1b44575 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/Tracer.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/Tracer.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/enums/ChannelType.java b/src/main/java/com/dynatrace/oneagent/sdk/api/enums/ChannelType.java index f15f0b1..4d9d50c 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/enums/ChannelType.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/enums/ChannelType.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/enums/DatabaseVendor.java b/src/main/java/com/dynatrace/oneagent/sdk/api/enums/DatabaseVendor.java index ce6762d..60de431 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/enums/DatabaseVendor.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/enums/DatabaseVendor.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/enums/MessageDestinationType.java b/src/main/java/com/dynatrace/oneagent/sdk/api/enums/MessageDestinationType.java index f890189..3df633b 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/enums/MessageDestinationType.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/enums/MessageDestinationType.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/enums/MessageSystemVendor.java b/src/main/java/com/dynatrace/oneagent/sdk/api/enums/MessageSystemVendor.java index 4ae51e7..2a8ede2 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/enums/MessageSystemVendor.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/enums/MessageSystemVendor.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/enums/SDKState.java b/src/main/java/com/dynatrace/oneagent/sdk/api/enums/SDKState.java index 11e4884..5183522 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/enums/SDKState.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/enums/SDKState.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/infos/DatabaseInfo.java b/src/main/java/com/dynatrace/oneagent/sdk/api/infos/DatabaseInfo.java index cbd36b8..832e261 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/infos/DatabaseInfo.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/infos/DatabaseInfo.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/infos/MessagingSystemInfo.java b/src/main/java/com/dynatrace/oneagent/sdk/api/infos/MessagingSystemInfo.java index 732e0d8..eafd01f 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/infos/MessagingSystemInfo.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/infos/MessagingSystemInfo.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/infos/WebApplicationInfo.java b/src/main/java/com/dynatrace/oneagent/sdk/api/infos/WebApplicationInfo.java index 90aead4..e76caaa 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/infos/WebApplicationInfo.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/infos/WebApplicationInfo.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/OneAgentSDKFactoryImpl.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/OneAgentSDKFactoryImpl.java index d2d62be..897c8ea 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/OneAgentSDKFactoryImpl.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/OneAgentSDKFactoryImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -30,7 +30,7 @@ public class OneAgentSDKFactoryImpl { * OneAgent), increase oneSdkFix only. */ static final int oneSdkMajor = 1; - static final int oneSdkMinor = 7; + static final int oneSdkMinor = 8; static final int oneSdkFix = 0; public static final boolean debugOneAgentSdkStub = Boolean.parseBoolean(System.getProperty("com.dynatrace.oneagent.sdk.debug", "false")); diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/SDKInstanceProvider.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/SDKInstanceProvider.java index 7311cb9..2cbb013 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/SDKInstanceProvider.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/SDKInstanceProvider.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/CustomServiceTracerNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/CustomServiceTracerNoop.java new file mode 100644 index 0000000..eac4a6e --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/CustomServiceTracerNoop.java @@ -0,0 +1,42 @@ +/* + * Copyright 2021 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.impl.noop; + +import com.dynatrace.oneagent.sdk.api.CustomServiceTracer; + +public final class CustomServiceTracerNoop extends NodeNoop implements CustomServiceTracer { + + public static final CustomServiceTracer INSTANCE = new CustomServiceTracerNoop(); + + private CustomServiceTracerNoop() { + } + + @Override + public void start() { + } + + @Override + public void end() { + } + + @Override + public void error(String message) { + } + + @Override + public void error(Throwable throwable) { + } +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/DatabaseInfoNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/DatabaseInfoNoop.java index 13ca984..47d3520 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/DatabaseInfoNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/DatabaseInfoNoop.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,6 +17,9 @@ import com.dynatrace.oneagent.sdk.api.infos.DatabaseInfo; -public class DatabaseInfoNoop implements DatabaseInfo { +public final class DatabaseInfoNoop implements DatabaseInfo { public static final DatabaseInfo INSTANCE = new DatabaseInfoNoop(); + + private DatabaseInfoNoop() { + } } diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/DatabaseRequestTracerNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/DatabaseRequestTracerNoop.java index 3252ac3..fa54310 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/DatabaseRequestTracerNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/DatabaseRequestTracerNoop.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,7 +17,7 @@ import com.dynatrace.oneagent.sdk.api.DatabaseRequestTracer; -public class DatabaseRequestTracerNoop extends NodeNoop implements DatabaseRequestTracer { +public final class DatabaseRequestTracerNoop extends NodeNoop implements DatabaseRequestTracer { public static final DatabaseRequestTracerNoop INSTANCE = new DatabaseRequestTracerNoop(); diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/InProcessLinkNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/InProcessLinkNoop.java index 09f163e..c7b84d0 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/InProcessLinkNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/InProcessLinkNoop.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,8 +17,10 @@ import com.dynatrace.oneagent.sdk.api.InProcessLink; -public class InProcessLinkNoop implements InProcessLink { +public final class InProcessLinkNoop implements InProcessLink { public final static InProcessLink INSTANCE = new InProcessLinkNoop(); + private InProcessLinkNoop() { + } } diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/InProcessLinkTracerNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/InProcessLinkTracerNoop.java index 74ea9af..e3f3ca8 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/InProcessLinkTracerNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/InProcessLinkTracerNoop.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,8 +17,10 @@ import com.dynatrace.oneagent.sdk.api.InProcessLinkTracer; -public class InProcessLinkTracerNoop extends NodeNoop implements InProcessLinkTracer { +public final class InProcessLinkTracerNoop extends NodeNoop implements InProcessLinkTracer { public final static InProcessLinkTracer INSTANCE = new InProcessLinkTracerNoop(); + private InProcessLinkTracerNoop() { + } } diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/IncomingMessageProcessTracerNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/IncomingMessageProcessTracerNoop.java index c47ef85..462f9d3 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/IncomingMessageProcessTracerNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/IncomingMessageProcessTracerNoop.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,7 +17,7 @@ import com.dynatrace.oneagent.sdk.api.IncomingMessageProcessTracer; -public class IncomingMessageProcessTracerNoop extends NodeNoop implements IncomingMessageProcessTracer { +public final class IncomingMessageProcessTracerNoop extends NodeNoop implements IncomingMessageProcessTracer { public static final IncomingMessageProcessTracerNoop INSTANCE = new IncomingMessageProcessTracerNoop(); diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/IncomingMessageReceiveTracerNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/IncomingMessageReceiveTracerNoop.java index 2b21b85..9f7d34c 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/IncomingMessageReceiveTracerNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/IncomingMessageReceiveTracerNoop.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,7 +17,7 @@ import com.dynatrace.oneagent.sdk.api.IncomingMessageReceiveTracer; -public class IncomingMessageReceiveTracerNoop extends NodeNoop implements IncomingMessageReceiveTracer { +public final class IncomingMessageReceiveTracerNoop extends NodeNoop implements IncomingMessageReceiveTracer { public static final IncomingMessageReceiveTracerNoop INSTANCE = new IncomingMessageReceiveTracerNoop(); diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/IncomingWebRequestTracerNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/IncomingWebRequestTracerNoop.java index d5aecc2..32858ca 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/IncomingWebRequestTracerNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/IncomingWebRequestTracerNoop.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,7 +17,7 @@ import com.dynatrace.oneagent.sdk.api.IncomingWebRequestTracer; -public class IncomingWebRequestTracerNoop extends NodeNoop implements IncomingWebRequestTracer { +public final class IncomingWebRequestTracerNoop extends NodeNoop implements IncomingWebRequestTracer { public static final IncomingWebRequestTracer INSTANCE = new IncomingWebRequestTracerNoop(); diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/MessagingSystemInfoNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/MessagingSystemInfoNoop.java index dcbbecf..b0e4b67 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/MessagingSystemInfoNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/MessagingSystemInfoNoop.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,12 +17,11 @@ import com.dynatrace.oneagent.sdk.api.infos.MessagingSystemInfo; -public class MessagingSystemInfoNoop implements MessagingSystemInfo { +public final class MessagingSystemInfoNoop implements MessagingSystemInfo { public static final MessagingSystemInfoNoop INSTANCE = new MessagingSystemInfoNoop(); private MessagingSystemInfoNoop() { - } } diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/NodeNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/NodeNoop.java index 574acee..f5fb8a7 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/NodeNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/NodeNoop.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,7 +17,7 @@ import com.dynatrace.oneagent.sdk.api.Tracer; -class NodeNoop implements Tracer { +abstract class NodeNoop implements Tracer { protected static final byte[] NO_TAG_BLOB = new byte[] {}; protected static final String NO_TAG_STRING = ""; diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OneAgentSDKNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OneAgentSDKNoop.java index 700dba9..049c94d 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OneAgentSDKNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OneAgentSDKNoop.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,6 +15,7 @@ */ package com.dynatrace.oneagent.sdk.impl.noop; +import com.dynatrace.oneagent.sdk.api.CustomServiceTracer; import com.dynatrace.oneagent.sdk.api.DatabaseRequestTracer; import com.dynatrace.oneagent.sdk.api.InProcessLink; import com.dynatrace.oneagent.sdk.api.InProcessLinkTracer; @@ -41,8 +42,8 @@ * @author Alram.Lechner * */ -public class OneAgentSDKNoop implements OneAgentSDK { - +public final class OneAgentSDKNoop implements OneAgentSDK { + // ***** Webrequests (incoming) ***** @Override public WebApplicationInfo createWebApplicationInfo(String webServerName, String applicationID, String contextRoot) { @@ -137,4 +138,9 @@ public DatabaseInfo createDatabaseInfo(String name, String vendor, ChannelType c public DatabaseRequestTracer traceSqlDatabaseRequest(DatabaseInfo databaseInfo, String statement) { return DatabaseRequestTracerNoop.INSTANCE; } + + @Override + public CustomServiceTracer traceCustomService(String serviceMethod, String serviceName) { + return CustomServiceTracerNoop.INSTANCE; + } } diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OutgoingMessageTracerNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OutgoingMessageTracerNoop.java index f0602ff..33c5a99 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OutgoingMessageTracerNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OutgoingMessageTracerNoop.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,7 +17,7 @@ import com.dynatrace.oneagent.sdk.api.OutgoingMessageTracer; -public class OutgoingMessageTracerNoop extends NodeNoop implements OutgoingMessageTracer { +public final class OutgoingMessageTracerNoop extends NodeNoop implements OutgoingMessageTracer { public static final OutgoingMessageTracerNoop INSTANCE = new OutgoingMessageTracerNoop(); diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OutgoingWebRequestTracerNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OutgoingWebRequestTracerNoop.java index 45cb3b6..15768b3 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OutgoingWebRequestTracerNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OutgoingWebRequestTracerNoop.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,9 +17,12 @@ import com.dynatrace.oneagent.sdk.api.OutgoingWebRequestTracer; -public class OutgoingWebRequestTracerNoop extends NodeNoop implements OutgoingWebRequestTracer { +public final class OutgoingWebRequestTracerNoop extends NodeNoop implements OutgoingWebRequestTracer { public static final OutgoingWebRequestTracerNoop INSTANCE = new OutgoingWebRequestTracerNoop(); + private OutgoingWebRequestTracerNoop() { + } + @Override public String getDynatraceStringTag() { return NO_TAG_STRING; diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/RemoteCallClientTracerNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/RemoteCallClientTracerNoop.java index 1ab9b6c..5538ffd 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/RemoteCallClientTracerNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/RemoteCallClientTracerNoop.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,7 +17,7 @@ import com.dynatrace.oneagent.sdk.api.OutgoingRemoteCallTracer; -public class RemoteCallClientTracerNoop extends NodeNoop implements OutgoingRemoteCallTracer { +public final class RemoteCallClientTracerNoop extends NodeNoop implements OutgoingRemoteCallTracer { public static final OutgoingRemoteCallTracer INSTANCE = new RemoteCallClientTracerNoop(); diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/RemoteCallServerTracerNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/RemoteCallServerTracerNoop.java index 610d071..53cd4fc 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/RemoteCallServerTracerNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/RemoteCallServerTracerNoop.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,7 +17,7 @@ import com.dynatrace.oneagent.sdk.api.IncomingRemoteCallTracer; -public class RemoteCallServerTracerNoop extends NodeNoop implements IncomingRemoteCallTracer { +public final class RemoteCallServerTracerNoop extends NodeNoop implements IncomingRemoteCallTracer { public static final IncomingRemoteCallTracer INSTANCE = new RemoteCallServerTracerNoop(); diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/WebApplicationInfoNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/WebApplicationInfoNoop.java index 2a7f14b..0b42455 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/WebApplicationInfoNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/WebApplicationInfoNoop.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,8 +17,10 @@ import com.dynatrace.oneagent.sdk.api.infos.WebApplicationInfo; -public class WebApplicationInfoNoop implements WebApplicationInfo { +public final class WebApplicationInfoNoop implements WebApplicationInfo { public static final WebApplicationInfo INSTANCE = new WebApplicationInfoNoop(); + private WebApplicationInfoNoop() { + } } diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/CustomServiceTracerProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/CustomServiceTracerProxy.java new file mode 100644 index 0000000..e9763c5 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/CustomServiceTracerProxy.java @@ -0,0 +1,25 @@ +/* + * Copyright 2021 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.impl.proxy; + +import com.dynatrace.oneagent.sdk.api.CustomServiceTracer; + +final class CustomServiceTracerProxy extends TraceableProxy implements CustomServiceTracer { + + CustomServiceTracerProxy(SDK2AgentInternalApiProxy apiProxy, Object customServiceTracer) { + super(apiProxy, customServiceTracer); + } +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/DatabaseInfoImpl.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/DatabaseInfoImpl.java index 307e2d6..be00c7d 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/DatabaseInfoImpl.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/DatabaseInfoImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,7 +18,7 @@ import com.dynatrace.oneagent.sdk.api.enums.ChannelType; import com.dynatrace.oneagent.sdk.api.infos.DatabaseInfo; -public class DatabaseInfoImpl implements DatabaseInfo { +final class DatabaseInfoImpl implements DatabaseInfo { private final String name; private final String vendor; diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/DatabaseRequestTracerProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/DatabaseRequestTracerProxy.java index 19940bd..e1ec4cc 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/DatabaseRequestTracerProxy.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/DatabaseRequestTracerProxy.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,7 +17,7 @@ import com.dynatrace.oneagent.sdk.api.DatabaseRequestTracer; -public class DatabaseRequestTracerProxy extends TraceableProxy implements DatabaseRequestTracer { +final class DatabaseRequestTracerProxy extends TraceableProxy implements DatabaseRequestTracer { DatabaseRequestTracerProxy(SDK2AgentInternalApiProxy apiProxy, Object outgoingMessageTracer) { super(apiProxy, outgoingMessageTracer); diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/InProcessLinkImpl.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/InProcessLinkImpl.java index 300d464..cd668dd 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/InProcessLinkImpl.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/InProcessLinkImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,11 +17,11 @@ import com.dynatrace.oneagent.sdk.api.InProcessLink; -class InProcessLinkImpl implements InProcessLink { +final class InProcessLinkImpl implements InProcessLink { private final Object agentProvidedLink; - public InProcessLinkImpl(Object agentProvidedLink) { + InProcessLinkImpl(Object agentProvidedLink) { this.agentProvidedLink = agentProvidedLink; } diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/InProcessLinkTracerProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/InProcessLinkTracerProxy.java index b11266d..33e93dc 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/InProcessLinkTracerProxy.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/InProcessLinkTracerProxy.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,7 +17,7 @@ import com.dynatrace.oneagent.sdk.api.InProcessLinkTracer; -public class InProcessLinkTracerProxy extends TraceableProxy implements InProcessLinkTracer { +final class InProcessLinkTracerProxy extends TraceableProxy implements InProcessLinkTracer { InProcessLinkTracerProxy(SDK2AgentInternalApiProxy apiProxy, Object node) { super(apiProxy, node); diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/IncomingMessageProcessTracerProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/IncomingMessageProcessTracerProxy.java index 3c94c3b..be66dd1 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/IncomingMessageProcessTracerProxy.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/IncomingMessageProcessTracerProxy.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,9 +17,9 @@ import com.dynatrace.oneagent.sdk.api.IncomingMessageProcessTracer; -public class IncomingMessageProcessTracerProxy extends TraceableProxy implements IncomingMessageProcessTracer { +final class IncomingMessageProcessTracerProxy extends TraceableProxy implements IncomingMessageProcessTracer { - public IncomingMessageProcessTracerProxy(SDK2AgentInternalApiProxy apiProxy, Object agentObject) { + IncomingMessageProcessTracerProxy(SDK2AgentInternalApiProxy apiProxy, Object agentObject) { super(apiProxy, agentObject); } diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/IncomingMessageReceiveTracerProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/IncomingMessageReceiveTracerProxy.java index 8a4826e..dc800ec 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/IncomingMessageReceiveTracerProxy.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/IncomingMessageReceiveTracerProxy.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,9 +17,9 @@ import com.dynatrace.oneagent.sdk.api.IncomingMessageReceiveTracer; -public class IncomingMessageReceiveTracerProxy extends TraceableProxy implements IncomingMessageReceiveTracer { +final class IncomingMessageReceiveTracerProxy extends TraceableProxy implements IncomingMessageReceiveTracer { - public IncomingMessageReceiveTracerProxy(SDK2AgentInternalApiProxy apiProxy, Object agentObject) { + IncomingMessageReceiveTracerProxy(SDK2AgentInternalApiProxy apiProxy, Object agentObject) { super(apiProxy, agentObject); } diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/IncomingWebRequestProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/IncomingWebRequestProxy.java index bf3a1f1..b561279 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/IncomingWebRequestProxy.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/IncomingWebRequestProxy.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,9 +17,9 @@ import com.dynatrace.oneagent.sdk.api.IncomingWebRequestTracer; -public class IncomingWebRequestProxy extends TraceableProxy implements IncomingWebRequestTracer { +final class IncomingWebRequestProxy extends TraceableProxy implements IncomingWebRequestTracer { - public IncomingWebRequestProxy(SDK2AgentInternalApiProxy apiProxy, Object agentObject) { + IncomingWebRequestProxy(SDK2AgentInternalApiProxy apiProxy, Object agentObject) { super(apiProxy, agentObject); } diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/MessagingSystemInfoImpl.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/MessagingSystemInfoImpl.java index a0b5e50..17acab1 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/MessagingSystemInfoImpl.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/MessagingSystemInfoImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,7 +18,7 @@ import com.dynatrace.oneagent.sdk.api.enums.ChannelType; import com.dynatrace.oneagent.sdk.api.enums.MessageDestinationType; -public class MessagingSystemInfoImpl implements com.dynatrace.oneagent.sdk.api.infos.MessagingSystemInfo { +final class MessagingSystemInfoImpl implements com.dynatrace.oneagent.sdk.api.infos.MessagingSystemInfo { private final String vendorName; private final String destinationName; diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OneAgentSDKProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OneAgentSDKProxy.java index 24a0bee..561e6cb 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OneAgentSDKProxy.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OneAgentSDKProxy.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,6 +15,7 @@ */ package com.dynatrace.oneagent.sdk.impl.proxy; +import com.dynatrace.oneagent.sdk.api.CustomServiceTracer; import com.dynatrace.oneagent.sdk.api.DatabaseRequestTracer; import com.dynatrace.oneagent.sdk.api.InProcessLink; import com.dynatrace.oneagent.sdk.api.InProcessLinkTracer; @@ -34,6 +35,7 @@ import com.dynatrace.oneagent.sdk.api.infos.MessagingSystemInfo; import com.dynatrace.oneagent.sdk.api.infos.WebApplicationInfo; import com.dynatrace.oneagent.sdk.impl.OneAgentSDKFactoryImpl; +import com.dynatrace.oneagent.sdk.impl.noop.CustomServiceTracerNoop; import com.dynatrace.oneagent.sdk.impl.noop.DatabaseInfoNoop; import com.dynatrace.oneagent.sdk.impl.noop.DatabaseRequestTracerNoop; import com.dynatrace.oneagent.sdk.impl.noop.InProcessLinkNoop; @@ -49,7 +51,7 @@ import com.dynatrace.oneagent.sdk.impl.noop.WebApplicationInfoNoop; /** TODO: check if/how class could be generated */ -public class OneAgentSDKProxy implements OneAgentSDK { +public final class OneAgentSDKProxy implements OneAgentSDK { private final SDK2AgentInternalApiProxy apiProxy; private final Object agentSdkImpl; @@ -66,7 +68,7 @@ public IncomingRemoteCallTracer traceIncomingRemoteCall(String remoteMethod, Str serviceEndpoint); if (agentObject == null) { if (OneAgentSDKFactoryImpl.debugOneAgentSdkStub) { - OneAgentSDKFactoryImpl.logDebug("- OneAgent failed to provide provide object"); + OneAgentSDKFactoryImpl.logDebug("- OneAgent failed to provide object"); } return RemoteCallServerTracerNoop.INSTANCE; } @@ -84,7 +86,7 @@ public OutgoingRemoteCallTracer traceOutgoingRemoteCall(String remoteMethod, Str serverEndpoint, iChannelType, remoteHost); if (agentObject == null) { if (OneAgentSDKFactoryImpl.debugOneAgentSdkStub) { - OneAgentSDKFactoryImpl.logDebug("- OneAgent failed to provide provide object"); + OneAgentSDKFactoryImpl.logDebug("- OneAgent failed to provide object"); } return RemoteCallClientTracerNoop.INSTANCE; } @@ -101,7 +103,7 @@ public SDKState getCurrentState() { Boolean isCapturing = apiProxy.oneAgentSDK_isCapturing(agentSdkImpl); if (isCapturing == null) { if (OneAgentSDKFactoryImpl.debugOneAgentSdkStub) { - OneAgentSDKFactoryImpl.logDebug("- OneAgent failed to provide provide object"); + OneAgentSDKFactoryImpl.logDebug("- OneAgent failed to provide object"); } return SDKState.PERMANENTLY_INACTIVE; } @@ -139,7 +141,7 @@ public InProcessLinkTracer traceInProcessLink(InProcessLink inProcessLink) { Object agentObject = apiProxy.oneAgentSDK_traceInProcessLink(agentSdkImpl, (InProcessLinkImpl) inProcessLink); if (agentObject == null) { if (OneAgentSDKFactoryImpl.debugOneAgentSdkStub) { - OneAgentSDKFactoryImpl.logDebug("- OneAgent failed to provide provide InProcessLinkTracer"); + OneAgentSDKFactoryImpl.logDebug("- OneAgent failed to provide InProcessLinkTracer"); } return InProcessLinkTracerNoop.INSTANCE; } @@ -183,7 +185,7 @@ public IncomingWebRequestTracer traceIncomingWebRequest(WebApplicationInfo webAp (WebApplicationInfoImpl) webApplicationInfo, url, method); if (agentObject == null) { if (OneAgentSDKFactoryImpl.debugOneAgentSdkStub) { - OneAgentSDKFactoryImpl.logDebug("- OneAgent failed to provide provide object"); + OneAgentSDKFactoryImpl.logDebug("- OneAgent failed to provide object"); } return IncomingWebRequestTracerNoop.INSTANCE; } @@ -195,7 +197,7 @@ public OutgoingWebRequestTracer traceOutgoingWebRequest(String url, String metho Object agentObject = apiProxy.oneAgentSDK_traceOutgoingWebRequest(agentSdkImpl, url, method); if (agentObject == null) { if (OneAgentSDKFactoryImpl.debugOneAgentSdkStub) { - OneAgentSDKFactoryImpl.logDebug("- OneAgent failed to provide provide object"); + OneAgentSDKFactoryImpl.logDebug("- OneAgent failed to provide object"); } return OutgoingWebRequestTracerNoop.INSTANCE; } @@ -220,10 +222,11 @@ public OutgoingMessageTracer traceOutgoingMessage(MessagingSystemInfo messagingS return OutgoingMessageTracerNoop.INSTANCE; } - Object agentObject = apiProxy.oneAgentSDK_traceOutgoingMessage(agentSdkImpl, (MessagingSystemInfoImpl) messagingSystem); + Object agentObject = apiProxy.oneAgentSDK_traceOutgoingMessage(agentSdkImpl, + (MessagingSystemInfoImpl) messagingSystem); if (agentObject == null) { if (OneAgentSDKFactoryImpl.debugOneAgentSdkStub) { - OneAgentSDKFactoryImpl.logDebug("- OneAgent failed to provide provide object"); + OneAgentSDKFactoryImpl.logDebug("- OneAgent failed to provide object"); } return OutgoingMessageTracerNoop.INSTANCE; } @@ -241,10 +244,11 @@ public IncomingMessageReceiveTracer traceIncomingMessageReceive(MessagingSystemI } return IncomingMessageReceiveTracerNoop.INSTANCE; } - Object agentObject = apiProxy.oneAgentSDK_traceIncomingMessageReceive(agentSdkImpl, (MessagingSystemInfoImpl) messagingSystem); + Object agentObject = apiProxy.oneAgentSDK_traceIncomingMessageReceive(agentSdkImpl, + (MessagingSystemInfoImpl) messagingSystem); if (agentObject == null) { if (OneAgentSDKFactoryImpl.debugOneAgentSdkStub) { - OneAgentSDKFactoryImpl.logDebug("- OneAgent failed to provide provide object"); + OneAgentSDKFactoryImpl.logDebug("- OneAgent failed to provide object"); } return IncomingMessageReceiveTracerNoop.INSTANCE; } @@ -262,10 +266,11 @@ public IncomingMessageProcessTracer traceIncomingMessageProcess(MessagingSystemI } return IncomingMessageProcessTracerNoop.INSTANCE; } - Object agentObject = apiProxy.oneAgentSDK_traceIncomingMessageProcess(agentSdkImpl, (MessagingSystemInfoImpl) messagingSystem); + Object agentObject = apiProxy.oneAgentSDK_traceIncomingMessageProcess(agentSdkImpl, + (MessagingSystemInfoImpl) messagingSystem); if (agentObject == null) { if (OneAgentSDKFactoryImpl.debugOneAgentSdkStub) { - OneAgentSDKFactoryImpl.logDebug("- OneAgent failed to provide provide object"); + OneAgentSDKFactoryImpl.logDebug("- OneAgent failed to provide object"); } return IncomingMessageProcessTracerNoop.INSTANCE; } @@ -290,14 +295,26 @@ public DatabaseRequestTracer traceSqlDatabaseRequest(DatabaseInfo databaseInfo, return DatabaseRequestTracerNoop.INSTANCE; } - Object agentObject = apiProxy.oneAgentSDK_traceSQLDatabaseRequest(agentSdkImpl, (DatabaseInfoImpl) databaseInfo, statement); + Object agentObject = apiProxy.oneAgentSDK_traceSQLDatabaseRequest(agentSdkImpl, (DatabaseInfoImpl) databaseInfo, + statement); if (agentObject == null) { if (OneAgentSDKFactoryImpl.debugOneAgentSdkStub) { - OneAgentSDKFactoryImpl.logDebug("- OneAgent failed to provide provide object"); + OneAgentSDKFactoryImpl.logDebug("- OneAgent failed to provide object"); } return DatabaseRequestTracerNoop.INSTANCE; } return new DatabaseRequestTracerProxy(apiProxy, agentObject); } + @Override + public CustomServiceTracer traceCustomService(String serviceMethod, String serviceName) { + Object agentObject = apiProxy.oneAgentSDK_traceCustomService(agentSdkImpl, serviceMethod, serviceName); + if (agentObject == null) { + if (OneAgentSDKFactoryImpl.debugOneAgentSdkStub) { + OneAgentSDKFactoryImpl.logDebug("- OneAgent failed to provide object"); + } + return CustomServiceTracerNoop.INSTANCE; + } + return new CustomServiceTracerProxy(apiProxy, agentObject); + } } diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OutgoingMessageTracerProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OutgoingMessageTracerProxy.java index 838c59c..af24b9e 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OutgoingMessageTracerProxy.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OutgoingMessageTracerProxy.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,7 +17,7 @@ import com.dynatrace.oneagent.sdk.api.OutgoingMessageTracer; -public class OutgoingMessageTracerProxy extends TraceableProxy implements OutgoingMessageTracer { +final class OutgoingMessageTracerProxy extends TraceableProxy implements OutgoingMessageTracer { OutgoingMessageTracerProxy(SDK2AgentInternalApiProxy apiProxy, Object outgoingMessageTracer) { super(apiProxy, outgoingMessageTracer); diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OutgoingWebRequestTracerProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OutgoingWebRequestTracerProxy.java index 180fe72..bb5cb78 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OutgoingWebRequestTracerProxy.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OutgoingWebRequestTracerProxy.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,7 +17,7 @@ import com.dynatrace.oneagent.sdk.api.OutgoingWebRequestTracer; -public class OutgoingWebRequestTracerProxy extends TraceableProxy implements OutgoingWebRequestTracer { +public final class OutgoingWebRequestTracerProxy extends TraceableProxy implements OutgoingWebRequestTracer { OutgoingWebRequestTracerProxy(SDK2AgentInternalApiProxy apiProxy, Object oneAgentSDK_createOutgoingWebreqeustTracer) { diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/RemoteCallClientProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/RemoteCallClientProxy.java index 28bc7c6..5871edc 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/RemoteCallClientProxy.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/RemoteCallClientProxy.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,7 +17,7 @@ import com.dynatrace.oneagent.sdk.api.OutgoingRemoteCallTracer; -public class RemoteCallClientProxy extends TraceableProxy implements OutgoingRemoteCallTracer { +final class RemoteCallClientProxy extends TraceableProxy implements OutgoingRemoteCallTracer { RemoteCallClientProxy(SDK2AgentInternalApiProxy apiProxy, Object oneAgentSDK_createLocalOutgoingRemoteCall) { super(apiProxy, oneAgentSDK_createLocalOutgoingRemoteCall); diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/RemoteCallServerProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/RemoteCallServerProxy.java index e074bed..d8846ff 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/RemoteCallServerProxy.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/RemoteCallServerProxy.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,7 +17,7 @@ import com.dynatrace.oneagent.sdk.api.IncomingRemoteCallTracer; -public class RemoteCallServerProxy extends TraceableProxy implements IncomingRemoteCallTracer { +final class RemoteCallServerProxy extends TraceableProxy implements IncomingRemoteCallTracer { RemoteCallServerProxy(SDK2AgentInternalApiProxy apiProxy, Object remoteCallObject) { super(apiProxy, remoteCallObject); diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/SDK2AgentInternalApiProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/SDK2AgentInternalApiProxy.java index 18198d6..b13a8dd 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/SDK2AgentInternalApiProxy.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/SDK2AgentInternalApiProxy.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -26,7 +26,7 @@ * @author Alram.Lechner * */ -public class SDK2AgentInternalApiProxy { +public final class SDK2AgentInternalApiProxy { private Object agentImpl; private final Method oneAgentSDKFactory_createSdk; @@ -45,6 +45,7 @@ public class SDK2AgentInternalApiProxy { private final Method oneAgentSDK_traceIncomingMessageProcess; private final Method oneAgentSDK_traceOutgoingMessage; private final Method oneAgentSDK_traceSQLDatabaseRequest; + private final Method oneAgentSDK_traceCustomService; private final Method tracer_start; private final Method tracer_end; private final Method tracer_error_1; // string @@ -64,7 +65,6 @@ public class SDK2AgentInternalApiProxy { private final Method messageTracer_setCorrelationId; private final Method databaseRequestTracer_setRowsReturned; private final Method databaseRequestTracer_setRoundTripCount; - public SDK2AgentInternalApiProxy(Object agentImpl) throws NoSuchMethodException, SecurityException { this.agentImpl = agentImpl; @@ -97,6 +97,8 @@ public SDK2AgentInternalApiProxy(Object agentImpl) throws NoSuchMethodException, new Class[] { Object.class, String.class, String.class, String.class, Integer.TYPE, String.class }); oneAgentSDK_traceSQLDatabaseRequest = findMethod("oneAgentSDK_traceSQLDatabaseRequest", new Class[] { Object.class, String.class, String.class, Integer.TYPE, String.class, String.class }); + oneAgentSDK_traceCustomService = findMethod("oneAgentSDK_traceCustomService", + new Class[] { Object.class, String.class, String.class }); tracer_start = findMethod("tracer_start", new Class[] { Object.class }); tracer_end = findMethod("tracer_end", new Class[] { Object.class }); tracer_error_1 = findMethod("tracer_error", new Class[] { Object.class, String.class }); @@ -208,6 +210,10 @@ Object oneAgentSDK_traceSQLDatabaseRequest(Object agentSdkImpl, DatabaseInfoImpl databaseInfo.getChannelEndpoint(), sql); } + Object oneAgentSDK_traceCustomService(Object agentSdkImpl, String serviceMethod, String serviceName) { + return invoke(oneAgentSDK_traceCustomService, agentSdkImpl, serviceMethod, serviceName); + } + void oneAgentSDK_setLoggingCallback(Object sdk, Object loggingCallback) { invoke(oneAgentSDK_setLoggingCallback, sdk, loggingCallback); } @@ -303,5 +309,4 @@ void databaseRequestTracer_setRowsReturned(Object databaseRequestTracer, int row void databaseRequestTracer_setRoundTripCount(Object databaseRequestTracer, int roundTripCount) { invoke(databaseRequestTracer_setRoundTripCount, databaseRequestTracer, roundTripCount); } - } diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/TraceableProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/TraceableProxy.java index 6d98f23..8b3a7a7 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/TraceableProxy.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/TraceableProxy.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/WebApplicationInfoImpl.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/WebApplicationInfoImpl.java index acf876f..6a66067 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/WebApplicationInfoImpl.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/WebApplicationInfoImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,7 +17,7 @@ import com.dynatrace.oneagent.sdk.api.infos.WebApplicationInfo; -class WebApplicationInfoImpl implements WebApplicationInfo { +final class WebApplicationInfoImpl implements WebApplicationInfo { private final String webServerName; private final String applicationID; diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/package-info.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/package-info.java index e9b09db..cd690c3 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/package-info.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/package-info.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Dynatrace LLC + * Copyright 2021 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. From 7d0cfcba7520c74890ce09552d45135d5495e037 Mon Sep 17 00:00:00 2001 From: "wolfgang.ziegler" Date: Thu, 4 Feb 2021 13:32:48 +0100 Subject: [PATCH 27/36] Remove modifier from --- .../oneagent/sdk/impl/proxy/OutgoingWebRequestTracerProxy.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OutgoingWebRequestTracerProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OutgoingWebRequestTracerProxy.java index bb5cb78..22e2958 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OutgoingWebRequestTracerProxy.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OutgoingWebRequestTracerProxy.java @@ -17,7 +17,7 @@ import com.dynatrace.oneagent.sdk.api.OutgoingWebRequestTracer; -public final class OutgoingWebRequestTracerProxy extends TraceableProxy implements OutgoingWebRequestTracer { +final class OutgoingWebRequestTracerProxy extends TraceableProxy implements OutgoingWebRequestTracer { OutgoingWebRequestTracerProxy(SDK2AgentInternalApiProxy apiProxy, Object oneAgentSDK_createOutgoingWebreqeustTracer) { From 1fbae820a394b34702b6e1071923470f2b333e4c Mon Sep 17 00:00:00 2001 From: "wolfgang.ziegler" Date: Fri, 5 Feb 2021 09:48:26 +0100 Subject: [PATCH 28/36] Add a custome service sample --- samples/README.md | 15 +++- samples/custom-service/pom.xml | 84 +++++++++++++++++++ .../customservice/CustomServiceApp.java | 77 +++++++++++++++++ .../customservice/StdErrLoggingCallback.java | 37 ++++++++ 4 files changed, 212 insertions(+), 1 deletion(-) create mode 100644 samples/custom-service/pom.xml create mode 100644 samples/custom-service/src/main/java/com/dynatrace/oneagent/sdk/samples/customservice/CustomServiceApp.java create mode 100644 samples/custom-service/src/main/java/com/dynatrace/oneagent/sdk/samples/customservice/StdErrLoggingCallback.java diff --git a/samples/README.md b/samples/README.md index c6e99f4..029f30b 100644 --- a/samples/README.md +++ b/samples/README.md @@ -1,4 +1,4 @@ -# Sample applications for OneAgent SDK for Java +# Sample applications for OneAgent SDK for Java Sample applications showing how to use Dynatrace OneAgent SDK for Java to create custom specific PurePaths and service calls. @@ -18,6 +18,7 @@ Sample applications showing how to use Dynatrace OneAgent SDK for Java to create - run `mvn package` in root directory of the desired sample ### Run RemoteCall sample application + This Application shows how to trace remote calls and tag them. To run this sample you need to start a server and client sample application - both with Dynatrace OneAgent injected. - Server: `mvn -pl remotecall-server exec:exec` @@ -28,6 +29,7 @@ Check your Dynatrace environment for newly created service like that: ![remotecall-server](img/remotecall-service.png) ### Run InProcessLinking sample application + This Application shows how to in-process-linking and custom service attributes are being used. To run this sample you need to create a custom service for your tenant - and of course Dynatrace OneAgent must be installed. - ensure you have custom service for method `startAsyncOperation` in class `com.dynatrace.oneagent.sdk.samples.inprocesslinking.InProcessLinkingApp` @@ -37,18 +39,29 @@ Check your Dynatrace environment for newly created services like that: ![in-process-linking-service](img/in-process-linking-service.png) ### Run WebRequest sample application + This Application shows how to trace outgoing- and incoming webrequests. To run this sample you just go into the sample directory and run the sample by typing: - run sample: `mvn exec:exec` ### Run Messaging sample application + This Application shows how to trace outgoing, receiving and processing of incoming messages. To run this sample you just go into the sample directory and run the sample by typing: - run sample: `mvn exec:exec` ### Run DatabaseRequest sample application + This Application shows how to trace database requests. To run this sample you just go into the sample directory and run the sample by typing: - run sample: `mvn exec:exec` To run this sample you need to create a custom service for your tenant. See source of sample app for details. + +### Run custom service sample application + +This Application shows how to trace a custom service. +To run this sample, go into the sample directory and run the sample by typing: + +- run sample: `mvn exec:exec` + diff --git a/samples/custom-service/pom.xml b/samples/custom-service/pom.xml new file mode 100644 index 0000000..b4a2518 --- /dev/null +++ b/samples/custom-service/pom.xml @@ -0,0 +1,84 @@ + + 4.0.0 + + com.dynatrace.oneagent.sdk.samples.customservice + custom-service-sample + 1.8.0 + jar + + + + com.dynatrace.oneagent.sdk.java + oneagent-sdk + 1.8.0 + compile + + + + https://github.com/Dynatrace/OneAgent-SDK-Java + Dynatrace OneAgent SDK Java custom service sample + + Dynatrace + http://www.dynatrace.com + + + + 1.6 + 1.6 + UTF-8 + UTF-8 + + + + + + + + + org.apache.maven.plugins + maven-jar-plugin + 2.4 + + + + true + com.dynatrace.oneagent.sdk.samples.customservice.CustomServiceApp + + + + + + org.codehaus.mojo + exec-maven-plugin + 1.6.0 + + + + exec + + + + + java + + ${agent.agentpath} + -classpath + + com.dynatrace.oneagent.sdk.samples.customservice.CustomServiceApp + + + + + + + \ No newline at end of file diff --git a/samples/custom-service/src/main/java/com/dynatrace/oneagent/sdk/samples/customservice/CustomServiceApp.java b/samples/custom-service/src/main/java/com/dynatrace/oneagent/sdk/samples/customservice/CustomServiceApp.java new file mode 100644 index 0000000..1e194db --- /dev/null +++ b/samples/custom-service/src/main/java/com/dynatrace/oneagent/sdk/samples/customservice/CustomServiceApp.java @@ -0,0 +1,77 @@ +package com.dynatrace.oneagent.sdk.samples.customservice; + +import com.dynatrace.oneagent.sdk.OneAgentSDKFactory; +import com.dynatrace.oneagent.sdk.api.CustomServiceTracer; +import com.dynatrace.oneagent.sdk.api.OneAgentSDK; + +/** + * Sample application that shows how a custom service should be traced. + * + * @author wolfgang.ziegler@dynatrace.com + * + */ +public class CustomServiceApp { + + private final OneAgentSDK oneAgentSdk; + + static CustomServiceApp instance; + + private CustomServiceApp() { + oneAgentSdk = OneAgentSDKFactory.createInstance(); + oneAgentSdk.setLoggingCallback(new StdErrLoggingCallback()); + switch (oneAgentSdk.getCurrentState()) { + case ACTIVE: + System.out.println("SDK is active and capturing."); + break; + case PERMANENTLY_INACTIVE: + System.err.println( + "SDK is PERMANENTLY_INACTIVE; Probably no OneAgent injected or OneAgent is incompatible with SDK."); + break; + case TEMPORARILY_INACTIVE: + System.err.println( + "SDK is TEMPORARILY_INACTIVE; OneAgent has been deactivated - check OneAgent configuration."); + break; + default: + System.err.println("SDK is in unknown state."); + break; + } + instance = this; + } + + public static void main(String args[]) { + System.out.println("*************************************************************"); + System.out.println("** Running custom service request sample **"); + System.out.println("*************************************************************"); + try { + CustomServiceApp app = new CustomServiceApp(); + + app.traceCustomService(); + + System.out.println("sample application stopped. sleeping a while, so OneAgent is able to send data to server ..."); + Thread.sleep(15000 * 3); // we have to wait - so OneAgent is able to send data to server + } catch (Exception e) { + System.err.println("custom service request sample failed: " + e.getMessage()); + e.printStackTrace(); + System.exit(-1); + } + } + + private void traceCustomService() throws Exception { + String serviceMethod = "onTimer"; + String serviceName = "PeriodicCleanupTask"; + CustomServiceTracer tracer = oneAgentSdk.traceCustomService(serviceMethod, serviceName); + tracer.start(); + try { + doOtherThings(); + } catch (Exception e) { + tracer.error(e.getMessage()); + throw e; + } finally { + tracer.end(); + } + } + + private void doOtherThings() { + // ... + } +} diff --git a/samples/custom-service/src/main/java/com/dynatrace/oneagent/sdk/samples/customservice/StdErrLoggingCallback.java b/samples/custom-service/src/main/java/com/dynatrace/oneagent/sdk/samples/customservice/StdErrLoggingCallback.java new file mode 100644 index 0000000..58d5080 --- /dev/null +++ b/samples/custom-service/src/main/java/com/dynatrace/oneagent/sdk/samples/customservice/StdErrLoggingCallback.java @@ -0,0 +1,37 @@ +package com.dynatrace.oneagent.sdk.samples.customservice; + +/* + * Copyright 2021 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import com.dynatrace.oneagent.sdk.api.LoggingCallback; + +/** + * Implementation of OneAgent Logging Callback. Just printing output messages to + * std err. + */ +public class StdErrLoggingCallback implements LoggingCallback { + + @Override + public void error(String message) { + System.err.println("[OneAgent SDK ERROR]: " + message); + } + + @Override + public void warn(String message) { + System.err.println("[OneAgent SDK WARNING]: " + message); + } + +} From 354130fdfdcdec4c010f02237760735cf8ff2519 Mon Sep 17 00:00:00 2001 From: Wolfgang Ziegler Date: Mon, 8 Feb 2021 11:07:22 +0100 Subject: [PATCH 29/36] Update samples/custom-service/pom.xml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Christian Neumüller --- samples/custom-service/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/custom-service/pom.xml b/samples/custom-service/pom.xml index b4a2518..2963ce5 100644 --- a/samples/custom-service/pom.xml +++ b/samples/custom-service/pom.xml @@ -34,7 +34,7 @@ - + -All Classes (sdk 1.8.0 API) +All Classes (sdk 1.9.0 API) - + @@ -67,6 +67,8 @@
    SDKState
    +TraceContextInfo +
    Tracer
    WebApplicationInfo diff --git a/docs/allclasses-noframe.html b/docs/allclasses-noframe.html index b891c3c..bc940cb 100755 --- a/docs/allclasses-noframe.html +++ b/docs/allclasses-noframe.html @@ -2,12 +2,12 @@ - + -All Classes (sdk 1.8.0 API) +All Classes (sdk 1.9.0 API) - + @@ -67,6 +67,8 @@
    SDKState
    +TraceContextInfo +
    Tracer
    WebApplicationInfo diff --git a/docs/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.html b/docs/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.html index 946e003..2da09d8 100755 --- a/docs/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.html +++ b/docs/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.html @@ -2,12 +2,12 @@ - + -OneAgentSDKFactory (sdk 1.8.0 API) +OneAgentSDKFactory (sdk 1.9.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="OneAgentSDKFactory (sdk 1.8.0 API)"; + parent.document.title="OneAgentSDKFactory (sdk 1.9.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/CustomServiceTracer.html b/docs/com/dynatrace/oneagent/sdk/api/CustomServiceTracer.html index ba3d887..5b135af 100755 --- a/docs/com/dynatrace/oneagent/sdk/api/CustomServiceTracer.html +++ b/docs/com/dynatrace/oneagent/sdk/api/CustomServiceTracer.html @@ -2,12 +2,12 @@ - + -CustomServiceTracer (sdk 1.8.0 API) +CustomServiceTracer (sdk 1.9.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="CustomServiceTracer (sdk 1.8.0 API)"; + parent.document.title="CustomServiceTracer (sdk 1.9.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/DatabaseRequestTracer.html b/docs/com/dynatrace/oneagent/sdk/api/DatabaseRequestTracer.html index cfa1291..41a20c0 100755 --- a/docs/com/dynatrace/oneagent/sdk/api/DatabaseRequestTracer.html +++ b/docs/com/dynatrace/oneagent/sdk/api/DatabaseRequestTracer.html @@ -2,12 +2,12 @@ - + -DatabaseRequestTracer (sdk 1.8.0 API) +DatabaseRequestTracer (sdk 1.9.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="DatabaseRequestTracer (sdk 1.8.0 API)"; + parent.document.title="DatabaseRequestTracer (sdk 1.9.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/InProcessLink.html b/docs/com/dynatrace/oneagent/sdk/api/InProcessLink.html index ccbceac..d854bad 100755 --- a/docs/com/dynatrace/oneagent/sdk/api/InProcessLink.html +++ b/docs/com/dynatrace/oneagent/sdk/api/InProcessLink.html @@ -2,12 +2,12 @@ - + -InProcessLink (sdk 1.8.0 API) +InProcessLink (sdk 1.9.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="InProcessLink (sdk 1.8.0 API)"; + parent.document.title="InProcessLink (sdk 1.9.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.html b/docs/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.html index 56c6d34..de2f021 100755 --- a/docs/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.html +++ b/docs/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.html @@ -2,12 +2,12 @@ - + -InProcessLinkTracer (sdk 1.8.0 API) +InProcessLinkTracer (sdk 1.9.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="InProcessLinkTracer (sdk 1.8.0 API)"; + parent.document.title="InProcessLinkTracer (sdk 1.9.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/IncomingMessageProcessTracer.html b/docs/com/dynatrace/oneagent/sdk/api/IncomingMessageProcessTracer.html index 7916bd5..33f5b2d 100755 --- a/docs/com/dynatrace/oneagent/sdk/api/IncomingMessageProcessTracer.html +++ b/docs/com/dynatrace/oneagent/sdk/api/IncomingMessageProcessTracer.html @@ -2,12 +2,12 @@ - + -IncomingMessageProcessTracer (sdk 1.8.0 API) +IncomingMessageProcessTracer (sdk 1.9.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="IncomingMessageProcessTracer (sdk 1.8.0 API)"; + parent.document.title="IncomingMessageProcessTracer (sdk 1.9.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/IncomingMessageReceiveTracer.html b/docs/com/dynatrace/oneagent/sdk/api/IncomingMessageReceiveTracer.html index 9fcc9ea..52e827f 100755 --- a/docs/com/dynatrace/oneagent/sdk/api/IncomingMessageReceiveTracer.html +++ b/docs/com/dynatrace/oneagent/sdk/api/IncomingMessageReceiveTracer.html @@ -2,12 +2,12 @@ - + -IncomingMessageReceiveTracer (sdk 1.8.0 API) +IncomingMessageReceiveTracer (sdk 1.9.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="IncomingMessageReceiveTracer (sdk 1.8.0 API)"; + parent.document.title="IncomingMessageReceiveTracer (sdk 1.9.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.html b/docs/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.html index 2a42b65..8dc19e9 100755 --- a/docs/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.html +++ b/docs/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.html @@ -2,12 +2,12 @@ - + -IncomingRemoteCallTracer (sdk 1.8.0 API) +IncomingRemoteCallTracer (sdk 1.9.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="IncomingRemoteCallTracer (sdk 1.8.0 API)"; + parent.document.title="IncomingRemoteCallTracer (sdk 1.9.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/IncomingTaggable.html b/docs/com/dynatrace/oneagent/sdk/api/IncomingTaggable.html index 345660d..65e11ce 100755 --- a/docs/com/dynatrace/oneagent/sdk/api/IncomingTaggable.html +++ b/docs/com/dynatrace/oneagent/sdk/api/IncomingTaggable.html @@ -2,12 +2,12 @@ - + -IncomingTaggable (sdk 1.8.0 API) +IncomingTaggable (sdk 1.9.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="IncomingTaggable (sdk 1.8.0 API)"; + parent.document.title="IncomingTaggable (sdk 1.9.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/IncomingWebRequestTracer.html b/docs/com/dynatrace/oneagent/sdk/api/IncomingWebRequestTracer.html index cb238ad..6223420 100755 --- a/docs/com/dynatrace/oneagent/sdk/api/IncomingWebRequestTracer.html +++ b/docs/com/dynatrace/oneagent/sdk/api/IncomingWebRequestTracer.html @@ -2,12 +2,12 @@ - + -IncomingWebRequestTracer (sdk 1.8.0 API) +IncomingWebRequestTracer (sdk 1.9.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="IncomingWebRequestTracer (sdk 1.8.0 API)"; + parent.document.title="IncomingWebRequestTracer (sdk 1.9.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/LoggingCallback.html b/docs/com/dynatrace/oneagent/sdk/api/LoggingCallback.html index 569b8a0..e3c6ec7 100755 --- a/docs/com/dynatrace/oneagent/sdk/api/LoggingCallback.html +++ b/docs/com/dynatrace/oneagent/sdk/api/LoggingCallback.html @@ -2,12 +2,12 @@ - + -LoggingCallback (sdk 1.8.0 API) +LoggingCallback (sdk 1.9.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="LoggingCallback (sdk 1.8.0 API)"; + parent.document.title="LoggingCallback (sdk 1.9.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/OneAgentSDK.html b/docs/com/dynatrace/oneagent/sdk/api/OneAgentSDK.html index 938fa09..27887ec 100755 --- a/docs/com/dynatrace/oneagent/sdk/api/OneAgentSDK.html +++ b/docs/com/dynatrace/oneagent/sdk/api/OneAgentSDK.html @@ -2,12 +2,12 @@ - + -OneAgentSDK (sdk 1.8.0 API) +OneAgentSDK (sdk 1.9.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="OneAgentSDK (sdk 1.8.0 API)"; + parent.document.title="OneAgentSDK (sdk 1.9.0 API)"; } } @@ -227,6 +227,15 @@

    + TraceContextInfo +getTraceContextInfo() + +
    +          Returns the current W3C trace context for log enrichment + (not meant for tagging and context-propagation but for log-enrichment). + + +  void setLoggingCallback(LoggingCallback loggingCallback) @@ -730,6 +739,24 @@

  • +
    + +

    +getTraceContextInfo

    +
    +TraceContextInfo getTraceContextInfo()
    +
    +
    Returns the current W3C trace context for log enrichment + (not meant for tagging and context-propagation but for log-enrichment). + See TraceContextInfo for details. +

    +

    + +
    Returns:
    current trace context at the time of the call - never null (but may contain all-zero ID).
    Since:
    +
    1.9
    +
    +
    +

    diff --git a/docs/com/dynatrace/oneagent/sdk/api/OutgoingMessageTracer.html b/docs/com/dynatrace/oneagent/sdk/api/OutgoingMessageTracer.html index e6c6394..fe2b2ac 100755 --- a/docs/com/dynatrace/oneagent/sdk/api/OutgoingMessageTracer.html +++ b/docs/com/dynatrace/oneagent/sdk/api/OutgoingMessageTracer.html @@ -2,12 +2,12 @@ - + -OutgoingMessageTracer (sdk 1.8.0 API) +OutgoingMessageTracer (sdk 1.9.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="OutgoingMessageTracer (sdk 1.8.0 API)"; + parent.document.title="OutgoingMessageTracer (sdk 1.9.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.html b/docs/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.html index 65f18db..b7ffdd1 100755 --- a/docs/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.html +++ b/docs/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.html @@ -2,12 +2,12 @@ - + -OutgoingRemoteCallTracer (sdk 1.8.0 API) +OutgoingRemoteCallTracer (sdk 1.9.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="OutgoingRemoteCallTracer (sdk 1.8.0 API)"; + parent.document.title="OutgoingRemoteCallTracer (sdk 1.9.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.html b/docs/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.html index 0e35efd..9844b1f 100755 --- a/docs/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.html +++ b/docs/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.html @@ -2,12 +2,12 @@ - + -OutgoingTaggable (sdk 1.8.0 API) +OutgoingTaggable (sdk 1.9.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="OutgoingTaggable (sdk 1.8.0 API)"; + parent.document.title="OutgoingTaggable (sdk 1.9.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/OutgoingWebRequestTracer.html b/docs/com/dynatrace/oneagent/sdk/api/OutgoingWebRequestTracer.html index 43febfe..912b9d8 100755 --- a/docs/com/dynatrace/oneagent/sdk/api/OutgoingWebRequestTracer.html +++ b/docs/com/dynatrace/oneagent/sdk/api/OutgoingWebRequestTracer.html @@ -2,12 +2,12 @@ - + -OutgoingWebRequestTracer (sdk 1.8.0 API) +OutgoingWebRequestTracer (sdk 1.9.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="OutgoingWebRequestTracer (sdk 1.8.0 API)"; + parent.document.title="OutgoingWebRequestTracer (sdk 1.9.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/Tracer.html b/docs/com/dynatrace/oneagent/sdk/api/Tracer.html index 341a2b4..4879c6e 100755 --- a/docs/com/dynatrace/oneagent/sdk/api/Tracer.html +++ b/docs/com/dynatrace/oneagent/sdk/api/Tracer.html @@ -2,12 +2,12 @@ - + -Tracer (sdk 1.8.0 API) +Tracer (sdk 1.9.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Tracer (sdk 1.8.0 API)"; + parent.document.title="Tracer (sdk 1.9.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/enums/ChannelType.html b/docs/com/dynatrace/oneagent/sdk/api/enums/ChannelType.html index 9da623f..44b8321 100755 --- a/docs/com/dynatrace/oneagent/sdk/api/enums/ChannelType.html +++ b/docs/com/dynatrace/oneagent/sdk/api/enums/ChannelType.html @@ -2,12 +2,12 @@ - + -ChannelType (sdk 1.8.0 API) +ChannelType (sdk 1.9.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="ChannelType (sdk 1.8.0 API)"; + parent.document.title="ChannelType (sdk 1.9.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/enums/DatabaseVendor.html b/docs/com/dynatrace/oneagent/sdk/api/enums/DatabaseVendor.html index be49ea3..b9d6318 100755 --- a/docs/com/dynatrace/oneagent/sdk/api/enums/DatabaseVendor.html +++ b/docs/com/dynatrace/oneagent/sdk/api/enums/DatabaseVendor.html @@ -2,12 +2,12 @@ - + -DatabaseVendor (sdk 1.8.0 API) +DatabaseVendor (sdk 1.9.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="DatabaseVendor (sdk 1.8.0 API)"; + parent.document.title="DatabaseVendor (sdk 1.9.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/enums/MessageDestinationType.html b/docs/com/dynatrace/oneagent/sdk/api/enums/MessageDestinationType.html index 24a87d9..cf4b5d4 100755 --- a/docs/com/dynatrace/oneagent/sdk/api/enums/MessageDestinationType.html +++ b/docs/com/dynatrace/oneagent/sdk/api/enums/MessageDestinationType.html @@ -2,12 +2,12 @@ - + -MessageDestinationType (sdk 1.8.0 API) +MessageDestinationType (sdk 1.9.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="MessageDestinationType (sdk 1.8.0 API)"; + parent.document.title="MessageDestinationType (sdk 1.9.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/enums/MessageSystemVendor.html b/docs/com/dynatrace/oneagent/sdk/api/enums/MessageSystemVendor.html index 8be78b4..98fa96a 100755 --- a/docs/com/dynatrace/oneagent/sdk/api/enums/MessageSystemVendor.html +++ b/docs/com/dynatrace/oneagent/sdk/api/enums/MessageSystemVendor.html @@ -2,12 +2,12 @@ - + -MessageSystemVendor (sdk 1.8.0 API) +MessageSystemVendor (sdk 1.9.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="MessageSystemVendor (sdk 1.8.0 API)"; + parent.document.title="MessageSystemVendor (sdk 1.9.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/enums/SDKState.html b/docs/com/dynatrace/oneagent/sdk/api/enums/SDKState.html index b68c385..34b6376 100755 --- a/docs/com/dynatrace/oneagent/sdk/api/enums/SDKState.html +++ b/docs/com/dynatrace/oneagent/sdk/api/enums/SDKState.html @@ -2,12 +2,12 @@ - + -SDKState (sdk 1.8.0 API) +SDKState (sdk 1.9.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="SDKState (sdk 1.8.0 API)"; + parent.document.title="SDKState (sdk 1.9.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/enums/package-frame.html b/docs/com/dynatrace/oneagent/sdk/api/enums/package-frame.html index 9366969..2ccf664 100755 --- a/docs/com/dynatrace/oneagent/sdk/api/enums/package-frame.html +++ b/docs/com/dynatrace/oneagent/sdk/api/enums/package-frame.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api.enums (sdk 1.8.0 API) +com.dynatrace.oneagent.sdk.api.enums (sdk 1.9.0 API) - + diff --git a/docs/com/dynatrace/oneagent/sdk/api/enums/package-summary.html b/docs/com/dynatrace/oneagent/sdk/api/enums/package-summary.html index 7d7faa0..194e4ba 100755 --- a/docs/com/dynatrace/oneagent/sdk/api/enums/package-summary.html +++ b/docs/com/dynatrace/oneagent/sdk/api/enums/package-summary.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api.enums (sdk 1.8.0 API) +com.dynatrace.oneagent.sdk.api.enums (sdk 1.9.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.dynatrace.oneagent.sdk.api.enums (sdk 1.8.0 API)"; + parent.document.title="com.dynatrace.oneagent.sdk.api.enums (sdk 1.9.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/enums/package-tree.html b/docs/com/dynatrace/oneagent/sdk/api/enums/package-tree.html index b09f267..cd92fbc 100755 --- a/docs/com/dynatrace/oneagent/sdk/api/enums/package-tree.html +++ b/docs/com/dynatrace/oneagent/sdk/api/enums/package-tree.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api.enums Class Hierarchy (sdk 1.8.0 API) +com.dynatrace.oneagent.sdk.api.enums Class Hierarchy (sdk 1.9.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.dynatrace.oneagent.sdk.api.enums Class Hierarchy (sdk 1.8.0 API)"; + parent.document.title="com.dynatrace.oneagent.sdk.api.enums Class Hierarchy (sdk 1.9.0 API)"; } } @@ -93,7 +93,7 @@

  • java.lang.Object
    diff --git a/docs/com/dynatrace/oneagent/sdk/api/infos/DatabaseInfo.html b/docs/com/dynatrace/oneagent/sdk/api/infos/DatabaseInfo.html index d6fb1f8..5c10c54 100755 --- a/docs/com/dynatrace/oneagent/sdk/api/infos/DatabaseInfo.html +++ b/docs/com/dynatrace/oneagent/sdk/api/infos/DatabaseInfo.html @@ -2,12 +2,12 @@ - + -DatabaseInfo (sdk 1.8.0 API) +DatabaseInfo (sdk 1.9.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="DatabaseInfo (sdk 1.8.0 API)"; + parent.document.title="DatabaseInfo (sdk 1.9.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/infos/MessagingSystemInfo.html b/docs/com/dynatrace/oneagent/sdk/api/infos/MessagingSystemInfo.html index 71b1a78..813c5e0 100755 --- a/docs/com/dynatrace/oneagent/sdk/api/infos/MessagingSystemInfo.html +++ b/docs/com/dynatrace/oneagent/sdk/api/infos/MessagingSystemInfo.html @@ -2,12 +2,12 @@ - + -MessagingSystemInfo (sdk 1.8.0 API) +MessagingSystemInfo (sdk 1.9.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="MessagingSystemInfo (sdk 1.8.0 API)"; + parent.document.title="MessagingSystemInfo (sdk 1.9.0 API)"; } } @@ -55,7 +55,7 @@  PREV CLASS  - NEXT CLASSNEXT CLASS
    FRAMES    NO FRAMES   @@ -140,7 +140,7 @@

     PREV CLASS  - NEXT CLASSNEXT CLASS FRAMES    NO FRAMES   diff --git a/docs/com/dynatrace/oneagent/sdk/api/infos/TraceContextInfo.html b/docs/com/dynatrace/oneagent/sdk/api/infos/TraceContextInfo.html new file mode 100644 index 0000000..8abd244 --- /dev/null +++ b/docs/com/dynatrace/oneagent/sdk/api/infos/TraceContextInfo.html @@ -0,0 +1,327 @@ + + + + + + +TraceContextInfo (sdk 1.9.0 API) + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +

    + +com.dynatrace.oneagent.sdk.api.infos +
    +Interface TraceContextInfo

    +
    +
    +
    public interface TraceContextInfo
    + + +

    +Provides information about a PurePath node using the TraceContext (Trace-Id, Span-Id) model as defined in + + + + + + + + + + + + + +
    +Field Summary
    +static java.lang.StringINVALID_SPAN_ID + +
    +          All-zero (invalid) W3C span ID.
    +static java.lang.StringINVALID_TRACE_ID + +
    +          All-zero (invalid) W3C trace ID.
    +  + + + + + + + + + + + + + + + + + + + +
    +Method Summary
    + java.lang.StringgetSpanId() + +
    +          The W3C span ID hex string (never empty or null, but might be all-zero if isValid()) is false)
    + java.lang.StringgetTraceId() + +
    +          The W3C trace ID hex string (never empty or null, but might be all-zero if isValid()) is false)
    + booleanisValid() + +
    +          If true, the trace & span ID are both valid (i.e., non-zero).
    +  +

    + + + + + + + + +
    +Field Detail
    + +

    +INVALID_TRACE_ID

    +
    +static final java.lang.String INVALID_TRACE_ID
    +
    +
    All-zero (invalid) W3C trace ID. +

    +

    +
    See Also:
    Constant Field Values
    +
    +
    + +

    +INVALID_SPAN_ID

    +
    +static final java.lang.String INVALID_SPAN_ID
    +
    +
    All-zero (invalid) W3C span ID. +

    +

    +
    See Also:
    Constant Field Values
    +
    + + + + + + + + +
    +Method Detail
    + +

    +isValid

    +
    +boolean isValid()
    +
    +
    If true, the trace & span ID are both valid (i.e., non-zero). + +

    These are a few common reasons for why you may be unable to get a valid trace context:

    +

    +

    +

    +
    +
    +
    +
    + +

    +getTraceId

    +
    +java.lang.String getTraceId()
    +
    +
    The W3C trace ID hex string (never empty or null, but might be all-zero if isValid()) is false) +

    +

    +
    +
    +
    +
    + +

    +getSpanId

    +
    +java.lang.String getSpanId()
    +
    +
    The W3C span ID hex string (never empty or null, but might be all-zero if isValid()) is false) +

    +

    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + + + diff --git a/docs/com/dynatrace/oneagent/sdk/api/infos/WebApplicationInfo.html b/docs/com/dynatrace/oneagent/sdk/api/infos/WebApplicationInfo.html index 11d415c..d54241e 100755 --- a/docs/com/dynatrace/oneagent/sdk/api/infos/WebApplicationInfo.html +++ b/docs/com/dynatrace/oneagent/sdk/api/infos/WebApplicationInfo.html @@ -2,12 +2,12 @@ - + -WebApplicationInfo (sdk 1.8.0 API) +WebApplicationInfo (sdk 1.9.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="WebApplicationInfo (sdk 1.8.0 API)"; + parent.document.title="WebApplicationInfo (sdk 1.9.0 API)"; } } @@ -54,7 +54,7 @@ PREV CLASS  + PREV CLASS   NEXT CLASS FRAMES   @@ -140,7 +140,7 @@

    PREV CLASS  + PREV CLASS   NEXT CLASS FRAMES   diff --git a/docs/com/dynatrace/oneagent/sdk/api/infos/package-frame.html b/docs/com/dynatrace/oneagent/sdk/api/infos/package-frame.html index 12c72b3..263f386 100755 --- a/docs/com/dynatrace/oneagent/sdk/api/infos/package-frame.html +++ b/docs/com/dynatrace/oneagent/sdk/api/infos/package-frame.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api.infos (sdk 1.8.0 API) +com.dynatrace.oneagent.sdk.api.infos (sdk 1.9.0 API) - + @@ -27,6 +27,8 @@
    MessagingSystemInfo
    +TraceContextInfo +
    WebApplicationInfo
    diff --git a/docs/com/dynatrace/oneagent/sdk/api/infos/package-summary.html b/docs/com/dynatrace/oneagent/sdk/api/infos/package-summary.html index 2a8126d..eb3c133 100755 --- a/docs/com/dynatrace/oneagent/sdk/api/infos/package-summary.html +++ b/docs/com/dynatrace/oneagent/sdk/api/infos/package-summary.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api.infos (sdk 1.8.0 API) +com.dynatrace.oneagent.sdk.api.infos (sdk 1.9.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.dynatrace.oneagent.sdk.api.infos (sdk 1.8.0 API)"; + parent.document.title="com.dynatrace.oneagent.sdk.api.infos (sdk 1.9.0 API)"; } } @@ -96,6 +96,11 @@

    Type returned by OneAgentSDK.createMessagingSystemInfo(String, String, com.dynatrace.oneagent.sdk.api.enums.MessageDestinationType, com.dynatrace.oneagent.sdk.api.enums.ChannelType, String) +TraceContextInfo +Provides information about a PurePath node using the TraceContext (Trace-Id, Span-Id) model as defined in + WebApplicationInfo Type returned by OneAgentSDK.createWebApplicationInfo(String, String, String) diff --git a/docs/com/dynatrace/oneagent/sdk/api/infos/package-tree.html b/docs/com/dynatrace/oneagent/sdk/api/infos/package-tree.html index d966a17..0040413 100755 --- a/docs/com/dynatrace/oneagent/sdk/api/infos/package-tree.html +++ b/docs/com/dynatrace/oneagent/sdk/api/infos/package-tree.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api.infos Class Hierarchy (sdk 1.8.0 API) +com.dynatrace.oneagent.sdk.api.infos Class Hierarchy (sdk 1.9.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.dynatrace.oneagent.sdk.api.infos Class Hierarchy (sdk 1.8.0 API)"; + parent.document.title="com.dynatrace.oneagent.sdk.api.infos Class Hierarchy (sdk 1.9.0 API)"; } } @@ -90,7 +90,7 @@

    Interface Hierarchy

    +
  • com.dynatrace.oneagent.sdk.api.infos.DatabaseInfo
  • com.dynatrace.oneagent.sdk.api.infos.MessagingSystemInfo
  • com.dynatrace.oneagent.sdk.api.infos.TraceContextInfo
  • com.dynatrace.oneagent.sdk.api.infos.WebApplicationInfo
    diff --git a/docs/com/dynatrace/oneagent/sdk/api/metric/FloatCounter.html b/docs/com/dynatrace/oneagent/sdk/api/metric/FloatCounter.html deleted file mode 100755 index 6c692ad..0000000 --- a/docs/com/dynatrace/oneagent/sdk/api/metric/FloatCounter.html +++ /dev/null @@ -1,225 +0,0 @@ - - - - - - -FloatCounter (sdk 1.8.0 API) - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - -

    - -com.dynatrace.oneagent.sdk.api.metric -
    -Interface FloatCounter

    -
    -
    All Superinterfaces:
    Metric
    -
    -
    -
    -
    public interface FloatCounter
    extends Metric
    - - -

    -


    - -

    - - - - - - - - - - - - -
    -Method Summary
    - voidincreaseBy(double by, - java.lang.String dimension) - -
    -          Increase the counter by the provided value
    - - - - - - - -
    Methods inherited from interface com.dynatrace.oneagent.sdk.api.metric.Metric
    release
    -  -

    - - - - - - - - -
    -Method Detail
    - -

    -increaseBy

    -
    -void increaseBy(double by,
    -                java.lang.String dimension)
    -
    -
    Increase the counter by the provided value -

    -

    -
    -
    -
    -
    Parameters:
    by - value
    dimension - optional dimension. e. g. name of the concerned resource (disk - name, page name, ...). Parameter is optional - set to null if no - dimension should be reported.
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/docs/com/dynatrace/oneagent/sdk/api/metric/FloatGauge.html b/docs/com/dynatrace/oneagent/sdk/api/metric/FloatGauge.html deleted file mode 100755 index 730d65b..0000000 --- a/docs/com/dynatrace/oneagent/sdk/api/metric/FloatGauge.html +++ /dev/null @@ -1,225 +0,0 @@ - - - - - - -FloatGauge (sdk 1.8.0 API) - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - -

    - -com.dynatrace.oneagent.sdk.api.metric -
    -Interface FloatGauge

    -
    -
    All Superinterfaces:
    Metric
    -
    -
    -
    -
    public interface FloatGauge
    extends Metric
    - - -

    -


    - -

    - - - - - - - - - - - - -
    -Method Summary
    - voidsetValue(double currentValue, - java.lang.String dimension) - -
    -          Sets the current value
    - - - - - - - -
    Methods inherited from interface com.dynatrace.oneagent.sdk.api.metric.Metric
    release
    -  -

    - - - - - - - - -
    -Method Detail
    - -

    -setValue

    -
    -void setValue(double currentValue,
    -              java.lang.String dimension)
    -
    -
    Sets the current value -

    -

    -
    -
    -
    -
    Parameters:
    currentValue - the current value
    dimension - optional dimension. e. g. name of the concerned resource (disk - name, page name, ...). Parameter is optional - set to null if - no dimension should be reported.
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/docs/com/dynatrace/oneagent/sdk/api/metric/FloatStatistics.html b/docs/com/dynatrace/oneagent/sdk/api/metric/FloatStatistics.html deleted file mode 100755 index 2a12764..0000000 --- a/docs/com/dynatrace/oneagent/sdk/api/metric/FloatStatistics.html +++ /dev/null @@ -1,225 +0,0 @@ - - - - - - -FloatStatistics (sdk 1.8.0 API) - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - -

    - -com.dynatrace.oneagent.sdk.api.metric -
    -Interface FloatStatistics

    -
    -
    All Superinterfaces:
    Metric
    -
    -
    -
    -
    public interface FloatStatistics
    extends Metric
    - - -

    -


    - -

    - - - - - - - - - - - - -
    -Method Summary
    - voidaddValue(double value, - java.lang.String dimension) - -
    -          Adds a new value to this statistics metric.
    - - - - - - - -
    Methods inherited from interface com.dynatrace.oneagent.sdk.api.metric.Metric
    release
    -  -

    - - - - - - - - -
    -Method Detail
    - -

    -addValue

    -
    -void addValue(double value,
    -              java.lang.String dimension)
    -
    -
    Adds a new value to this statistics metric. -

    -

    -
    -
    -
    -
    Parameters:
    value - the sample to be added
    dimension - optional dimension. e. g. name of the concerned resource (disk - name, page name, ...). Parameter is optional - set to null if - no dimension should be reported.
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/docs/com/dynatrace/oneagent/sdk/api/metric/IntegerCounter.html b/docs/com/dynatrace/oneagent/sdk/api/metric/IntegerCounter.html deleted file mode 100755 index aa3b45d..0000000 --- a/docs/com/dynatrace/oneagent/sdk/api/metric/IntegerCounter.html +++ /dev/null @@ -1,225 +0,0 @@ - - - - - - -IntegerCounter (sdk 1.8.0 API) - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - -

    - -com.dynatrace.oneagent.sdk.api.metric -
    -Interface IntegerCounter

    -
    -
    All Superinterfaces:
    Metric
    -
    -
    -
    -
    public interface IntegerCounter
    extends Metric
    - - -

    -


    - -

    - - - - - - - - - - - - -
    -Method Summary
    - voidincreaseBy(long by, - java.lang.String dimension) - -
    -          Increase the counter by the provided value
    - - - - - - - -
    Methods inherited from interface com.dynatrace.oneagent.sdk.api.metric.Metric
    release
    -  -

    - - - - - - - - -
    -Method Detail
    - -

    -increaseBy

    -
    -void increaseBy(long by,
    -                java.lang.String dimension)
    -
    -
    Increase the counter by the provided value -

    -

    -
    -
    -
    -
    Parameters:
    by - value
    dimension - optional dimension. e. g. name of the concerned resource (disk - name, page name, ...). Parameter is optional - set to null if no - dimension should be reported.
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/docs/com/dynatrace/oneagent/sdk/api/metric/IntegerGauge.html b/docs/com/dynatrace/oneagent/sdk/api/metric/IntegerGauge.html deleted file mode 100755 index e2a9e9b..0000000 --- a/docs/com/dynatrace/oneagent/sdk/api/metric/IntegerGauge.html +++ /dev/null @@ -1,225 +0,0 @@ - - - - - - -IntegerGauge (sdk 1.8.0 API) - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - -

    - -com.dynatrace.oneagent.sdk.api.metric -
    -Interface IntegerGauge

    -
    -
    All Superinterfaces:
    Metric
    -
    -
    -
    -
    public interface IntegerGauge
    extends Metric
    - - -

    -


    - -

    - - - - - - - - - - - - -
    -Method Summary
    - voidsetValue(long currentValue, - java.lang.String dimension) - -
    -          Sets the current value
    - - - - - - - -
    Methods inherited from interface com.dynatrace.oneagent.sdk.api.metric.Metric
    release
    -  -

    - - - - - - - - -
    -Method Detail
    - -

    -setValue

    -
    -void setValue(long currentValue,
    -              java.lang.String dimension)
    -
    -
    Sets the current value -

    -

    -
    -
    -
    -
    Parameters:
    currentValue - the current value
    dimension - optional dimension. e. g. name of the concerned resource (disk - name, page name, ...). Parameter is optional - set to null if - no dimension should be reported.
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/docs/com/dynatrace/oneagent/sdk/api/metric/IntegerStatistics.html b/docs/com/dynatrace/oneagent/sdk/api/metric/IntegerStatistics.html deleted file mode 100755 index d20cf92..0000000 --- a/docs/com/dynatrace/oneagent/sdk/api/metric/IntegerStatistics.html +++ /dev/null @@ -1,225 +0,0 @@ - - - - - - -IntegerStatistics (sdk 1.8.0 API) - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - -

    - -com.dynatrace.oneagent.sdk.api.metric -
    -Interface IntegerStatistics

    -
    -
    All Superinterfaces:
    Metric
    -
    -
    -
    -
    public interface IntegerStatistics
    extends Metric
    - - -

    -


    - -

    - - - - - - - - - - - - -
    -Method Summary
    - voidaddValue(long value, - java.lang.String dimension) - -
    -          Adds a new value to this statistics metric.
    - - - - - - - -
    Methods inherited from interface com.dynatrace.oneagent.sdk.api.metric.Metric
    release
    -  -

    - - - - - - - - -
    -Method Detail
    - -

    -addValue

    -
    -void addValue(long value,
    -              java.lang.String dimension)
    -
    -
    Adds a new value to this statistics metric. -

    -

    -
    -
    -
    -
    Parameters:
    value - the value to be added
    dimension - optional dimension. e. g. name of the concerned resource (disk - name, page name, ...). Parameter is optional - set to null if - no dimension should be reported.
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/docs/com/dynatrace/oneagent/sdk/api/metric/Metric.html b/docs/com/dynatrace/oneagent/sdk/api/metric/Metric.html deleted file mode 100755 index 654777f..0000000 --- a/docs/com/dynatrace/oneagent/sdk/api/metric/Metric.html +++ /dev/null @@ -1,210 +0,0 @@ - - - - - - -Metric (sdk 1.8.0 API) - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - -

    - -com.dynatrace.oneagent.sdk.api.metric -
    -Interface Metric

    -
    -
    All Known Subinterfaces:
    FloatCounter, FloatGauge, FloatStatistics, IntegerCounter, IntegerGauge, IntegerStatistics
    -
    -
    -
    -
    public interface Metric
    - - -

    -


    - -

    - - - - - - - - - - - - -
    -Method Summary
    - voidrelease() - -
    -          closes this metric reporter instance and releases resources therefore.
    -  -

    - - - - - - - - -
    -Method Detail
    - -

    -release

    -
    -void release()
    -
    -
    closes this metric reporter instance and releases resources therefore. - reporting on an instance is forbidden after this method has been called. -

    -

    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/docs/com/dynatrace/oneagent/sdk/api/metric/package-frame.html b/docs/com/dynatrace/oneagent/sdk/api/metric/package-frame.html deleted file mode 100755 index eef0214..0000000 --- a/docs/com/dynatrace/oneagent/sdk/api/metric/package-frame.html +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - -com.dynatrace.oneagent.sdk.api.metric (sdk 1.8.0 API) - - - - - - - - - - - -com.dynatrace.oneagent.sdk.api.metric - - - - -
    -Interfaces  - -
    -FloatCounter -
    -FloatGauge -
    -FloatStatistics -
    -IntegerCounter -
    -IntegerGauge -
    -IntegerStatistics -
    -Metric
    - - - - diff --git a/docs/com/dynatrace/oneagent/sdk/api/metric/package-summary.html b/docs/com/dynatrace/oneagent/sdk/api/metric/package-summary.html deleted file mode 100755 index d8135ef..0000000 --- a/docs/com/dynatrace/oneagent/sdk/api/metric/package-summary.html +++ /dev/null @@ -1,179 +0,0 @@ - - - - - - -com.dynatrace.oneagent.sdk.api.metric (sdk 1.8.0 API) - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -
    -

    -Package com.dynatrace.oneagent.sdk.api.metric -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -Interface Summary
    FloatCounter 
    FloatGauge 
    FloatStatistics 
    IntegerCounter 
    IntegerGauge 
    IntegerStatistics 
    Metric 
    -  - -

    -

    -
    -
    - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/docs/com/dynatrace/oneagent/sdk/api/metric/package-tree.html b/docs/com/dynatrace/oneagent/sdk/api/metric/package-tree.html deleted file mode 100755 index 51ae45d..0000000 --- a/docs/com/dynatrace/oneagent/sdk/api/metric/package-tree.html +++ /dev/null @@ -1,151 +0,0 @@ - - - - - - -com.dynatrace.oneagent.sdk.api.metric Class Hierarchy (sdk 1.8.0 API) - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -
    -
    -

    -Hierarchy For Package com.dynatrace.oneagent.sdk.api.metric -

    -
    -
    -
    Package Hierarchies:
    All Packages
    -
    -

    -Interface Hierarchy -

    - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/docs/com/dynatrace/oneagent/sdk/api/package-frame.html b/docs/com/dynatrace/oneagent/sdk/api/package-frame.html index dc8780c..29abaa3 100755 --- a/docs/com/dynatrace/oneagent/sdk/api/package-frame.html +++ b/docs/com/dynatrace/oneagent/sdk/api/package-frame.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api (sdk 1.8.0 API) +com.dynatrace.oneagent.sdk.api (sdk 1.9.0 API) - + diff --git a/docs/com/dynatrace/oneagent/sdk/api/package-summary.html b/docs/com/dynatrace/oneagent/sdk/api/package-summary.html index 756d323..b5be375 100755 --- a/docs/com/dynatrace/oneagent/sdk/api/package-summary.html +++ b/docs/com/dynatrace/oneagent/sdk/api/package-summary.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api (sdk 1.8.0 API) +com.dynatrace.oneagent.sdk.api (sdk 1.9.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.dynatrace.oneagent.sdk.api (sdk 1.8.0 API)"; + parent.document.title="com.dynatrace.oneagent.sdk.api (sdk 1.9.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/api/package-tree.html b/docs/com/dynatrace/oneagent/sdk/api/package-tree.html index 1f2cfdd..159a1ce 100755 --- a/docs/com/dynatrace/oneagent/sdk/api/package-tree.html +++ b/docs/com/dynatrace/oneagent/sdk/api/package-tree.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk.api Class Hierarchy (sdk 1.8.0 API) +com.dynatrace.oneagent.sdk.api Class Hierarchy (sdk 1.9.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.dynatrace.oneagent.sdk.api Class Hierarchy (sdk 1.8.0 API)"; + parent.document.title="com.dynatrace.oneagent.sdk.api Class Hierarchy (sdk 1.9.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/package-frame.html b/docs/com/dynatrace/oneagent/sdk/package-frame.html index f036acf..0850ac5 100755 --- a/docs/com/dynatrace/oneagent/sdk/package-frame.html +++ b/docs/com/dynatrace/oneagent/sdk/package-frame.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk (sdk 1.8.0 API) +com.dynatrace.oneagent.sdk (sdk 1.9.0 API) - + diff --git a/docs/com/dynatrace/oneagent/sdk/package-summary.html b/docs/com/dynatrace/oneagent/sdk/package-summary.html index 0812527..bcaa16c 100755 --- a/docs/com/dynatrace/oneagent/sdk/package-summary.html +++ b/docs/com/dynatrace/oneagent/sdk/package-summary.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk (sdk 1.8.0 API) +com.dynatrace.oneagent.sdk (sdk 1.9.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.dynatrace.oneagent.sdk (sdk 1.8.0 API)"; + parent.document.title="com.dynatrace.oneagent.sdk (sdk 1.9.0 API)"; } } diff --git a/docs/com/dynatrace/oneagent/sdk/package-tree.html b/docs/com/dynatrace/oneagent/sdk/package-tree.html index 69f3211..ca75b99 100755 --- a/docs/com/dynatrace/oneagent/sdk/package-tree.html +++ b/docs/com/dynatrace/oneagent/sdk/package-tree.html @@ -2,12 +2,12 @@ - + -com.dynatrace.oneagent.sdk Class Hierarchy (sdk 1.8.0 API) +com.dynatrace.oneagent.sdk Class Hierarchy (sdk 1.9.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.dynatrace.oneagent.sdk Class Hierarchy (sdk 1.8.0 API)"; + parent.document.title="com.dynatrace.oneagent.sdk Class Hierarchy (sdk 1.9.0 API)"; } } diff --git a/docs/constant-values.html b/docs/constant-values.html index 242e252..33bc4a7 100755 --- a/docs/constant-values.html +++ b/docs/constant-values.html @@ -2,12 +2,12 @@ - + -Constant Field Values (sdk 1.8.0 API) +Constant Field Values (sdk 1.9.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Constant Field Values (sdk 1.8.0 API)"; + parent.document.title="Constant Field Values (sdk 1.9.0 API)"; } } @@ -119,6 +119,30 @@

    +

    + + + + + + + + + + + + + + + + + +
    com.dynatrace.oneagent.sdk.api.infos.TraceContextInfo
    +public static final java.lang.StringINVALID_SPAN_ID"0000000000000000"
    +public static final java.lang.StringINVALID_TRACE_ID"00000000000000000000000000000000"
    + +

    +


    diff --git a/docs/deprecated-list.html b/docs/deprecated-list.html index 471d64d..1139736 100755 --- a/docs/deprecated-list.html +++ b/docs/deprecated-list.html @@ -2,12 +2,12 @@ - + -Deprecated List (sdk 1.8.0 API) +Deprecated List (sdk 1.9.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Deprecated List (sdk 1.8.0 API)"; + parent.document.title="Deprecated List (sdk 1.9.0 API)"; } } diff --git a/docs/help-doc.html b/docs/help-doc.html index a1d3492..db6c54b 100755 --- a/docs/help-doc.html +++ b/docs/help-doc.html @@ -2,12 +2,12 @@ - + -API Help (sdk 1.8.0 API) +API Help (sdk 1.9.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="API Help (sdk 1.8.0 API)"; + parent.document.title="API Help (sdk 1.9.0 API)"; } } diff --git a/docs/index-all.html b/docs/index-all.html index 2ecb3d9..db6c040 100755 --- a/docs/index-all.html +++ b/docs/index-all.html @@ -2,12 +2,12 @@ - + -Index (sdk 1.8.0 API) +Index (sdk 1.9.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Index (sdk 1.8.0 API)"; + parent.document.title="Index (sdk 1.9.0 API)"; } } @@ -181,6 +181,16 @@
    getSDKConstant() - Method in enum com.dynatrace.oneagent.sdk.api.enums.ChannelType
      +
    getSpanId() - +Method in interface com.dynatrace.oneagent.sdk.api.infos.TraceContextInfo +
    The W3C span ID hex string (never empty or null, but might be all-zero if TraceContextInfo.isValid()) is false) +
    getTraceContextInfo() - +Method in interface com.dynatrace.oneagent.sdk.api.OneAgentSDK +
    Returns the current W3C trace context for log enrichment + (not meant for tagging and context-propagation but for log-enrichment). +
    getTraceId() - +Method in interface com.dynatrace.oneagent.sdk.api.infos.TraceContextInfo +
    The W3C trace ID hex string (never empty or null, but might be all-zero if TraceContextInfo.isValid()) is false)
    getVendorName() - Method in enum com.dynatrace.oneagent.sdk.api.enums.DatabaseVendor
      @@ -192,7 +202,16 @@

    I

    -
    IncomingMessageProcessTracer - Interface in com.dynatrace.oneagent.sdk.api
    Interface for processing message tracer.
    IncomingMessageReceiveTracer - Interface in com.dynatrace.oneagent.sdk.api
    Interface for receiving message tracer.
    IncomingRemoteCallTracer - Interface in com.dynatrace.oneagent.sdk.api
    Represents the server side of a remote call.
    IncomingTaggable - Interface in com.dynatrace.oneagent.sdk.api
    Common interface for server-tagging-related methods.
    IncomingWebRequestTracer - Interface in com.dynatrace.oneagent.sdk.api
    Interface for incoming webrequest tracer.
    InProcessLink - Interface in com.dynatrace.oneagent.sdk.api
    Represents link used for in-process-tagging.
    InProcessLinkTracer - Interface in com.dynatrace.oneagent.sdk.api
    Tracer used to trace in-process-linking.
    +
    IncomingMessageProcessTracer - Interface in com.dynatrace.oneagent.sdk.api
    Interface for processing message tracer.
    IncomingMessageReceiveTracer - Interface in com.dynatrace.oneagent.sdk.api
    Interface for receiving message tracer.
    IncomingRemoteCallTracer - Interface in com.dynatrace.oneagent.sdk.api
    Represents the server side of a remote call.
    IncomingTaggable - Interface in com.dynatrace.oneagent.sdk.api
    Common interface for server-tagging-related methods.
    IncomingWebRequestTracer - Interface in com.dynatrace.oneagent.sdk.api
    Interface for incoming webrequest tracer.
    InProcessLink - Interface in com.dynatrace.oneagent.sdk.api
    Represents link used for in-process-tagging.
    InProcessLinkTracer - Interface in com.dynatrace.oneagent.sdk.api
    Tracer used to trace in-process-linking.
    INVALID_SPAN_ID - +Static variable in interface com.dynatrace.oneagent.sdk.api.infos.TraceContextInfo +
    All-zero (invalid) W3C span ID. +
    INVALID_TRACE_ID - +Static variable in interface com.dynatrace.oneagent.sdk.api.infos.TraceContextInfo +
    All-zero (invalid) W3C trace ID. +
    isValid() - +Method in interface com.dynatrace.oneagent.sdk.api.infos.TraceContextInfo +
    If true, the trace & span ID are both valid (i.e., non-zero). +


  • L

    @@ -273,7 +292,8 @@
    toString() - Method in enum com.dynatrace.oneagent.sdk.api.enums.MessageSystemVendor
      -
    traceCustomService(String, String) - +
    TraceContextInfo - Interface in com.dynatrace.oneagent.sdk.api.infos
    Provides information about a PurePath node using the TraceContext (Trace-Id, Span-Id) model as defined in + traceCustomService(String, String) - Method in interface com.dynatrace.oneagent.sdk.api.OneAgentSDK
    Creates a tracer for a custom transaction (Dynatrace calls them Custom service).
    traceIncomingMessageProcess(MessagingSystemInfo) - diff --git a/docs/index.html b/docs/index.html index ae7122e..17f39e0 100755 --- a/docs/index.html +++ b/docs/index.html @@ -2,16 +2,50 @@ - + -sdk 1.8.0 API +sdk 1.9.0 API @@ -80,7 +80,7 @@

    -sdk 1.8.0 API +sdk 1.9.0 API

    diff --git a/docs/overview-tree.html b/docs/overview-tree.html index 57444ac..ede1da8 100755 --- a/docs/overview-tree.html +++ b/docs/overview-tree.html @@ -2,12 +2,12 @@ - + -Class Hierarchy (sdk 1.8.0 API) +Class Hierarchy (sdk 1.9.0 API) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Class Hierarchy (sdk 1.8.0 API)"; + parent.document.title="Class Hierarchy (sdk 1.9.0 API)"; } } @@ -106,7 +106,7 @@

  • com.dynatrace.oneagent.sdk.api.OutgoingRemoteCallTracer (also extends com.dynatrace.oneagent.sdk.api.Tracer)
  • com.dynatrace.oneagent.sdk.api.OutgoingWebRequestTracer (also extends com.dynatrace.oneagent.sdk.api.Tracer) -
  • com.dynatrace.oneagent.sdk.api.Tracer
    diff --git a/src/main/java/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.java b/src/main/java/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.java index eba5df3..df67b69 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/OneAgentSDKFactory.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/CustomServiceTracer.java b/src/main/java/com/dynatrace/oneagent/sdk/api/CustomServiceTracer.java index e57970f..f015bd5 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/CustomServiceTracer.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/CustomServiceTracer.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/DatabaseRequestTracer.java b/src/main/java/com/dynatrace/oneagent/sdk/api/DatabaseRequestTracer.java index 7782216..c3f0f44 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/DatabaseRequestTracer.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/DatabaseRequestTracer.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/InProcessLink.java b/src/main/java/com/dynatrace/oneagent/sdk/api/InProcessLink.java index 49f11d0..efd0d0d 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/InProcessLink.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/InProcessLink.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.java b/src/main/java/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.java index 26f77e7..64c8004 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/InProcessLinkTracer.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingMessageProcessTracer.java b/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingMessageProcessTracer.java index 7f0954d..56325e7 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingMessageProcessTracer.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingMessageProcessTracer.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingMessageReceiveTracer.java b/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingMessageReceiveTracer.java index 1e9610e..e49c885 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingMessageReceiveTracer.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingMessageReceiveTracer.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.java b/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.java index d271903..9c37d54 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingRemoteCallTracer.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingTaggable.java b/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingTaggable.java index 8237d0d..80dd18e 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingTaggable.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingTaggable.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -42,4 +42,4 @@ public interface IncomingTaggable { */ void setDynatraceByteTag(byte[] tag); -} \ No newline at end of file +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingWebRequestTracer.java b/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingWebRequestTracer.java index 95f9055..f2d561a 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingWebRequestTracer.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/IncomingWebRequestTracer.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/LoggingCallback.java b/src/main/java/com/dynatrace/oneagent/sdk/api/LoggingCallback.java index 9bbf702..f098d66 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/LoggingCallback.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/LoggingCallback.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/OneAgentSDK.java b/src/main/java/com/dynatrace/oneagent/sdk/api/OneAgentSDK.java index cc47ffa..8843127 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/OneAgentSDK.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/OneAgentSDK.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,6 +20,7 @@ import com.dynatrace.oneagent.sdk.api.enums.SDKState; import com.dynatrace.oneagent.sdk.api.infos.DatabaseInfo; import com.dynatrace.oneagent.sdk.api.infos.MessagingSystemInfo; +import com.dynatrace.oneagent.sdk.api.infos.TraceContextInfo; import com.dynatrace.oneagent.sdk.api.infos.WebApplicationInfo; /** @@ -304,4 +305,15 @@ OutgoingRemoteCallTracer traceOutgoingRemoteCall(String serviceMethod, String se * @since 1.8 */ CustomServiceTracer traceCustomService(String serviceMethod, String serviceName); + + /** + * Returns the current W3C trace context for log enrichment + * (not meant for tagging and context-propagation but for log-enrichment). + * See {@link TraceContextInfo} for details. + * + * @return current trace context at the time of the call - never null (but may contain all-zero ID). + * @since 1.9 + */ + TraceContextInfo getTraceContextInfo(); + } diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingMessageTracer.java b/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingMessageTracer.java index 1754ccd..f1a32d1 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingMessageTracer.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingMessageTracer.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.java b/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.java index ca47f78..4c4d7fc 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingRemoteCallTracer.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.java b/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.java index 114bb23..1592d89 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingTaggable.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -41,4 +41,4 @@ public interface OutgoingTaggable { */ byte[] getDynatraceByteTag(); -} \ No newline at end of file +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingWebRequestTracer.java b/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingWebRequestTracer.java index 54e83f3..98c4211 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingWebRequestTracer.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/OutgoingWebRequestTracer.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -53,4 +53,4 @@ public interface OutgoingWebRequestTracer extends Tracer, OutgoingTaggable { */ void setStatusCode(int statusCode); -} \ No newline at end of file +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/Tracer.java b/src/main/java/com/dynatrace/oneagent/sdk/api/Tracer.java index 1b44575..b8c8570 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/Tracer.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/Tracer.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -83,4 +83,4 @@ public interface Tracer { * @since 1.0 */ void error(Throwable throwable); -} \ No newline at end of file +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/enums/ChannelType.java b/src/main/java/com/dynatrace/oneagent/sdk/api/enums/ChannelType.java index 4d9d50c..2f44299 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/enums/ChannelType.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/enums/ChannelType.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/enums/DatabaseVendor.java b/src/main/java/com/dynatrace/oneagent/sdk/api/enums/DatabaseVendor.java index 60de431..c140f90 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/enums/DatabaseVendor.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/enums/DatabaseVendor.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/enums/MessageDestinationType.java b/src/main/java/com/dynatrace/oneagent/sdk/api/enums/MessageDestinationType.java index 3df633b..ef9ab54 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/enums/MessageDestinationType.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/enums/MessageDestinationType.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/enums/MessageSystemVendor.java b/src/main/java/com/dynatrace/oneagent/sdk/api/enums/MessageSystemVendor.java index 2a8ede2..4387e0e 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/enums/MessageSystemVendor.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/enums/MessageSystemVendor.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/enums/SDKState.java b/src/main/java/com/dynatrace/oneagent/sdk/api/enums/SDKState.java index 5183522..3c63ee1 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/enums/SDKState.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/enums/SDKState.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/infos/DatabaseInfo.java b/src/main/java/com/dynatrace/oneagent/sdk/api/infos/DatabaseInfo.java index 832e261..4aa3a04 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/infos/DatabaseInfo.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/infos/DatabaseInfo.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/infos/MessagingSystemInfo.java b/src/main/java/com/dynatrace/oneagent/sdk/api/infos/MessagingSystemInfo.java index eafd01f..0399199 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/infos/MessagingSystemInfo.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/infos/MessagingSystemInfo.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/infos/TraceContextInfo.java b/src/main/java/com/dynatrace/oneagent/sdk/api/infos/TraceContextInfo.java new file mode 100644 index 0000000..0e4d408 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/infos/TraceContextInfo.java @@ -0,0 +1,57 @@ +/* + * Copyright 2023 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.api.infos; + +/** + * Provides information about a PurePath node using the TraceContext (Trace-Id, Span-Id) model as defined in + * These are a few common reasons for why you may be unable to get a valid trace context:
      + *
    • No OneAgent is present, or it is incompatible with this SDK version + * (check {@link com.dynatrace.oneagent.sdk.api.OneAgentSDK#getCurrentState()})
    • + *
    • There is no currently active PurePath context.
    • + *
    • Some other reason; more information may be available through {@link com.dynatrace.oneagent.sdk.api.OneAgentSDK#setLoggingCallback(com.dynatrace.oneagent.sdk.api.LoggingCallback)}
    • + *
    + *

    + * */ + boolean isValid(); + + /** The W3C trace ID hex string (never empty or null, but might be all-zero if {@link #isValid()}) is false) */ + String getTraceId(); + + /** The W3C span ID hex string (never empty or null, but might be all-zero if {@link #isValid()}) is false) */ + String getSpanId(); +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/api/infos/WebApplicationInfo.java b/src/main/java/com/dynatrace/oneagent/sdk/api/infos/WebApplicationInfo.java index e76caaa..45348c7 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/api/infos/WebApplicationInfo.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/api/infos/WebApplicationInfo.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/OneAgentSDKFactoryImpl.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/OneAgentSDKFactoryImpl.java index 897c8ea..ef44809 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/OneAgentSDKFactoryImpl.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/OneAgentSDKFactoryImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -30,7 +30,7 @@ public class OneAgentSDKFactoryImpl { * OneAgent), increase oneSdkFix only. */ static final int oneSdkMajor = 1; - static final int oneSdkMinor = 8; + static final int oneSdkMinor = 9; static final int oneSdkFix = 0; public static final boolean debugOneAgentSdkStub = Boolean.parseBoolean(System.getProperty("com.dynatrace.oneagent.sdk.debug", "false")); @@ -70,4 +70,4 @@ public static OneAgentSDK createInstance() { public static void logDebug(String msg) { System.out.println("[onesdk ] " + msg); } -} \ No newline at end of file +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/SDKInstanceProvider.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/SDKInstanceProvider.java index 2cbb013..e9018aa 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/SDKInstanceProvider.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/SDKInstanceProvider.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/CustomServiceTracerNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/CustomServiceTracerNoop.java index eac4a6e..4473460 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/CustomServiceTracerNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/CustomServiceTracerNoop.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/DatabaseInfoNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/DatabaseInfoNoop.java index 47d3520..cddafac 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/DatabaseInfoNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/DatabaseInfoNoop.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/DatabaseRequestTracerNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/DatabaseRequestTracerNoop.java index fa54310..467ce07 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/DatabaseRequestTracerNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/DatabaseRequestTracerNoop.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/InProcessLinkNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/InProcessLinkNoop.java index c7b84d0..b5d7769 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/InProcessLinkNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/InProcessLinkNoop.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/InProcessLinkTracerNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/InProcessLinkTracerNoop.java index e3f3ca8..a4ae5d8 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/InProcessLinkTracerNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/InProcessLinkTracerNoop.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/IncomingMessageProcessTracerNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/IncomingMessageProcessTracerNoop.java index 462f9d3..78377d7 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/IncomingMessageProcessTracerNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/IncomingMessageProcessTracerNoop.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/IncomingMessageReceiveTracerNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/IncomingMessageReceiveTracerNoop.java index 9f7d34c..0b25f0a 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/IncomingMessageReceiveTracerNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/IncomingMessageReceiveTracerNoop.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/IncomingWebRequestTracerNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/IncomingWebRequestTracerNoop.java index 32858ca..e085f75 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/IncomingWebRequestTracerNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/IncomingWebRequestTracerNoop.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/MessagingSystemInfoNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/MessagingSystemInfoNoop.java index b0e4b67..e26536f 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/MessagingSystemInfoNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/MessagingSystemInfoNoop.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/NodeNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/NodeNoop.java index f5fb8a7..e1a589f 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/NodeNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/NodeNoop.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OneAgentSDKNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OneAgentSDKNoop.java index 049c94d..0c82831 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OneAgentSDKNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OneAgentSDKNoop.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -33,6 +33,7 @@ import com.dynatrace.oneagent.sdk.api.enums.SDKState; import com.dynatrace.oneagent.sdk.api.infos.DatabaseInfo; import com.dynatrace.oneagent.sdk.api.infos.MessagingSystemInfo; +import com.dynatrace.oneagent.sdk.api.infos.TraceContextInfo; import com.dynatrace.oneagent.sdk.api.infos.WebApplicationInfo; /** @@ -143,4 +144,9 @@ public DatabaseRequestTracer traceSqlDatabaseRequest(DatabaseInfo databaseInfo, public CustomServiceTracer traceCustomService(String serviceMethod, String serviceName) { return CustomServiceTracerNoop.INSTANCE; } + + @Override + public TraceContextInfo getTraceContextInfo() { + return TraceContextInfoNoop.INSTANCE; + } } diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OutgoingMessageTracerNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OutgoingMessageTracerNoop.java index 33c5a99..1c47bd7 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OutgoingMessageTracerNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OutgoingMessageTracerNoop.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OutgoingWebRequestTracerNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OutgoingWebRequestTracerNoop.java index 15768b3..05150e5 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OutgoingWebRequestTracerNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/OutgoingWebRequestTracerNoop.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/RemoteCallClientTracerNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/RemoteCallClientTracerNoop.java index 5538ffd..9603329 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/RemoteCallClientTracerNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/RemoteCallClientTracerNoop.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/RemoteCallServerTracerNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/RemoteCallServerTracerNoop.java index 53cd4fc..8543d64 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/RemoteCallServerTracerNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/RemoteCallServerTracerNoop.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/TraceContextInfoNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/TraceContextInfoNoop.java new file mode 100644 index 0000000..363f3eb --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/TraceContextInfoNoop.java @@ -0,0 +1,39 @@ +/* + * Copyright 2023 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.impl.noop; + +import com.dynatrace.oneagent.sdk.api.infos.TraceContextInfo; + +public final class TraceContextInfoNoop implements TraceContextInfo { + public static final TraceContextInfoNoop INSTANCE = new TraceContextInfoNoop(); + + private TraceContextInfoNoop() {} + + @Override + public boolean isValid() { + return false; + } + + @Override + public String getTraceId() { + return INVALID_TRACE_ID; + } + + @Override + public String getSpanId() { + return INVALID_SPAN_ID; + } +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/WebApplicationInfoNoop.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/WebApplicationInfoNoop.java index 0b42455..0dedec2 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/WebApplicationInfoNoop.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/noop/WebApplicationInfoNoop.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/CustomServiceTracerProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/CustomServiceTracerProxy.java index e9763c5..1abd4f4 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/CustomServiceTracerProxy.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/CustomServiceTracerProxy.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/DatabaseInfoImpl.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/DatabaseInfoImpl.java index be00c7d..8761907 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/DatabaseInfoImpl.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/DatabaseInfoImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/DatabaseRequestTracerProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/DatabaseRequestTracerProxy.java index e1ec4cc..83982cf 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/DatabaseRequestTracerProxy.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/DatabaseRequestTracerProxy.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/InProcessLinkImpl.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/InProcessLinkImpl.java index cd668dd..51abed2 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/InProcessLinkImpl.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/InProcessLinkImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/InProcessLinkTracerProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/InProcessLinkTracerProxy.java index 33e93dc..5c6d8d3 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/InProcessLinkTracerProxy.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/InProcessLinkTracerProxy.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/IncomingMessageProcessTracerProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/IncomingMessageProcessTracerProxy.java index be66dd1..ee7432b 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/IncomingMessageProcessTracerProxy.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/IncomingMessageProcessTracerProxy.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/IncomingMessageReceiveTracerProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/IncomingMessageReceiveTracerProxy.java index dc800ec..f72a118 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/IncomingMessageReceiveTracerProxy.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/IncomingMessageReceiveTracerProxy.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/IncomingWebRequestProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/IncomingWebRequestProxy.java index b561279..93f2dd9 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/IncomingWebRequestProxy.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/IncomingWebRequestProxy.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/MessagingSystemInfoImpl.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/MessagingSystemInfoImpl.java index 17acab1..e2fd3bf 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/MessagingSystemInfoImpl.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/MessagingSystemInfoImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OneAgentSDKProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OneAgentSDKProxy.java index 561e6cb..3af92f2 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OneAgentSDKProxy.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OneAgentSDKProxy.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,6 +15,8 @@ */ package com.dynatrace.oneagent.sdk.impl.proxy; +import java.util.Map; + import com.dynatrace.oneagent.sdk.api.CustomServiceTracer; import com.dynatrace.oneagent.sdk.api.DatabaseRequestTracer; import com.dynatrace.oneagent.sdk.api.InProcessLink; @@ -33,6 +35,7 @@ import com.dynatrace.oneagent.sdk.api.enums.SDKState; import com.dynatrace.oneagent.sdk.api.infos.DatabaseInfo; import com.dynatrace.oneagent.sdk.api.infos.MessagingSystemInfo; +import com.dynatrace.oneagent.sdk.api.infos.TraceContextInfo; import com.dynatrace.oneagent.sdk.api.infos.WebApplicationInfo; import com.dynatrace.oneagent.sdk.impl.OneAgentSDKFactoryImpl; import com.dynatrace.oneagent.sdk.impl.noop.CustomServiceTracerNoop; @@ -48,6 +51,7 @@ import com.dynatrace.oneagent.sdk.impl.noop.OutgoingWebRequestTracerNoop; import com.dynatrace.oneagent.sdk.impl.noop.RemoteCallClientTracerNoop; import com.dynatrace.oneagent.sdk.impl.noop.RemoteCallServerTracerNoop; +import com.dynatrace.oneagent.sdk.impl.noop.TraceContextInfoNoop; import com.dynatrace.oneagent.sdk.impl.noop.WebApplicationInfoNoop; /** TODO: check if/how class could be generated */ @@ -317,4 +321,11 @@ public CustomServiceTracer traceCustomService(String serviceMethod, String servi } return new CustomServiceTracerProxy(apiProxy, agentObject); } + + @Override + public TraceContextInfo getTraceContextInfo() { + Map.Entry traceAndSpanId = apiProxy.oneAgentSDK_getCurrentTraceAndSpanId(agentSdkImpl); + return traceAndSpanId == null ? TraceContextInfoNoop.INSTANCE : new TraceContextInfoImpl( + traceAndSpanId.getKey(), traceAndSpanId.getValue()); + } } diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OutgoingMessageTracerProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OutgoingMessageTracerProxy.java index af24b9e..603331f 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OutgoingMessageTracerProxy.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OutgoingMessageTracerProxy.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OutgoingWebRequestTracerProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OutgoingWebRequestTracerProxy.java index 22e2958..5b23093 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OutgoingWebRequestTracerProxy.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/OutgoingWebRequestTracerProxy.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/RemoteCallClientProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/RemoteCallClientProxy.java index 5871edc..cfc799d 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/RemoteCallClientProxy.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/RemoteCallClientProxy.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/RemoteCallServerProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/RemoteCallServerProxy.java index d8846ff..db41704 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/RemoteCallServerProxy.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/RemoteCallServerProxy.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/SDK2AgentInternalApiProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/SDK2AgentInternalApiProxy.java index b13a8dd..efad0e4 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/SDK2AgentInternalApiProxy.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/SDK2AgentInternalApiProxy.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,7 @@ package com.dynatrace.oneagent.sdk.impl.proxy; import java.lang.reflect.Method; +import java.util.Map; import com.dynatrace.oneagent.sdk.impl.OneAgentSDKFactoryImpl; @@ -66,6 +67,8 @@ public final class SDK2AgentInternalApiProxy { private final Method databaseRequestTracer_setRowsReturned; private final Method databaseRequestTracer_setRoundTripCount; + private final Method oneAgentSDK_getCurrentTraceAndSpanId; + public SDK2AgentInternalApiProxy(Object agentImpl) throws NoSuchMethodException, SecurityException { this.agentImpl = agentImpl; oneAgentSDKFactory_createSdk = findMethod("oneAgentSDKFactory_createSDK", new Class[] {}); @@ -133,6 +136,9 @@ public SDK2AgentInternalApiProxy(Object agentImpl) throws NoSuchMethodException, new Class[] { Object.class, Integer.TYPE }); databaseRequestTracer_setRoundTripCount = findMethod("databaseRequestTracer_setRoundTripCount", new Class[] { Object.class, Integer.TYPE }); + + oneAgentSDK_getCurrentTraceAndSpanId = findMethod("oneAgentSDK_getCurrentTraceAndSpanId", + new Class[] {Object.class}); } private Method findMethod(String name, Class... args) throws NoSuchMethodException, SecurityException { @@ -309,4 +315,9 @@ void databaseRequestTracer_setRowsReturned(Object databaseRequestTracer, int row void databaseRequestTracer_setRoundTripCount(Object databaseRequestTracer, int roundTripCount) { invoke(databaseRequestTracer_setRoundTripCount, databaseRequestTracer, roundTripCount); } + + @SuppressWarnings("unchecked") + public Map.Entry oneAgentSDK_getCurrentTraceAndSpanId(Object sdk) { + return (Map.Entry) invoke(oneAgentSDK_getCurrentTraceAndSpanId, sdk); + } } diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/TraceContextInfoImpl.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/TraceContextInfoImpl.java new file mode 100644 index 0000000..fb18621 --- /dev/null +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/TraceContextInfoImpl.java @@ -0,0 +1,45 @@ +/* + * Copyright 2023 Dynatrace LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dynatrace.oneagent.sdk.impl.proxy; + +import com.dynatrace.oneagent.sdk.api.infos.TraceContextInfo; + +final class TraceContextInfoImpl implements TraceContextInfo { + + private final String traceId; + private final String spanId; + + public TraceContextInfoImpl(String traceId, String spanId) { + this.traceId = traceId; + this.spanId = spanId; + } + + @Override + public boolean isValid() { + // Always true; for the invalid trace context, TraceContextInfoNoop is used. + return true; + } + + @Override + public String getTraceId() { + return traceId; + } + + @Override + public String getSpanId() { + return spanId; + } +} diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/TraceableProxy.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/TraceableProxy.java index 8b3a7a7..a7c050c 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/TraceableProxy.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/TraceableProxy.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/WebApplicationInfoImpl.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/WebApplicationInfoImpl.java index 6a66067..a587d80 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/WebApplicationInfoImpl.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/WebApplicationInfoImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/package-info.java b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/package-info.java index cd690c3..50d88d6 100644 --- a/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/package-info.java +++ b/src/main/java/com/dynatrace/oneagent/sdk/impl/proxy/package-info.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Dynatrace LLC + * Copyright 2023 Dynatrace LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/test/java/com/dynatrace/oneagent/sdk/impl/OneAgentSDKFactoryImplTest.java b/src/test/java/com/dynatrace/oneagent/sdk/impl/OneAgentSDKFactoryImplTest.java new file mode 100644 index 0000000..f873598 --- /dev/null +++ b/src/test/java/com/dynatrace/oneagent/sdk/impl/OneAgentSDKFactoryImplTest.java @@ -0,0 +1,26 @@ +package com.dynatrace.oneagent.sdk.impl; + +import org.assertj.core.api.Assertions; +import org.junit.Test; + +import com.dynatrace.oneagent.sdk.impl.OneAgentSDKFactoryImpl; + +public class OneAgentSDKFactoryImplTest { + + @Test + public void versionCheckTest() { + // *** public version of SDK + String buildVersion = System.getProperty("sdk.version"); + Assertions.assertThat(buildVersion).isEqualTo("1.9.0"); + + // *** internal version (between SDK and agent) + String[] splitted = buildVersion.split("\\."); + int major = Integer.parseInt(splitted[0]); + int minor = Integer.parseInt(splitted[1]); + int fix = Integer.parseInt(splitted[2]); + + Assertions.assertThat(major).isEqualTo(OneAgentSDKFactoryImpl.oneSdkMajor); + Assertions.assertThat(minor).isEqualTo(OneAgentSDKFactoryImpl.oneSdkMinor); + Assertions.assertThat(fix).isEqualTo(OneAgentSDKFactoryImpl.oneSdkFix); + } +} diff --git a/src/test/java/com/dynatrace/oneagent/sdk/impl/SDKInstanceProviderTest.java b/src/test/java/com/dynatrace/oneagent/sdk/impl/SDKInstanceProviderTest.java new file mode 100644 index 0000000..88e732b --- /dev/null +++ b/src/test/java/com/dynatrace/oneagent/sdk/impl/SDKInstanceProviderTest.java @@ -0,0 +1,18 @@ +package com.dynatrace.oneagent.sdk.impl; + +import static org.junit.Assert.assertThat; + +import org.hamcrest.core.IsEqual; +import org.junit.Test; + +import com.dynatrace.oneagent.sdk.impl.SDKInstanceProvider; + +public class SDKInstanceProviderTest { + + @Test + public void testClassName() { + assertThat("class name changed. incompatible with older agents.", SDKInstanceProvider.class.getName(), + IsEqual.equalTo("com.dynatrace.oneagent.sdk.impl.SDKInstanceProvider")); + } + +} From 9d76ddc736ede9b5f5fec35ab5d5c137b939c656 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Neum=C3=BCller?= Date: Fri, 30 Jun 2023 09:55:50 +0200 Subject: [PATCH 33/36] Document async limitations of SDK --- README.md | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 3ca820d..b338c61 100755 --- a/README.md +++ b/README.md @@ -141,6 +141,10 @@ To trace any kind of call you first need to create a Tracer. The Tracer object r you want to call. A Tracer serves two purposes. First, to time the call (duration, cpu and more) and report errors. That is why each Tracer has these three methods. The error method must be called only once, and it must be in between start and end. +A Tracer instance can only be used from the thread on which it was created. +See [in process linking](#in-process-linking) for tracing across thread boundaries, and see further below in this section +for how to cross process boundaries. + ```Java void start(); @@ -149,12 +153,24 @@ void error(String message); void end(); ``` +`start()` records the active PurePath node on the current Java thread +as parent (if any; whether created by another Tracer or the OneAgent), creates a new PurePath node +and sets the new one as the currently active one. The OneAgent also requires that a child node ends +before all parent nodes (Stated another way, tracers on the same thread must be ended in the opposite +order of how they were started. While this may sound odd if you hear it the first time, it corresponds +to the most natural usage pattern and you usually don't even need to think about it). + +While the tracer's automatic parent-child relationship works very intuitively in most cases, +it does not work with **asynchronous patterns**, where the same thread handles multiple logically +separate operations in an interleaved way on the same Java thread. If you need to instrument +such patterns, it is recommended to use the OneAgent's [OpenTelemetry interoperability][oa-otel]. + +[oa-otel]: https://www.dynatrace.com/support/help/shortlink/opent-java + The second purpose of a Tracer is to allow tracing across process boundaries. To achieve that these kind of traces supply so called tags. Tags are strings or byte arrays that enable Dynatrace to trace a transaction end to end. As such the tag is the one information that you need to transport across these calls as an SDK user. -A Tracer instance can only be used from the thread on which it was created. See [in process linking](#in-process-linking) for tracing across thread boundaries. - ## Features The feature sets differ slightly with each language implementation. More functionality will be added over time, see
    Planned features for OneAgent SDK From b2e62648942555e376b70190deb2ec9eb5823644 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20D=C3=BCmont?= <22489773+newtork@users.noreply.github.com> Date: Wed, 22 May 2024 16:34:46 +0200 Subject: [PATCH 34/36] Fix variable name in README --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index b338c61..39bc34e 100755 --- a/README.md +++ b/README.md @@ -319,16 +319,16 @@ calling addRequestHeader(...). This ensures that tagging with our built-in senso IncomingWebRequestTracer tracer = oneAgentSdk.traceIncomingWebRequest(wsInfo,"https://www.oursupershop.com/api/service/checkout/save", "POST") for (Entry headerField : httpRequest.getHeaders().entrySet()) { - incomingWebrequestTracer.addRequestHeader(headerField.getKey(), headerField.getValue()); + tracer.addRequestHeader(headerField.getKey(), headerField.getValue()); } for (Entry> parameterEntry : httpRequest.getParameters().entrySet()) { for (String value : parameterEntry.getValue()) { - incomingWebrequestTracer.addParameter(parameterEntry.getKey(), value); + tracer.addParameter(parameterEntry.getKey(), value); } } -incomingWebrequestTracer.setRemoteAddress(httpRequest.getRemoteHostName()); +tracer.setRemoteAddress(httpRequest.getRemoteHostName()); tracer.start(); try { From 2ad903b54f2398413811313f523e97752161eeb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Neum=C3=BCller?= Date: Tue, 3 Sep 2024 08:48:45 +0200 Subject: [PATCH 35/36] README: Document W3C TC is unsupported for tracing. (#35) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Gerhard Stöbich --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 39bc34e..b551fb8 100755 --- a/README.md +++ b/README.md @@ -313,7 +313,8 @@ WebApplicationInfo wsInfo = oneAgentSdk.createWebApplicationInfo("WebShopProduct ``` To trace a specific incoming web request you then need to create a Tracer object. Make sure you provide all http headers from the request to the SDK by -calling addRequestHeader(...). This ensures that tagging with our built-in sensor will work. +calling addRequestHeader(...). This ensures that tagging with our built-in sensor will work, but note that only the proprietary x-dynatrace header +will be processed (meaning, W3C trace context is not supported for tracing with the OneAgent SDKs, use OpenTelemetry instead if you require this). ```Java IncomingWebRequestTracer tracer = oneAgentSdk.traceIncomingWebRequest(wsInfo,"https://www.oursupershop.com/api/service/checkout/save", "POST") From 9ac8eee0c0f319a303dd2bd08cbee17afa16c7c1 Mon Sep 17 00:00:00 2001 From: Wolfgang Ziegler Date: Wed, 7 May 2025 09:42:04 +0200 Subject: [PATCH 36/36] Update doc regarding incoming W3C HTTP headers --- README.md | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index b551fb8..06a4e61 100755 --- a/README.md +++ b/README.md @@ -312,9 +312,13 @@ To trace an incoming web request you first need to create a WebApplicationInfo o WebApplicationInfo wsInfo = oneAgentSdk.createWebApplicationInfo("WebShopProduction", "CheckoutService", "/api/service/checkout"); ``` -To trace a specific incoming web request you then need to create a Tracer object. Make sure you provide all http headers from the request to the SDK by -calling addRequestHeader(...). This ensures that tagging with our built-in sensor will work, but note that only the proprietary x-dynatrace header -will be processed (meaning, W3C trace context is not supported for tracing with the OneAgent SDKs, use OpenTelemetry instead if you require this). +To trace a specific incoming web request you then need to create a Tracer object. Make sure you provide all http headers from the request +to the SDK by calling `addRequestHeader(...)`. This ensures that tagging with our built-in sensors will work. + +**Note**: + +* Previous OneAgent versions only supported the proprietary Dynatrace tracing header (`x-dynatrace`). +* Starting with OneAgent version `1.317`, [**W3C Trace Context**](https://www.w3.org/TR/trace-context) headers will be processed as well if they are provided via `addRequestHeader`. ```Java IncomingWebRequestTracer tracer = oneAgentSdk.traceIncomingWebRequest(wsInfo,"https://www.oursupershop.com/api/service/checkout/save", "POST") @@ -552,6 +556,9 @@ SLAs apply according to the customer's support level. ### Other announcements +* [**W3C Trace Context**](https://www.w3.org/TR/trace-context/) headers for [incoming web requests](#trace-incoming-web-requests) are +supported with OneAgent versions starting from `1.317`. + * ⚠️ **Deprecation announcement for older SDK versions:** Version 1.7 and all older versions have been put on the path to deprecation and will no longer be supported starting September 1, 2023. We advise customers to upgrade to newest version. Customers need to upgrade to at least 1.8 but are encouraged to upgrade to the newest available version (1.9). ### Older versions