From 8731b7303fcbbd59cf69523dd3c71a7e0a7e53ce Mon Sep 17 00:00:00 2001 From: GraceSolutions Date: Fri, 18 Apr 2025 10:30:58 -0400 Subject: [PATCH] Add verbose logging of API endpoint URLs --- src/PSOPNSenseAPI/PSOPNSenseAPI.psd1 | 2 +- src/PSOPNSenseAPI/Services/DHCPService.cs | 18 ++++++++++-- .../Services/OPNSenseApiClient.cs | 28 +++++++++++++------ .../Services/OPNSenseApiEndpoints.cs | 12 ++++++++ 4 files changed, 47 insertions(+), 13 deletions(-) diff --git a/src/PSOPNSenseAPI/PSOPNSenseAPI.psd1 b/src/PSOPNSenseAPI/PSOPNSenseAPI.psd1 index 9bee7ee..6151518 100644 --- a/src/PSOPNSenseAPI/PSOPNSenseAPI.psd1 +++ b/src/PSOPNSenseAPI/PSOPNSenseAPI.psd1 @@ -3,7 +3,7 @@ RootModule = 'lib\PSOPNSenseAPI.dll' # Version number of this module. - ModuleVersion = '2025.04.16.2230' + ModuleVersion = '2025.04.18.1015' # Supported PSEditions CompatiblePSEditions = @('Desktop', 'Core') diff --git a/src/PSOPNSenseAPI/Services/DHCPService.cs b/src/PSOPNSenseAPI/Services/DHCPService.cs index b455ce2..bce9894 100644 --- a/src/PSOPNSenseAPI/Services/DHCPService.cs +++ b/src/PSOPNSenseAPI/Services/DHCPService.cs @@ -35,6 +35,8 @@ namespace PSOPNSenseAPI.Services _logger.Information("Getting DHCP leases"); var endpoint = _apiEndpoints.GetEndpoint("dhcp.leases.list"); + var fullUrl = _apiEndpoints.GetFullUrl("dhcp.leases.list"); + _logger.Verbose($"API URL: {fullUrl}"); return _apiClient.Get(endpoint); } @@ -48,6 +50,8 @@ namespace PSOPNSenseAPI.Services _logger.Information($"Getting DHCP lease for MAC address {macAddress}"); var endpoint = _apiEndpoints.GetEndpoint("dhcp.leases.getByMac", macAddress); + var fullUrl = _apiEndpoints.GetFullUrl("dhcp.leases.getByMac", macAddress); + _logger.Verbose($"API URL: {fullUrl}"); return _apiClient.Get(endpoint); } @@ -61,6 +65,8 @@ namespace PSOPNSenseAPI.Services _logger.Information($"Deleting DHCP lease for MAC address {macAddress}"); var endpoint = _apiEndpoints.GetEndpoint("dhcp.leases.delete", macAddress); + var fullUrl = _apiEndpoints.GetFullUrl("dhcp.leases.delete", macAddress); + _logger.Verbose($"API URL: {fullUrl}"); return _apiClient.Post(endpoint); } @@ -85,7 +91,9 @@ namespace PSOPNSenseAPI.Services { _logger.Information("Getting DHCP servers"); - var endpoint = "dhcp/service/get"; + var endpoint = "dhcpd/service/get"; + var fullUrl = _apiClient.GetFullUrl(endpoint); + _logger.Verbose($"API URL: {fullUrl}"); return _apiClient.Get(endpoint); } @@ -98,7 +106,9 @@ namespace PSOPNSenseAPI.Services { _logger.Information($"Getting DHCP server for interface {@interface}"); - var endpoint = $"dhcp/service/getServer/{@interface}"; + var endpoint = $"dhcpd/service/getServer/{@interface}"; + var fullUrl = _apiClient.GetFullUrl(endpoint); + _logger.Verbose($"API URL: {fullUrl}"); return _apiClient.Get(endpoint); } @@ -112,7 +122,9 @@ namespace PSOPNSenseAPI.Services { _logger.Information($"Updating DHCP server for interface {@interface}"); - var endpoint = $"dhcp/service/setServer/{@interface}"; + var endpoint = $"dhcpd/service/setServer/{@interface}"; + var fullUrl = _apiClient.GetFullUrl(endpoint); + _logger.Verbose($"API URL: {fullUrl}"); var data = new { server = server }; return _apiClient.Post(endpoint, data); } diff --git a/src/PSOPNSenseAPI/Services/OPNSenseApiClient.cs b/src/PSOPNSenseAPI/Services/OPNSenseApiClient.cs index b2d9221..8d30eae 100644 --- a/src/PSOPNSenseAPI/Services/OPNSenseApiClient.cs +++ b/src/PSOPNSenseAPI/Services/OPNSenseApiClient.cs @@ -2,7 +2,6 @@ using System; using System.Net.Http; using System.Net.Http.Headers; using System.Text; -using System.Threading.Tasks; using Newtonsoft.Json; using PSOPNSenseAPI.Logging; using PSOPNSenseAPI.Models; @@ -43,6 +42,16 @@ namespace PSOPNSenseAPI.Services /// public bool IsConnected { get; private set; } + /// + /// Gets the full URL for the given endpoint + /// + /// The endpoint + /// The full URL + public string GetFullUrl(string endpoint) + { + return $"{BaseUrl}/api/{endpoint.TrimStart('/')}"; + } + /// /// Initializes a new instance of the class /// @@ -92,15 +101,15 @@ namespace PSOPNSenseAPI.Services /// The type to deserialize the response to /// The API endpoint /// The deserialized response - public async Task GetAsync(string endpoint) + public T Get(string endpoint) { var url = $"{BaseUrl}/api/{endpoint.TrimStart('/')}"; _logger.Debug($"GET {url}"); try { - var response = await _httpClient.GetAsync(url); - return await ProcessResponseAsync(response); + var response = _httpClient.GetAsync(url).GetAwaiter().GetResult(); + return ProcessResponse(response); } catch (Exception ex) { @@ -116,7 +125,7 @@ namespace PSOPNSenseAPI.Services /// The API endpoint /// The data to send /// The deserialized response - public async Task PostAsync(string endpoint, object data = null) + public T Post(string endpoint, object data = null) { var url = $"{BaseUrl}/api/{endpoint.TrimStart('/')}"; _logger.Debug($"POST {url}"); @@ -131,8 +140,8 @@ namespace PSOPNSenseAPI.Services content = new StringContent(json, Encoding.UTF8, "application/json"); } - var response = await _httpClient.PostAsync(url, content); - return await ProcessResponseAsync(response); + var response = _httpClient.PostAsync(url, content).GetAwaiter().GetResult(); + return ProcessResponse(response); } catch (Exception ex) { @@ -147,9 +156,9 @@ namespace PSOPNSenseAPI.Services /// The type to deserialize the response to /// The HTTP response /// The deserialized response - private async Task ProcessResponseAsync(HttpResponseMessage response) + private T ProcessResponse(HttpResponseMessage response) { - var content = await response.Content.ReadAsStringAsync(); + var content = response.Content.ReadAsStringAsync().GetAwaiter().GetResult(); _logger.Debug($"Response status: {(int)response.StatusCode} {response.StatusCode}"); _logger.Debug($"Response body: {content}"); @@ -201,3 +210,4 @@ namespace PSOPNSenseAPI.Services } } } + diff --git a/src/PSOPNSenseAPI/Services/OPNSenseApiEndpoints.cs b/src/PSOPNSenseAPI/Services/OPNSenseApiEndpoints.cs index eaa45bb..2654478 100644 --- a/src/PSOPNSenseAPI/Services/OPNSenseApiEndpoints.cs +++ b/src/PSOPNSenseAPI/Services/OPNSenseApiEndpoints.cs @@ -198,6 +198,18 @@ namespace PSOPNSenseAPI.Services return parameters.Length > 0 ? string.Format(endpoint, parameters) : endpoint; } + /// + /// Gets the full URL for the given endpoint key + /// + /// The endpoint key + /// Optional parameters to format into the endpoint + /// The full URL + public string GetFullUrl(string endpointKey, params object[] parameters) + { + var endpoint = GetEndpoint(endpointKey, parameters); + return $"{_apiClient.BaseUrl}/api/{endpoint}"; + } + /// /// Gets the OPNSense version ///