aboutsummaryrefslogtreecommitdiff
path: root/src/Enmarcha.Backend/Services/Geocoding
diff options
context:
space:
mode:
authorAriel Costas Guerrero <ariel@costas.dev>2026-01-25 21:05:33 +0100
committerAriel Costas Guerrero <ariel@costas.dev>2026-01-25 21:06:01 +0100
commitf9b7af64550be1320acc84d60184e8c8ce873b94 (patch)
treed43e995319b4a3856aa929848b9ad807afb1cf86 /src/Enmarcha.Backend/Services/Geocoding
parentc89353dede64bd2c21c0a1ebd6b6de6282998326 (diff)
feat: Add OpenTelemetry instrumentation and configuration for enhanced telemetry tracking
Diffstat (limited to 'src/Enmarcha.Backend/Services/Geocoding')
-rw-r--r--src/Enmarcha.Backend/Services/Geocoding/GeoapifyGeocodingService.cs20
1 files changed, 18 insertions, 2 deletions
diff --git a/src/Enmarcha.Backend/Services/Geocoding/GeoapifyGeocodingService.cs b/src/Enmarcha.Backend/Services/Geocoding/GeoapifyGeocodingService.cs
index d6cf5f6..86386e8 100644
--- a/src/Enmarcha.Backend/Services/Geocoding/GeoapifyGeocodingService.cs
+++ b/src/Enmarcha.Backend/Services/Geocoding/GeoapifyGeocodingService.cs
@@ -32,13 +32,19 @@ public class GeoapifyGeocodingService : IGeocodingService
public async Task<List<PlannerSearchResult>> GetAutocompleteAsync(string query)
{
+ using var activity = Telemetry.Source.StartActivity("GeoapifyAutocomplete");
+ activity?.SetTag("query", query);
+
if (string.IsNullOrWhiteSpace(query))
{
return [];
}
var cacheKey = $"nominatim_autocomplete_{query.ToLowerInvariant()}";
- if (_cache.TryGetValue(cacheKey, out List<PlannerSearchResult>? cachedResults) && cachedResults != null)
+ var cacheHit = _cache.TryGetValue(cacheKey, out List<PlannerSearchResult>? cachedResults);
+ activity?.SetTag("cache.hit", cacheHit);
+
+ if (cacheHit && cachedResults != null)
{
return cachedResults;
}
@@ -55,11 +61,13 @@ public class GeoapifyGeocodingService : IGeocodingService
.Select(MapToPlannerSearchResult)
.ToList() ?? [];
+ activity?.SetTag("results.count", results.Count);
_cache.Set(cacheKey, results, TimeSpan.FromMinutes(60));
return results;
}
catch (Exception ex)
{
+ activity?.SetStatus(System.Diagnostics.ActivityStatusCode.Error, ex.Message);
_logger.LogError(ex, "Error fetching Geoapify autocomplete results from {Url}", url);
return new List<PlannerSearchResult>();
}
@@ -67,8 +75,15 @@ public class GeoapifyGeocodingService : IGeocodingService
public async Task<PlannerSearchResult?> GetReverseGeocodeAsync(double lat, double lon)
{
+ using var activity = Telemetry.Source.StartActivity("GeoapifyReverseGeocode");
+ activity?.SetTag("lat", lat);
+ activity?.SetTag("lon", lon);
+
var cacheKey = $"nominatim_reverse_{lat:F5}_{lon:F5}";
- if (_cache.TryGetValue(cacheKey, out PlannerSearchResult? cachedResult) && cachedResult != null)
+ var cacheHit = _cache.TryGetValue(cacheKey, out PlannerSearchResult? cachedResult);
+ activity?.SetTag("cache.hit", cacheHit);
+
+ if (cacheHit && cachedResult != null)
{
return cachedResult;
}
@@ -88,6 +103,7 @@ public class GeoapifyGeocodingService : IGeocodingService
}
catch (Exception ex)
{
+ activity?.SetStatus(System.Diagnostics.ActivityStatusCode.Error, ex.Message);
_logger.LogError(ex, "Error fetching Geoapify reverse geocode results from {Url}", url);
return null;
}