diff --git a/src/Managing.Application/Workers/BacktestComputeWorker.cs b/src/Managing.Application/Workers/BacktestComputeWorker.cs index 3036c9f3..71752c5f 100644 --- a/src/Managing.Application/Workers/BacktestComputeWorker.cs +++ b/src/Managing.Application/Workers/BacktestComputeWorker.cs @@ -590,10 +590,19 @@ public class BacktestComputeWorker : BackgroundService bundleRequest.Status == BundleBacktestRequestStatus.Completed && !string.IsNullOrEmpty(user.TelegramChannel)) { + var completedAt = bundleRequest.CompletedAt ?? DateTime.UtcNow; + var duration = completedAt - bundleRequest.CreatedAt; + var durationText = duration.TotalHours >= 1 + ? $"{duration.Hours}h {duration.Minutes}m {duration.Seconds}s" + : duration.TotalMinutes >= 1 + ? $"{duration.Minutes}m {duration.Seconds}s" + : $"{duration.Seconds}s"; + var message = $"✅ Bundle backtest '{bundleRequest.Name}' (ID: {bundleRequest.RequestId}) completed successfully. " + $"Completed: {completedJobs}/{totalJobs} backtests" + (failedJobs > 0 ? $", Failed: {failedJobs}" : "") + - $". Results: {completedJobResults.Count} backtest(s) generated."; + $". Results: {completedJobResults.Count} backtest(s) generated. " + + $"Duration: {durationText}"; await webhookService.SendMessage(message, user.TelegramChannel); } @@ -601,8 +610,17 @@ public class BacktestComputeWorker : BackgroundService bundleRequest.Status == BundleBacktestRequestStatus.Failed && !string.IsNullOrEmpty(user.TelegramChannel)) { + var completedAt = bundleRequest.CompletedAt ?? DateTime.UtcNow; + var duration = completedAt - bundleRequest.CreatedAt; + var durationText = duration.TotalHours >= 1 + ? $"{duration.Hours}h {duration.Minutes}m {duration.Seconds}s" + : duration.TotalMinutes >= 1 + ? $"{duration.Minutes}m {duration.Seconds}s" + : $"{duration.Seconds}s"; + var message = $"❌ Bundle backtest '{bundleRequest.Name}' (ID: {bundleRequest.RequestId}) failed. " + - $"All {totalJobs} backtests failed. Error: {bundleRequest.ErrorMessage}"; + $"All {totalJobs} backtests failed. Error: {bundleRequest.ErrorMessage}. " + + $"Duration: {durationText}"; await webhookService.SendMessage(message, user.TelegramChannel); }