From 910d25159a2d8f3a9ddcce4ef8cb04ad8b4e74d3 Mon Sep 17 00:00:00 2001 From: Richard Date: Tue, 7 Jul 2026 09:45:51 +0200 Subject: [PATCH] Add tracking for analyzed traders and add crawling configuration to appsettings.json --- .../Interfaces/IPlatformStatisticsService.cs | 2 ++ .../Services/PlatformStatisticsService.cs | 6 ++++++ src/Predictalytics.WinFormsHost/appsettings.json | 11 +++++++++++ src/Predictalytics.Worker/Services/DiscoveryWorker.cs | 5 +++++ .../Services/MarketSyncWorker.cs | 5 +++++ src/Predictalytics.Worker/Services/ReportingWorker.cs | 4 ++-- .../Services/TradeHistoryWorker.cs | 10 ++++++++++ .../Services/TraderAnalyticsWorker.cs | 6 ++++++ 8 files changed, 47 insertions(+), 2 deletions(-) diff --git a/src/Predictalytics.Application/Interfaces/IPlatformStatisticsService.cs b/src/Predictalytics.Application/Interfaces/IPlatformStatisticsService.cs index 0b3ed78..1060b1f 100644 --- a/src/Predictalytics.Application/Interfaces/IPlatformStatisticsService.cs +++ b/src/Predictalytics.Application/Interfaces/IPlatformStatisticsService.cs @@ -8,6 +8,7 @@ public interface IPlatformStatisticsService void TrackTraderDiscovery(PlatformType platform, int count = 1); void TrackTradeActivity(PlatformType platform, int count = 1); void TrackDuplicateError(PlatformType platform, int count = 1); + void TrackTradersAnalyzed(PlatformType platform, int count = 1); Dictionary GetAndResetStats(); } @@ -18,4 +19,5 @@ public class PlatformStats public int TradersDiscovered { get; set; } public int TradesProcessed { get; set; } public int DuplicateErrors { get; set; } + public int TradersAnalyzed { get; set; } } diff --git a/src/Predictalytics.Application/Services/PlatformStatisticsService.cs b/src/Predictalytics.Application/Services/PlatformStatisticsService.cs index e309ff2..219ed3c 100644 --- a/src/Predictalytics.Application/Services/PlatformStatisticsService.cs +++ b/src/Predictalytics.Application/Services/PlatformStatisticsService.cs @@ -32,6 +32,12 @@ public class PlatformStatisticsService : IPlatformStatisticsService lock (stats) stats.DuplicateErrors += count; } + public void TrackTradersAnalyzed(PlatformType platform, int count = 1) + { + var stats = _stats.GetOrAdd(platform, _ => new PlatformStats()); + lock (stats) stats.TradersAnalyzed += count; + } + public Dictionary GetAndResetStats() { var result = new Dictionary(); diff --git a/src/Predictalytics.WinFormsHost/appsettings.json b/src/Predictalytics.WinFormsHost/appsettings.json index e33a6a8..5a3b75a 100644 --- a/src/Predictalytics.WinFormsHost/appsettings.json +++ b/src/Predictalytics.WinFormsHost/appsettings.json @@ -17,5 +17,16 @@ "BaseUrl": "https://openrouter.ai/api/v1", "DefaultModel": "google/gemini-flash-1.5", "ManualAnalysisModel": "anthropic/claude-3-opus" + }, + "PlatformSettings": { + "Polymarket": { + "EnableCrawling": true + }, + "Limitless": { + "EnableCrawling": false + }, + "Azuro": { + "EnableCrawling": false + } } } diff --git a/src/Predictalytics.Worker/Services/DiscoveryWorker.cs b/src/Predictalytics.Worker/Services/DiscoveryWorker.cs index 2dda87f..50649de 100644 --- a/src/Predictalytics.Worker/Services/DiscoveryWorker.cs +++ b/src/Predictalytics.Worker/Services/DiscoveryWorker.cs @@ -3,6 +3,7 @@ using Predictalytics.Domain.Enums; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Configuration; namespace Predictalytics.Worker.Services; @@ -33,6 +34,10 @@ public class DiscoveryWorker : BackgroundService // Run discovery for all implemented platforms foreach (var platform in new[] { PlatformType.Polymarket, PlatformType.Limitless }) { + var config = scope.ServiceProvider.GetRequiredService(); + bool isEnabled = config.GetValue($"PlatformSettings:{platform}:EnableCrawling", platform == PlatformType.Polymarket); + if (!isEnabled) continue; + try { if (stoppingToken.IsCancellationRequested) break; diff --git a/src/Predictalytics.Worker/Services/MarketSyncWorker.cs b/src/Predictalytics.Worker/Services/MarketSyncWorker.cs index 99fac0c..9d6e007 100644 --- a/src/Predictalytics.Worker/Services/MarketSyncWorker.cs +++ b/src/Predictalytics.Worker/Services/MarketSyncWorker.cs @@ -5,6 +5,7 @@ using Predictalytics.Infrastructure.Logging; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Configuration; namespace Predictalytics.Worker.Services; @@ -37,6 +38,10 @@ public class MarketSyncWorker : BackgroundService foreach (var p in platformProviders.Where(x => x.IsImplemented)) { + var config = _services.GetRequiredService(); + bool isEnabled = config.GetValue($"PlatformSettings:{p.PlatformName}:EnableCrawling", p.Platform == PlatformType.Polymarket); + if (!isEnabled) continue; + try { if (stoppingToken.IsCancellationRequested) break; diff --git a/src/Predictalytics.Worker/Services/ReportingWorker.cs b/src/Predictalytics.Worker/Services/ReportingWorker.cs index fe84fba..47dcefb 100644 --- a/src/Predictalytics.Worker/Services/ReportingWorker.cs +++ b/src/Predictalytics.Worker/Services/ReportingWorker.cs @@ -53,8 +53,8 @@ public class ReportingWorker : BackgroundService foreach (var (platform, stats) in statsMap) { var dupStr = stats.DuplicateErrors > 0 ? $" | Duplikatfehler: {stats.DuplicateErrors}" : ""; - _logger.LogWarning("[{Platform}] Markets: {M} | New Traders: {T} | Activities: {A}{D}", - platform, stats.MarketsSynced, stats.TradersDiscovered, stats.TradesProcessed, dupStr); + _logger.LogWarning("[{Platform}] Markets: {M} | New Traders: {T} | Analyzed: {An} | Activities: {A}{D}", + platform, stats.MarketsSynced, stats.TradersDiscovered, stats.TradersAnalyzed, stats.TradesProcessed, dupStr); } _logger.LogWarning("------------------------------------------------"); diff --git a/src/Predictalytics.Worker/Services/TradeHistoryWorker.cs b/src/Predictalytics.Worker/Services/TradeHistoryWorker.cs index 7b223a1..cb39987 100644 --- a/src/Predictalytics.Worker/Services/TradeHistoryWorker.cs +++ b/src/Predictalytics.Worker/Services/TradeHistoryWorker.cs @@ -5,6 +5,7 @@ using Predictalytics.Infrastructure.Logging; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Configuration; namespace Predictalytics.Worker.Services; @@ -96,6 +97,15 @@ public class TradeHistoryWorker : BackgroundService var provider = providers.FirstOrDefault(p => p.Platform == trader.Platform && p.IsImplemented); if (provider == null) return; + var config = scope.ServiceProvider.GetRequiredService(); + bool isEnabled = config.GetValue($"PlatformSettings:{provider.PlatformName}:EnableCrawling", provider.Platform == PlatformType.Polymarket); + if (!isEnabled) + { + trader.LastPolledAt = DateTime.UtcNow; + await traderRepo.UpdateAsync(trader, ct); + return; + } + using var platformCtx = PlatformLogContext.Push(provider.PlatformName); await rateLimiter.WaitAsync(trader.Platform, ct); diff --git a/src/Predictalytics.Worker/Services/TraderAnalyticsWorker.cs b/src/Predictalytics.Worker/Services/TraderAnalyticsWorker.cs index 83daf29..855c1d6 100644 --- a/src/Predictalytics.Worker/Services/TraderAnalyticsWorker.cs +++ b/src/Predictalytics.Worker/Services/TraderAnalyticsWorker.cs @@ -110,6 +110,12 @@ public class TraderAnalyticsWorker : BackgroundService } trader.LastAnalyzedAt = DateTime.UtcNow; await traderRepo.UpdateAsync(trader, ct); + + var statsService = traderScope.ServiceProvider.GetService(); + if (statsService != null) + { + statsService.TrackTradersAnalyzed(trader.Platform, 1); + } } if (activeJob != null && activeJob.TraderId == id)