diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3e6cc28..c21169a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,10 +2,17 @@
## [Unreleased](https://github.com/Dynatrace/openkit-dotnet/compare/v3.2.0...HEAD)
+### Added
+
+- `IWebRequestTracer.SetBytesSent(long bytes)` to increase the size range
+- `IWebRequestTracer.SetBytesReceived(long bytes)` to increase the size range
+
### Changed
- `HttpClientWebClient` for NET3.5 is now using User-Agent property directly
- Improved cancelation or disposal of childs when leaving an action
+- Deprecated `IWebRequestTracer.SetBytesSent(int bytes)` due to datatype limitations
+- Deprecated `IWebRequestTracer.SetBytesReceived(int bytes)` due to datatype limitations
## 3.2.0 [Release date: 2023-12-06]
[GitHub Releases](https://github.com/Dynatrace/openkit-dotnet/releases/tag/v3.2.0)
diff --git a/src/Dynatrace.OpenKit/API/IWebRequestTracer.cs b/src/Dynatrace.OpenKit/API/IWebRequestTracer.cs
index 0d7140c..132aebf 100644
--- a/src/Dynatrace.OpenKit/API/IWebRequestTracer.cs
+++ b/src/Dynatrace.OpenKit/API/IWebRequestTracer.cs
@@ -48,14 +48,30 @@ public interface IWebRequestTracer : IDisposable
///
/// number of bytes sent by the web request
///
+ [Obsolete("Use SetBytesSent(long) instead")]
IWebRequestTracer SetBytesSent(int bytesSent);
+ ///
+ /// Sets the amount of sent bytes of the web request
+ ///
+ /// number of bytes sent by the web request
+ ///
+ IWebRequestTracer SetBytesSent(long bytesSent);
+
///
/// Sets the amount of received bytes of the web request
///
/// number of bytes received by the web request
///
+ [Obsolete("Use SetBytesReceived(long) instead")]
IWebRequestTracer SetBytesReceived(int bytesReceived);
+
+ ///
+ /// Sets the amount of received bytes of the web request
+ ///
+ /// number of bytes received by the web request
+ ///
+ IWebRequestTracer SetBytesReceived(long bytesReceived);
}
}
diff --git a/src/Dynatrace.OpenKit/Core/Objects/IWebRequestTracerInternals.cs b/src/Dynatrace.OpenKit/Core/Objects/IWebRequestTracerInternals.cs
index 4d4cfa4..0f9f12f 100644
--- a/src/Dynatrace.OpenKit/Core/Objects/IWebRequestTracerInternals.cs
+++ b/src/Dynatrace.OpenKit/Core/Objects/IWebRequestTracerInternals.cs
@@ -61,12 +61,12 @@ internal interface IWebRequestTracerInternals : IWebRequestTracer, ICancelableOp
///
/// The number of bytes sent
///
- int BytesSent { get; }
+ long BytesSent { get; }
///
/// The number of received bytes
///
- int BytesReceived { get; }
+ long BytesReceived { get; }
///
/// Indicates whether this was stopped
diff --git a/src/Dynatrace.OpenKit/Core/Objects/NullWebRequestTracer.cs b/src/Dynatrace.OpenKit/Core/Objects/NullWebRequestTracer.cs
index bbe1bea..9625173 100644
--- a/src/Dynatrace.OpenKit/Core/Objects/NullWebRequestTracer.cs
+++ b/src/Dynatrace.OpenKit/Core/Objects/NullWebRequestTracer.cs
@@ -43,12 +43,21 @@ public IWebRequestTracer SetBytesReceived(int bytesReceived)
{
return this;
}
+ public IWebRequestTracer SetBytesReceived(long bytesReceived)
+ {
+ return this;
+ }
public IWebRequestTracer SetBytesSent(int bytesSent)
{
return this;
}
+ public IWebRequestTracer SetBytesSent(long bytesSent)
+ {
+ return this;
+ }
+
public IWebRequestTracer Start()
{
return this;
diff --git a/src/Dynatrace.OpenKit/Core/Objects/WebRequestTracer.cs b/src/Dynatrace.OpenKit/Core/Objects/WebRequestTracer.cs
index f0243d1..f695ffb 100644
--- a/src/Dynatrace.OpenKit/Core/Objects/WebRequestTracer.cs
+++ b/src/Dynatrace.OpenKit/Core/Objects/WebRequestTracer.cs
@@ -131,9 +131,9 @@ internal static bool IsValidUrlScheme(string url)
public int ResponseCode { get; private set; } = -1;
- public int BytesSent { get; private set; } = -1;
+ public long BytesSent { get; private set; } = -1;
- public int BytesReceived { get; private set; } = -1;
+ public long BytesReceived { get; private set; } = -1;
bool IWebRequestTracerInternals.IsStopped => EndTime != -1;
@@ -215,6 +215,11 @@ private void DoStop(int responseCode, bool discardData)
}
public IWebRequestTracer SetBytesSent(int bytesSent)
+ {
+ return SetBytesSent((long) bytesSent);
+ }
+
+ public IWebRequestTracer SetBytesSent(long bytesSent)
{
lock (lockObject)
{
@@ -228,6 +233,11 @@ public IWebRequestTracer SetBytesSent(int bytesSent)
}
public IWebRequestTracer SetBytesReceived(int bytesReceived)
+ {
+ return SetBytesReceived((long) bytesReceived);
+ }
+
+ public IWebRequestTracer SetBytesReceived(long bytesReceived)
{
lock (lockObject)
{
diff --git a/src/Dynatrace.OpenKit/Protocol/Beacon.cs b/src/Dynatrace.OpenKit/Protocol/Beacon.cs
index 2ab70cc..39c2f5e 100644
--- a/src/Dynatrace.OpenKit/Protocol/Beacon.cs
+++ b/src/Dynatrace.OpenKit/Protocol/Beacon.cs
@@ -1087,6 +1087,24 @@ private static void AddKeyValuePairIfNotNegative(StringBuilder builder, string k
}
}
+ ///
+ /// Serialization helper method for adding key/value pairs with int values.
+ ///
+ ///
+ /// The key value pair is only added if the given is not negative.
+ ///
+ ///
+ ///
+ ///
+ ///
+ private static void AddKeyValuePairIfNotNegative(StringBuilder builder, string key, long longValue)
+ {
+ if (longValue >= 0)
+ {
+ AddKeyValuePair(builder, key, longValue);
+ }
+ }
+
// helper method for adding key/value pairs with double values
private static void AddKeyValuePair(StringBuilder builder, string key, double doubleValue)
{
diff --git a/tests/Dynatrace.OpenKit.Tests/Core/Objects/NullWebRequestTracerTest.cs b/tests/Dynatrace.OpenKit.Tests/Core/Objects/NullWebRequestTracerTest.cs
index fd73d67..c6ba613 100644
--- a/tests/Dynatrace.OpenKit.Tests/Core/Objects/NullWebRequestTracerTest.cs
+++ b/tests/Dynatrace.OpenKit.Tests/Core/Objects/NullWebRequestTracerTest.cs
@@ -46,6 +46,19 @@ public void SetBytesSentReturnsSelf()
Assert.That(obtained, Is.SameAs(target));
}
+ [Test]
+ public void SetBytesSentLongReturnsSelf()
+ {
+ // given
+ var target = NullWebRequestTracer.Instance;
+
+ // when
+ var obtained = target.SetBytesSent(37L);
+
+ // then
+ Assert.That(obtained, Is.SameAs(target));
+ }
+
[Test]
public void SetBytesReceivedReturnsSelf()
{
@@ -59,6 +72,19 @@ public void SetBytesReceivedReturnsSelf()
Assert.That(obtained, Is.SameAs(target));
}
+ [Test]
+ public void SetBytesReceivedLongReturnsSelf()
+ {
+ // given
+ var target = NullWebRequestTracer.Instance;
+
+ // when
+ var obtained = target.SetBytesReceived(73L);
+
+ // then
+ Assert.That(obtained, Is.SameAs(target));
+ }
+
[Test]
public void StartReturnsSelf()
{
diff --git a/tests/Dynatrace.OpenKit.Tests/Core/Objects/WebRequestTracerTest.cs b/tests/Dynatrace.OpenKit.Tests/Core/Objects/WebRequestTracerTest.cs
index df3f658..5ea6414 100644
--- a/tests/Dynatrace.OpenKit.Tests/Core/Objects/WebRequestTracerTest.cs
+++ b/tests/Dynatrace.OpenKit.Tests/Core/Objects/WebRequestTracerTest.cs
@@ -137,7 +137,7 @@ public void SetBytesSentSetsTheNumberOfSentBytes()
var obtained = target.SetBytesSent(1234);
// then
- Assert.That(target.BytesSent, Is.EqualTo(1234));
+ Assert.That(target.BytesSent, Is.EqualTo(1234L));
Assert.That(obtained, Is.SameAs(target));
}
@@ -152,7 +152,36 @@ public void SetBytesSentDoesNotSetAnythingIfStoppedWithResponseCode()
var obtained = target.SetBytesSent(1234);
// then
- Assert.That(target.BytesSent, Is.EqualTo(-1));
+ Assert.That(target.BytesSent, Is.EqualTo(-1L));
+ Assert.That(obtained, Is.SameAs(target));
+ }
+
+ [Test]
+ public void SetBytesSentLongSetsTheNumberOfSentBytes()
+ {
+ // given
+ var target = CreateWebRequestTracer().Build();
+
+ // when setting the sent bytes
+ var obtained = target.SetBytesSent(1234L);
+
+ // then
+ Assert.That(target.BytesSent, Is.EqualTo(1234L));
+ Assert.That(obtained, Is.SameAs(target));
+ }
+
+ [Test]
+ public void SetBytesSentLongDoesNotSetAnythingIfStoppedWithResponseCode()
+ {
+ // given
+ var target = CreateWebRequestTracer().Build();
+ target.Stop(200);
+
+ // when setting the sent bytes
+ var obtained = target.SetBytesSent(1234L);
+
+ // then
+ Assert.That(target.BytesSent, Is.EqualTo(-1L));
Assert.That(obtained, Is.SameAs(target));
}
@@ -166,7 +195,7 @@ public void SetBytesReceivedSetsTheNumberOfReceivedBytes()
var obtained = target.SetBytesReceived(4321);
// then
- Assert.That(target.BytesReceived, Is.EqualTo(4321));
+ Assert.That(target.BytesReceived, Is.EqualTo(4321L));
Assert.That(obtained, Is.SameAs(target));
}
@@ -181,7 +210,36 @@ public void SetBytesReceivedDoesNotSetAnythingIfStoppedWithResponseCode()
var obtained = target.SetBytesReceived(4321);
// then
- Assert.That(target.BytesReceived, Is.EqualTo(-1));
+ Assert.That(target.BytesReceived, Is.EqualTo(-1L));
+ Assert.That(obtained, Is.SameAs(target));
+ }
+
+ [Test]
+ public void SetBytesReceivedLongSetsTheNumberOfReceivedBytes()
+ {
+ // given
+ var target = CreateWebRequestTracer().Build();
+
+ // when setting the received bytes
+ var obtained = target.SetBytesReceived(4321L);
+
+ // then
+ Assert.That(target.BytesReceived, Is.EqualTo(4321L));
+ Assert.That(obtained, Is.SameAs(target));
+ }
+
+ [Test]
+ public void SetBytesReceivedLongDoesNotSetAnythingIfStoppedWithResponseCode()
+ {
+ // given
+ var target = CreateWebRequestTracer().Build();
+ target.Stop(200);
+
+ // when setting the received bytes
+ var obtained = target.SetBytesReceived(4321L);
+
+ // then
+ Assert.That(target.BytesReceived, Is.EqualTo(-1L));
Assert.That(obtained, Is.SameAs(target));
}
diff --git a/tests/Dynatrace.OpenKit.Tests/Protocol/BeaconTest.cs b/tests/Dynatrace.OpenKit.Tests/Protocol/BeaconTest.cs
index e2969fb..9406233 100644
--- a/tests/Dynatrace.OpenKit.Tests/Protocol/BeaconTest.cs
+++ b/tests/Dynatrace.OpenKit.Tests/Protocol/BeaconTest.cs
@@ -3193,8 +3193,8 @@ public void AddWebRequest()
// given
var target = CreateBeacon().Build();
- const int sentBytes = 1337;
- const int receivedBytes = 1447;
+ const long sentBytes = 1337;
+ const long receivedBytes = 1447;
const int responseCode = 418;
var tracer = Substitute.For();
tracer.Url.Returns(Url);
@@ -3268,8 +3268,8 @@ public void CanAddSentBytesEqualToZeroToWebRequestTracer()
// given
var target = CreateBeacon().Build();
- const int sentBytes = 0;
- const int receivedBytes = 1447;
+ const long sentBytes = 0;
+ const long receivedBytes = 1447;
const int responseCode = 418;
var tracer = Substitute.For();
tracer.Url.Returns(Url);
@@ -3304,8 +3304,8 @@ public void CannnotAddSentBytesLessThanZeroToWebRequestTracer()
// given
var target = CreateBeacon().Build();
- const int sentBytes = -1;
- const int receivedBytes = 1447;
+ const long sentBytes = -1;
+ const long receivedBytes = 1447;
const int responseCode = 418;
var tracer = Substitute.For();
tracer.Url.Returns(Url);
@@ -3339,8 +3339,8 @@ public void CanAddReceivedBytesEqualToZeroToWebRequestTracer()
// given
var target = CreateBeacon().Build();
- const int sentBytes = 1337;
- const int receivedBytes = 0;
+ const long sentBytes = 1337;
+ const long receivedBytes = 0;
const int responseCode = 418;
var tracer = Substitute.For();
tracer.Url.Returns(Url);
@@ -3375,8 +3375,8 @@ public void CannnotAddReceivedBytesLessThanZeroToWebRequestTracer()
// given
var target = CreateBeacon().Build();
- const int sentBytes = 1337;
- const int receivedBytes = -1;
+ const long sentBytes = 1337;
+ const long receivedBytes = -1;
const int responseCode = 418;
var tracer = Substitute.For();
tracer.Url.Returns(Url);
@@ -3410,8 +3410,8 @@ public void CanAddResponseCodeEqualToZeroToWebRequestTracer()
// given
var target = CreateBeacon().Build();
- const int sentBytes = 1337;
- const int receivedBytes = 1447;
+ const long sentBytes = 1337;
+ const long receivedBytes = 1447;
const int responseCode = 0;
var tracer = Substitute.For();
tracer.Url.Returns(Url);
@@ -3446,8 +3446,8 @@ public void CannnotAddResponseCodeLessThanZeroToWebRequestTracer()
// given
var target = CreateBeacon().Build();
- const int sentBytes = 1337;
- const int receivedBytes = 1447;
+ const long sentBytes = 1337;
+ const long receivedBytes = 1447;
const int responseCode = -1;
var tracer = Substitute.For();
tracer.Url.Returns(Url);