Fix worker pagination, apply Analytics fixes, add analyze backlog endpoint
This commit is contained in:
@@ -62,12 +62,17 @@ public class TraderAnalyticsWorker : BackgroundService
|
||||
else
|
||||
{
|
||||
var db = scope.ServiceProvider.GetRequiredService<AppDbContext>();
|
||||
// Find traders who have never been analyzed, or whose last analysis was before their latest trade.
|
||||
// Bug 5 Fix: Add 30-minute cooldown to prevent CPU looping.
|
||||
var cooldown = DateTime.UtcNow.AddMinutes(-30);
|
||||
|
||||
// Find traders who have never been analyzed, or whose last analysis was before their latest trade.
|
||||
// Include Resolution-Trigger: Traders with open positions in resolved markets.
|
||||
traderIds = await db.Traders
|
||||
.Where(t => t.LastAnalyzedAt == null ||
|
||||
(t.LastAnalyzedAt < cooldown && t.Trades.Any(tr => tr.ExecutedAt > t.LastAnalyzedAt)))
|
||||
.Where(t =>
|
||||
t.LastAnalyzedAt == null ||
|
||||
(t.LastAnalyzedAt < cooldown && t.LastTradesUpdatedAt != null && t.LastTradesUpdatedAt > t.LastAnalyzedAt) ||
|
||||
(t.LastAnalyzedAt < cooldown && t.Positions.Any(p => p.SharesHeld > 0 && p.MarketOutcome != null && p.MarketOutcome.Market != null && p.MarketOutcome.Market.IsResolved))
|
||||
)
|
||||
.OrderBy(t => t.LastAnalyzedAt == null ? 0 : 1)
|
||||
.ThenBy(t => t.LastAnalyzedAt)
|
||||
.Select(t => t.Id)
|
||||
@@ -111,14 +116,21 @@ public class TraderAnalyticsWorker : BackgroundService
|
||||
|
||||
var analyticsObj = trader.Analytics ?? new Predictalytics.Domain.Entities.TraderAnalytics { TraderId = trader.Id };
|
||||
// Persist advanced copyability and quality scores derived from tape replay
|
||||
analyticsObj.CopytradingScore = estScores.CopyabilityScore;
|
||||
analyticsObj.CopytradingScore = estScores.CombinedScore;
|
||||
analyticsObj.CopytradingQualityScore = estScores.QualityScore;
|
||||
analyticsObj.CopytradingCopyabilityScore = estScores.CopyabilityScore;
|
||||
|
||||
trader.Analytics = analyticsObj;
|
||||
|
||||
// Only stamp if there were actually trades to analyze
|
||||
trader.LastAnalyzedAt = DateTime.UtcNow;
|
||||
await traderRepo.UpdateAsync(trader, ct);
|
||||
}
|
||||
else if (trader.LastAnalyzedAt == null)
|
||||
{
|
||||
// If it's a completely new trader with no trades, we still don't stamp LastAnalyzedAt
|
||||
// so it remains null until the TradeHistoryWorker pulls trades.
|
||||
}
|
||||
trader.LastAnalyzedAt = DateTime.UtcNow;
|
||||
await traderRepo.UpdateAsync(trader, ct);
|
||||
|
||||
var statsService = traderScope.ServiceProvider.GetService<IPlatformStatisticsService>();
|
||||
if (statsService != null)
|
||||
|
||||
Reference in New Issue
Block a user