From 5b0e6eefec7c174109950a1af5a58b42c01afc41 Mon Sep 17 00:00:00 2001 From: tjoubert Date: Mon, 21 Nov 2022 08:20:41 +0400 Subject: [PATCH 1/6] Added driver info header in HttpApiTransport.ApplyHeaders() --- arangodb-net-standard/CustomHttpHeaders.cs | 4 +++ .../Transport/Http/HttpApiTransport.cs | 31 ++++++++++++++----- .../Transport/IApiClientTransport.cs | 6 ++++ 3 files changed, 33 insertions(+), 8 deletions(-) diff --git a/arangodb-net-standard/CustomHttpHeaders.cs b/arangodb-net-standard/CustomHttpHeaders.cs index a2935323..ada9b7f1 100644 --- a/arangodb-net-standard/CustomHttpHeaders.cs +++ b/arangodb-net-standard/CustomHttpHeaders.cs @@ -14,5 +14,9 @@ public static class CustomHttpHeaders /// Introduced in ArangoDB 3.10. /// public const string ReadFromFollowersHeader = "x-arango-allow-dirty-read"; + /// + /// The header string used for Driver Info Header + /// + public const string DriverInfoHeader = "x-arango-driver"; } } diff --git a/arangodb-net-standard/Transport/Http/HttpApiTransport.cs b/arangodb-net-standard/Transport/Http/HttpApiTransport.cs index b1f52392..a5769c14 100644 --- a/arangodb-net-standard/Transport/Http/HttpApiTransport.cs +++ b/arangodb-net-standard/Transport/Http/HttpApiTransport.cs @@ -3,6 +3,7 @@ using System.Net; using System.Net.Http; using System.Net.Http.Headers; +using System.Reflection; using System.Security.Authentication; using System.Security.Cryptography.X509Certificates; using System.Text; @@ -31,6 +32,11 @@ public class HttpApiTransport : IApiClientTransport [HttpContentType.VPack] = "application/x-velocypack" }; + /// + /// Flags containing specific driver information. + /// + public List DriverFlags { get; set; } + /// /// Create from an existing instance. /// @@ -48,7 +54,8 @@ public HttpApiTransport(HttpClient client, HttpContentType contentType) /// /// Object containing a dictionary of Header keys and values. /// The header to update. - private static void ApplyHeaders(WebHeaderCollection webHeaderCollection, HttpHeaders headers) + /// Driver flags that are passed to the server. + private static void ApplyHeaders(WebHeaderCollection webHeaderCollection, HttpHeaders headers, List driverFlags = null) { if (webHeaderCollection != null) { @@ -57,6 +64,14 @@ private static void ApplyHeaders(WebHeaderCollection webHeaderCollection, HttpHe headers.Add(key, webHeaderCollection[key]); } } + //build and add driver info header + string flags = string.Empty; + if (driverFlags != null) + { + flags = string.Join(";",driverFlags); + } + var assemblyInfo = Assembly.GetCallingAssembly().GetName(); + headers.Add(CustomHttpHeaders.DriverInfoHeader, $"{assemblyInfo.Name}/{assemblyInfo.Version} ({flags})"); } /// @@ -284,7 +299,7 @@ public async Task DeleteAsync( CancellationToken token = default) { var request = new HttpRequestMessage(HttpMethod.Delete, requestUri); - ApplyHeaders(webHeaderCollection, request.Headers); + ApplyHeaders(webHeaderCollection, request.Headers,DriverFlags); var response = await _client.SendAsync(request, token).ConfigureAwait(false); return new HttpApiClientResponse(response); } @@ -309,7 +324,7 @@ public async Task DeleteAsync( }; request.Content.Headers.ContentType = new MediaTypeHeaderValue(_contentTypeMap[_contentType]); - ApplyHeaders(webHeaderCollection, request.Content.Headers); + ApplyHeaders(webHeaderCollection, request.Content.Headers, DriverFlags); var response = await _client.SendAsync(request, token).ConfigureAwait(false); return new HttpApiClientResponse(response); } @@ -330,7 +345,7 @@ public async Task PostAsync( { var httpContent = new ByteArrayContent(content); httpContent.Headers.ContentType = new MediaTypeHeaderValue(_contentTypeMap[_contentType]); - ApplyHeaders(webHeaderCollection, httpContent.Headers); + ApplyHeaders(webHeaderCollection, httpContent.Headers, DriverFlags); var response = await _client.PostAsync(requestUri, httpContent, token).ConfigureAwait(false); return new HttpApiClientResponse(response); } @@ -351,7 +366,7 @@ public async Task PutAsync( { var httpContent = new ByteArrayContent(content); httpContent.Headers.ContentType = new MediaTypeHeaderValue(_contentTypeMap[_contentType]); - ApplyHeaders(webHeaderCollection, httpContent.Headers); + ApplyHeaders(webHeaderCollection, httpContent.Headers, DriverFlags); var response = await _client.PutAsync(requestUri, httpContent, token).ConfigureAwait(false); return new HttpApiClientResponse(response); } @@ -369,7 +384,7 @@ public async Task GetAsync( CancellationToken token = default) { var request = new HttpRequestMessage(HttpMethod.Get, requestUri); - ApplyHeaders(webHeaderCollection, request.Headers); + ApplyHeaders(webHeaderCollection, request.Headers, DriverFlags); var response = await _client.SendAsync(request, token).ConfigureAwait(false); return new HttpApiClientResponse(response); } @@ -395,7 +410,7 @@ public async Task PatchAsync( }; request.Content.Headers.ContentType = new MediaTypeHeaderValue(_contentTypeMap[_contentType]); - ApplyHeaders(webHeaderCollection, request.Content.Headers); + ApplyHeaders(webHeaderCollection, request.Content.Headers, DriverFlags); var response = await _client.SendAsync(request, token).ConfigureAwait(false); return new HttpApiClientResponse(response); } @@ -413,7 +428,7 @@ public async Task HeadAsync( CancellationToken token = default) { var request = new HttpRequestMessage(HttpMethod.Head, requestUri); - ApplyHeaders(webHeaderCollection, request.Headers); + ApplyHeaders(webHeaderCollection, request.Headers, DriverFlags); var response = await _client.SendAsync(request, token); return new HttpApiClientResponse(response); } diff --git a/arangodb-net-standard/Transport/IApiClientTransport.cs b/arangodb-net-standard/Transport/IApiClientTransport.cs index 30aec861..47cf2a84 100644 --- a/arangodb-net-standard/Transport/IApiClientTransport.cs +++ b/arangodb-net-standard/Transport/IApiClientTransport.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Net; using System.Threading; using System.Threading.Tasks; @@ -10,6 +11,11 @@ namespace ArangoDBNetStandard.Transport /// public interface IApiClientTransport : IDisposable { + /// + /// Flags containing specific driver information. + /// + List DriverFlags { get; set; } + /// /// Send a POST request. /// From a5416f014f4e596fa8873ba32b7e3ad62d14e520 Mon Sep 17 00:00:00 2001 From: tjoubert Date: Tue, 29 Nov 2022 12:49:20 +0400 Subject: [PATCH 2/6] Changed type from List to IEnumerable --- arangodb-net-standard/Transport/IApiClientTransport.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arangodb-net-standard/Transport/IApiClientTransport.cs b/arangodb-net-standard/Transport/IApiClientTransport.cs index 47cf2a84..fb395a2c 100644 --- a/arangodb-net-standard/Transport/IApiClientTransport.cs +++ b/arangodb-net-standard/Transport/IApiClientTransport.cs @@ -14,7 +14,7 @@ public interface IApiClientTransport : IDisposable /// /// Flags containing specific driver information. /// - List DriverFlags { get; set; } + IEnumerable DriverFlags { get; set; } /// /// Send a POST request. From 8047e4c1d590a7424aacecbae0a805b078b77f55 Mon Sep 17 00:00:00 2001 From: tjoubert Date: Tue, 29 Nov 2022 12:51:32 +0400 Subject: [PATCH 3/6] Changed type from List to IEnumerable --- arangodb-net-standard/Transport/Http/HttpApiTransport.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arangodb-net-standard/Transport/Http/HttpApiTransport.cs b/arangodb-net-standard/Transport/Http/HttpApiTransport.cs index a5769c14..7a220bb8 100644 --- a/arangodb-net-standard/Transport/Http/HttpApiTransport.cs +++ b/arangodb-net-standard/Transport/Http/HttpApiTransport.cs @@ -35,7 +35,7 @@ public class HttpApiTransport : IApiClientTransport /// /// Flags containing specific driver information. /// - public List DriverFlags { get; set; } + public IEnumerable DriverFlags { get; set; } /// /// Create from an existing instance. From 51bdecff510a85b80b2bf416aafa355c739e4568 Mon Sep 17 00:00:00 2001 From: tjoubert Date: Tue, 29 Nov 2022 12:54:12 +0400 Subject: [PATCH 4/6] Changed type of driverFlags from List to IEnumerable in ApplyHeaders --- arangodb-net-standard/Transport/Http/HttpApiTransport.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arangodb-net-standard/Transport/Http/HttpApiTransport.cs b/arangodb-net-standard/Transport/Http/HttpApiTransport.cs index 7a220bb8..569f152e 100644 --- a/arangodb-net-standard/Transport/Http/HttpApiTransport.cs +++ b/arangodb-net-standard/Transport/Http/HttpApiTransport.cs @@ -55,7 +55,7 @@ public HttpApiTransport(HttpClient client, HttpContentType contentType) /// Object containing a dictionary of Header keys and values. /// The header to update. /// Driver flags that are passed to the server. - private static void ApplyHeaders(WebHeaderCollection webHeaderCollection, HttpHeaders headers, List driverFlags = null) + private static void ApplyHeaders(WebHeaderCollection webHeaderCollection, HttpHeaders headers, IEnumerable driverFlags = null) { if (webHeaderCollection != null) { From 5a4206a4cafd92e432d1cc59e9ea9907cac86fa0 Mon Sep 17 00:00:00 2001 From: tjoubert Date: Wed, 30 Nov 2022 14:30:14 +0400 Subject: [PATCH 5/6] Added DriverConstants class --- arangodb-net-standard/DriverConstants.cs | 17 +++++++++++++++++ .../Transport/Http/HttpApiTransport.cs | 4 ++-- 2 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 arangodb-net-standard/DriverConstants.cs diff --git a/arangodb-net-standard/DriverConstants.cs b/arangodb-net-standard/DriverConstants.cs new file mode 100644 index 00000000..ab45abc4 --- /dev/null +++ b/arangodb-net-standard/DriverConstants.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace ArangoDBNetStandard +{ + /// + /// Global constants to be used throughout the driver + /// + public static class DriverConstants + { + /// + /// Name of the driver + /// + public const string DRIVER_NAME = "arangodb-net-standard"; + } +} diff --git a/arangodb-net-standard/Transport/Http/HttpApiTransport.cs b/arangodb-net-standard/Transport/Http/HttpApiTransport.cs index 569f152e..4ac57677 100644 --- a/arangodb-net-standard/Transport/Http/HttpApiTransport.cs +++ b/arangodb-net-standard/Transport/Http/HttpApiTransport.cs @@ -68,10 +68,10 @@ private static void ApplyHeaders(WebHeaderCollection webHeaderCollection, HttpHe string flags = string.Empty; if (driverFlags != null) { - flags = string.Join(";",driverFlags); + flags = string.Join(";", driverFlags); } var assemblyInfo = Assembly.GetCallingAssembly().GetName(); - headers.Add(CustomHttpHeaders.DriverInfoHeader, $"{assemblyInfo.Name}/{assemblyInfo.Version} ({flags})"); + headers.Add(CustomHttpHeaders.DriverInfoHeader, $"{DriverConstants.DRIVER_NAME}/{assemblyInfo.Version} ({flags})"); } /// From 3e968e41487dc47a7e047931f9874ad31d4e48c8 Mon Sep 17 00:00:00 2001 From: tjoubert Date: Tue, 6 Dec 2022 21:54:33 +0400 Subject: [PATCH 6/6] Renamed DriverConstants.DRIVER_NAME to DriverConstants.DriverName --- arangodb-net-standard/DriverConstants.cs | 2 +- arangodb-net-standard/Transport/Http/HttpApiTransport.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/arangodb-net-standard/DriverConstants.cs b/arangodb-net-standard/DriverConstants.cs index ab45abc4..b66e6629 100644 --- a/arangodb-net-standard/DriverConstants.cs +++ b/arangodb-net-standard/DriverConstants.cs @@ -12,6 +12,6 @@ public static class DriverConstants /// /// Name of the driver /// - public const string DRIVER_NAME = "arangodb-net-standard"; + public const string DriverName = "arangodb-net-standard"; } } diff --git a/arangodb-net-standard/Transport/Http/HttpApiTransport.cs b/arangodb-net-standard/Transport/Http/HttpApiTransport.cs index 4ac57677..94b2b71e 100644 --- a/arangodb-net-standard/Transport/Http/HttpApiTransport.cs +++ b/arangodb-net-standard/Transport/Http/HttpApiTransport.cs @@ -71,7 +71,7 @@ private static void ApplyHeaders(WebHeaderCollection webHeaderCollection, HttpHe flags = string.Join(";", driverFlags); } var assemblyInfo = Assembly.GetCallingAssembly().GetName(); - headers.Add(CustomHttpHeaders.DriverInfoHeader, $"{DriverConstants.DRIVER_NAME}/{assemblyInfo.Version} ({flags})"); + headers.Add(CustomHttpHeaders.DriverInfoHeader, $"{DriverConstants.DriverName}/{assemblyInfo.Version} ({flags})"); } ///