diff --git a/CryptoExchange.Net.UnitTests/TestImplementations/TestRestClient.cs b/CryptoExchange.Net.UnitTests/TestImplementations/TestRestClient.cs index 870c833..7189508 100644 --- a/CryptoExchange.Net.UnitTests/TestImplementations/TestRestClient.cs +++ b/CryptoExchange.Net.UnitTests/TestImplementations/TestRestClient.cs @@ -47,7 +47,7 @@ namespace CryptoExchange.Net.UnitTests.TestImplementations request.Setup(c => c.GetResponse(It.IsAny())).Returns(Task.FromResult(response.Object)); var factory = Mock.Get(RequestFactory); - factory.Setup(c => c.Create(It.IsAny(), It.IsAny())) + factory.Setup(c => c.Create(It.IsAny(), It.IsAny(), It.IsAny())) .Returns(request.Object); } @@ -60,7 +60,7 @@ namespace CryptoExchange.Net.UnitTests.TestImplementations request.Setup(c => c.GetResponse(It.IsAny())).Throws(we); var factory = Mock.Get(RequestFactory); - factory.Setup(c => c.Create(It.IsAny(), It.IsAny())) + factory.Setup(c => c.Create(It.IsAny(), It.IsAny(), It.IsAny())) .Returns(request.Object); } @@ -80,7 +80,7 @@ namespace CryptoExchange.Net.UnitTests.TestImplementations request.Setup(c => c.GetResponse(It.IsAny())).Returns(Task.FromResult(response.Object)); var factory = Mock.Get(RequestFactory); - factory.Setup(c => c.Create(It.IsAny(), It.IsAny())) + factory.Setup(c => c.Create(It.IsAny(), It.IsAny(), It.IsAny())) .Returns(request.Object); } diff --git a/CryptoExchange.Net/BaseClient.cs b/CryptoExchange.Net/BaseClient.cs index 8088790..fcdf7e8 100644 --- a/CryptoExchange.Net/BaseClient.cs +++ b/CryptoExchange.Net/BaseClient.cs @@ -153,6 +153,7 @@ namespace CryptoExchange.Net /// The data to deserialize /// Whether or not the parsing should be checked for missing properties (will output data to the logging if log verbosity is Debug) /// A specific serializer to use + /// A request identifier /// protected CallResult Deserialize(JToken obj, bool? checkObject = null, JsonSerializer? serializer = null, int? requestId = null) { @@ -210,8 +211,9 @@ namespace CryptoExchange.Net /// The stream to deserialize /// A specific serializer to use /// Id of the request + /// Milliseconds reponse time /// - protected async Task> Deserialize(Stream stream, JsonSerializer? serializer = null, int? requestId = null) + protected async Task> Deserialize(Stream stream, JsonSerializer? serializer = null, int? requestId = null, long? elapsedMilliseconds = null) { if (serializer == null) serializer = defaultSerializer; @@ -222,7 +224,7 @@ namespace CryptoExchange.Net if (log.Level == LogVerbosity.Debug) { var data = await reader.ReadToEndAsync().ConfigureAwait(false); - log.Write(LogVerbosity.Debug, $"{(requestId != null ? $"[{requestId}] ": "")}Data received: {data}"); + log.Write(LogVerbosity.Debug, $"{(requestId != null ? $"[{requestId}] ": "")}Response received{(elapsedMilliseconds != null ? $" in {elapsedMilliseconds}" : " ")}ms: {data}"); return Deserialize(data, null, serializer, requestId); } diff --git a/CryptoExchange.Net/CryptoExchange.Net.xml b/CryptoExchange.Net/CryptoExchange.Net.xml index a171b30..e495b2c 100644 --- a/CryptoExchange.Net/CryptoExchange.Net.xml +++ b/CryptoExchange.Net/CryptoExchange.Net.xml @@ -283,9 +283,10 @@ The data to deserialize Whether or not the parsing should be checked for missing properties (will output data to the logging if log verbosity is Debug) A specific serializer to use + A request identifier - + Deserialize a stream into an object @@ -293,6 +294,7 @@ The stream to deserialize A specific serializer to use Id of the request + Milliseconds reponse time diff --git a/CryptoExchange.Net/RestClient.cs b/CryptoExchange.Net/RestClient.cs index 11b07d8..6612137 100644 --- a/CryptoExchange.Net/RestClient.cs +++ b/CryptoExchange.Net/RestClient.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.IO; using System.Linq; @@ -213,7 +214,9 @@ namespace CryptoExchange.Net try { TotalRequestsMade++; + var sw = Stopwatch.StartNew(); var response = await request.GetResponse(cancellationToken).ConfigureAwait(false); + sw.Stop(); var statusCode = response.StatusCode; var headers = response.ResponseHeaders; var responseStream = await response.GetResponseStream().ConfigureAwait(false); @@ -225,7 +228,7 @@ namespace CryptoExchange.Net var data = await reader.ReadToEndAsync().ConfigureAwait(false); responseStream.Close(); response.Close(); - log.Write(LogVerbosity.Debug, $"[{request.RequestId}] Data received: {data}"); + log.Write(LogVerbosity.Debug, $"[{request.RequestId}] Response received in {sw.ElapsedMilliseconds}ms: {data}"); var parseResult = ValidateJson(data); if (!parseResult.Success) @@ -239,7 +242,7 @@ namespace CryptoExchange.Net } else { - var desResult = await Deserialize(responseStream, null, request.RequestId).ConfigureAwait(false); + var desResult = await Deserialize(responseStream, null, request.RequestId, sw.ElapsedMilliseconds).ConfigureAwait(false); responseStream.Close(); response.Close();