From f97f8d6cd19a9c600b4371f93ba65e7adb685cc9 Mon Sep 17 00:00:00 2001
From: Andri Joos <andri@joos.io>
Date: Tue, 26 Nov 2024 10:55:30 +0100
Subject: [PATCH] add PotatoMarketplaceMetrics

---
 .../BackgroundServices/PrometheusService.cs   |  4 +++-
 Frontend/Metrics/PotatoMarketplaceMetrics.cs  | 19 +++++++++++++++++++
 Frontend/Program.cs                           |  1 +
 3 files changed, 23 insertions(+), 1 deletion(-)
 create mode 100644 Frontend/Metrics/PotatoMarketplaceMetrics.cs

diff --git a/Frontend/BackgroundServices/PrometheusService.cs b/Frontend/BackgroundServices/PrometheusService.cs
index e0f4257..9b3bf54 100644
--- a/Frontend/BackgroundServices/PrometheusService.cs
+++ b/Frontend/BackgroundServices/PrometheusService.cs
@@ -17,7 +17,8 @@ public class PrometheusService : BackgroundService
         ILogger<PrometheusService> logger,
         Erc20TokenMetrics tokenMetrics,
         EthMetrics ethMetrics,
-        PotatoStorageMetrics potatoStorageMetrics
+        PotatoStorageMetrics potatoStorageMetrics,
+        PotatoMarketplaceMetrics potatoMarketplaceMetrics
     )
     {
         _logger = logger;
@@ -33,6 +34,7 @@ public class PrometheusService : BackgroundService
         _erc20TokenMetrics.CreateMetrics();
         _ethMetrics.CreateMetrics();
         potatoStorageMetrics.CreateMetrics();
+        potatoMarketplaceMetrics.CreateMetrics();
     }
 
     protected async override Task ExecuteAsync(CancellationToken stoppingToken)
diff --git a/Frontend/Metrics/PotatoMarketplaceMetrics.cs b/Frontend/Metrics/PotatoMarketplaceMetrics.cs
new file mode 100644
index 0000000..57f839e
--- /dev/null
+++ b/Frontend/Metrics/PotatoMarketplaceMetrics.cs
@@ -0,0 +1,19 @@
+using System.Diagnostics.Metrics;
+using Frontend.Marketplaces.Interfaces;
+
+namespace Frontend.Metrics;
+
+public class PotatoMarketplaceMetrics(
+    IPotatoMarketPlace marketplace,
+    IMeterFactory meterFactory
+)
+{
+    private readonly IPotatoMarketPlace marketplace = marketplace;
+    private readonly IMeterFactory MeterFactory = meterFactory;
+
+    public void CreateMetrics()
+    {
+        var meter = MeterFactory.Create("RoestiCoin");
+        meter.CreateObservableGauge("Marketplace.Potato.Price", () => marketplace.PotatoPrice, unit: "CHF");
+    }
+}
diff --git a/Frontend/Program.cs b/Frontend/Program.cs
index 2bf5552..1b91a6c 100644
--- a/Frontend/Program.cs
+++ b/Frontend/Program.cs
@@ -30,6 +30,7 @@ builder.Services.AddHostedService<PrometheusService>();
 builder.Services.AddSingleton<Erc20TokenMetrics>();
 builder.Services.AddSingleton<EthMetrics>();
 builder.Services.AddSingleton<PotatoStorageMetrics>();
+builder.Services.AddSingleton<PotatoMarketplaceMetrics>();
 builder.Services.AddSingleton<IPotatoMarketPlace>(sp => new PotatoMarketplaceMock());
 
 builder.Services.AddSingleton(provider => new TokenClient(
-- 
GitLab