Fix timeout and daisyui
This commit is contained in:
@@ -11,18 +11,6 @@ var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")
|
||||
?? Environment.GetEnvironmentVariable("DOTNET_ENVIRONMENT")
|
||||
?? "Development";
|
||||
|
||||
// Log environment detection before host creation
|
||||
var dotnetEnv = Environment.GetEnvironmentVariable("DOTNET_ENVIRONMENT");
|
||||
var aspnetcoreEnv = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
|
||||
|
||||
Console.WriteLine("═══════════════════════════════════════════════════════════");
|
||||
Console.WriteLine("🔧 Environment Configuration");
|
||||
Console.WriteLine("═══════════════════════════════════════════════════════════");
|
||||
Console.WriteLine($" DOTNET_ENVIRONMENT: {dotnetEnv ?? "(not set)"}");
|
||||
Console.WriteLine($" ASPNETCORE_ENVIRONMENT: {aspnetcoreEnv ?? "(not set)"}");
|
||||
Console.WriteLine($" Selected Environment: {environment}");
|
||||
Console.WriteLine("═══════════════════════════════════════════════════════════");
|
||||
|
||||
var hostBuilder = new HostBuilder()
|
||||
.UseEnvironment(environment)
|
||||
.UseContentRoot(AppContext.BaseDirectory);
|
||||
@@ -31,11 +19,10 @@ var host = hostBuilder
|
||||
.ConfigureAppConfiguration((hostingContext, config) =>
|
||||
{
|
||||
var detectedEnv = hostingContext.HostingEnvironment.EnvironmentName;
|
||||
Console.WriteLine($" Detected Environment: {detectedEnv}");
|
||||
|
||||
if (detectedEnv != environment)
|
||||
{
|
||||
Console.WriteLine($" ⚠️ WARNING: Environment mismatch! Expected: {environment}, Got: {detectedEnv}");
|
||||
Console.WriteLine($"⚠️ WARNING: Environment mismatch! Expected: {environment}, Got: {detectedEnv}");
|
||||
}
|
||||
|
||||
config.SetBasePath(AppContext.BaseDirectory);
|
||||
@@ -43,14 +30,12 @@ var host = hostBuilder
|
||||
// Load configuration files in order (later files override earlier ones)
|
||||
// 1. Base appsettings.json (always loaded)
|
||||
config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
|
||||
Console.WriteLine(" ✓ Loaded: appsettings.json");
|
||||
|
||||
// 2. Load ONLY the environment-specific file (not other environments)
|
||||
if (!string.IsNullOrEmpty(detectedEnv))
|
||||
{
|
||||
var envFile = $"appsettings.{detectedEnv}.json";
|
||||
config.AddJsonFile(envFile, optional: true, reloadOnChange: true);
|
||||
Console.WriteLine($" ✓ Loaded: {envFile} (optional)");
|
||||
}
|
||||
|
||||
// 3. Environment variables (highest priority)
|
||||
@@ -68,8 +53,6 @@ var host = hostBuilder
|
||||
// User secrets not available, skip silently
|
||||
}
|
||||
}
|
||||
|
||||
Console.WriteLine("═══════════════════════════════════════════════════════════");
|
||||
})
|
||||
.ConfigureServices((hostContext, services) =>
|
||||
{
|
||||
@@ -90,39 +73,6 @@ var host = hostBuilder
|
||||
// Configure database
|
||||
var postgreSqlConnectionString = configuration.GetSection(Constants.Databases.PostgreSql)["ConnectionString"];
|
||||
|
||||
// Log database connection details (mask password for security)
|
||||
if (!string.IsNullOrEmpty(postgreSqlConnectionString))
|
||||
{
|
||||
var connectionParts = postgreSqlConnectionString.Split(';')
|
||||
.Where(p => !string.IsNullOrWhiteSpace(p))
|
||||
.Select(p => p.Trim())
|
||||
.ToDictionary(
|
||||
p => p.Split('=')[0].Trim(),
|
||||
p => p.Contains('=') ? p.Substring(p.IndexOf('=') + 1).Trim() : string.Empty,
|
||||
StringComparer.OrdinalIgnoreCase);
|
||||
|
||||
var dbHost = connectionParts.GetValueOrDefault("Host", "unknown");
|
||||
var port = connectionParts.GetValueOrDefault("Port", "unknown");
|
||||
var database = connectionParts.GetValueOrDefault("Database", "unknown");
|
||||
var username = connectionParts.GetValueOrDefault("Username", "unknown");
|
||||
var maskedConnectionString = postgreSqlConnectionString
|
||||
.Replace(connectionParts.GetValueOrDefault("Password", ""), "***", StringComparison.OrdinalIgnoreCase);
|
||||
|
||||
Console.WriteLine("═══════════════════════════════════════════════════════════");
|
||||
Console.WriteLine("📊 PostgreSQL Database Configuration");
|
||||
Console.WriteLine("═══════════════════════════════════════════════════════════");
|
||||
Console.WriteLine($" Host: {dbHost}");
|
||||
Console.WriteLine($" Port: {port}");
|
||||
Console.WriteLine($" Database: {database}");
|
||||
Console.WriteLine($" Username: {username}");
|
||||
Console.WriteLine($" Connection String: {maskedConnectionString}");
|
||||
Console.WriteLine("═══════════════════════════════════════════════════════════");
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("⚠️ WARNING: PostgreSQL connection string is empty or not configured!");
|
||||
}
|
||||
|
||||
services.Configure<PostgreSqlSettings>(configuration.GetSection(Constants.Databases.PostgreSql));
|
||||
services.Configure<InfluxDbSettings>(configuration.GetSection(Constants.Databases.InfluxDb));
|
||||
|
||||
@@ -201,95 +151,67 @@ var host = hostBuilder
|
||||
logging.ClearProviders();
|
||||
logging.AddConsole();
|
||||
logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
|
||||
|
||||
// Filter out EF Core database command logs (SQL queries)
|
||||
logging.AddFilter("Microsoft.EntityFrameworkCore.Database.Command", LogLevel.Warning);
|
||||
})
|
||||
.Build();
|
||||
|
||||
// Log worker status
|
||||
var logger = host.Services.GetRequiredService<ILogger<Program>>();
|
||||
var config = host.Services.GetRequiredService<IConfiguration>();
|
||||
|
||||
// Log PostgreSQL connection details
|
||||
// Test database connection at startup
|
||||
var postgreSqlConnectionString = config.GetSection(Constants.Databases.PostgreSql)["ConnectionString"];
|
||||
if (!string.IsNullOrEmpty(postgreSqlConnectionString))
|
||||
if (string.IsNullOrEmpty(postgreSqlConnectionString))
|
||||
{
|
||||
var connectionParts = postgreSqlConnectionString.Split(';')
|
||||
.Where(p => !string.IsNullOrWhiteSpace(p))
|
||||
.Select(p => p.Trim())
|
||||
.ToDictionary(
|
||||
p => p.Split('=')[0].Trim(),
|
||||
p => p.Contains('=') ? p.Substring(p.IndexOf('=') + 1).Trim() : string.Empty,
|
||||
StringComparer.OrdinalIgnoreCase);
|
||||
|
||||
var hostName = connectionParts.GetValueOrDefault("Host", "unknown");
|
||||
var port = connectionParts.GetValueOrDefault("Port", "unknown");
|
||||
var database = connectionParts.GetValueOrDefault("Database", "unknown");
|
||||
var username = connectionParts.GetValueOrDefault("Username", "unknown");
|
||||
|
||||
logger.LogInformation("═══════════════════════════════════════════════════════════");
|
||||
logger.LogInformation("📊 PostgreSQL Database Configuration");
|
||||
logger.LogInformation("═══════════════════════════════════════════════════════════");
|
||||
logger.LogInformation(" Host: {Host}", hostName);
|
||||
logger.LogInformation(" Port: {Port}", port);
|
||||
logger.LogInformation(" Database: {Database}", database);
|
||||
logger.LogInformation(" Username: {Username}", username);
|
||||
logger.LogInformation("═══════════════════════════════════════════════════════════");
|
||||
|
||||
// Test database connection
|
||||
logger.LogWarning("⚠️ Database connection string is empty or not configured!");
|
||||
}
|
||||
else
|
||||
{
|
||||
// Parse and log database host name
|
||||
try
|
||||
{
|
||||
var connectionParts = postgreSqlConnectionString.Split(';')
|
||||
.Where(p => !string.IsNullOrWhiteSpace(p))
|
||||
.Select(p => p.Trim())
|
||||
.ToDictionary(
|
||||
p => p.Split('=')[0].Trim(),
|
||||
p => p.Contains('=') ? p.Substring(p.IndexOf('=') + 1).Trim() : string.Empty,
|
||||
StringComparer.OrdinalIgnoreCase);
|
||||
|
||||
var dbHost = connectionParts.GetValueOrDefault("Host", "unknown");
|
||||
logger.LogWarning("📊 Database Host: {Host}", dbHost);
|
||||
}
|
||||
catch
|
||||
{
|
||||
// Failed to parse connection string, continue anyway
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
using var scope = host.Services.CreateScope();
|
||||
var dbContext = scope.ServiceProvider.GetRequiredService<ManagingDbContext>();
|
||||
var canConnect = await dbContext.Database.CanConnectAsync();
|
||||
if (canConnect)
|
||||
if (!canConnect)
|
||||
{
|
||||
logger.LogInformation("✅ Database connection test: SUCCESS");
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.LogWarning("⚠️ Database connection test: FAILED - Cannot connect to database");
|
||||
logger.LogWarning("⚠️ Database connection test failed - Cannot connect to database");
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logger.LogError(ex, "❌ Database connection test: FAILED - {Error}", ex.Message);
|
||||
logger.LogError(ex, "❌ Database connection test failed - {Error}", ex.Message);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.LogWarning("⚠️ WARNING: PostgreSQL connection string is empty or not configured!");
|
||||
}
|
||||
|
||||
var isBacktestWorkerEnabled = config.GetValue<bool>("WorkerBacktestCompute", false);
|
||||
var isGeneticWorkerEnabled = config.GetValue<bool>("WorkerGeneticCompute", false);
|
||||
|
||||
if (isBacktestWorkerEnabled)
|
||||
{
|
||||
var taskSlot = Environment.GetEnvironmentVariable("TASK_SLOT") ??
|
||||
Environment.GetEnvironmentVariable("CAPROVER_TASK_SLOT") ??
|
||||
"0";
|
||||
var backtestWorkerId = Environment.GetEnvironmentVariable("WORKER_ID") ??
|
||||
config["BacktestComputeWorker:WorkerId"] ??
|
||||
$"{Environment.MachineName}-{taskSlot}";
|
||||
logger.LogInformation("BacktestComputeWorker is enabled and will be started.");
|
||||
logger.LogInformation("Backtest Worker ID: {WorkerId} (Task Slot: {TaskSlot})", backtestWorkerId, taskSlot);
|
||||
}
|
||||
else
|
||||
if (!isBacktestWorkerEnabled)
|
||||
{
|
||||
logger.LogWarning("BacktestComputeWorker is disabled via configuration. No backtest jobs will be processed.");
|
||||
}
|
||||
|
||||
if (isGeneticWorkerEnabled)
|
||||
{
|
||||
var taskSlot = Environment.GetEnvironmentVariable("TASK_SLOT") ??
|
||||
Environment.GetEnvironmentVariable("CAPROVER_TASK_SLOT") ??
|
||||
"0";
|
||||
var geneticWorkerId = Environment.GetEnvironmentVariable("GENETIC_WORKER_ID") ??
|
||||
config["GeneticComputeWorker:WorkerId"] ??
|
||||
$"{Environment.MachineName}-genetic-{taskSlot}";
|
||||
logger.LogInformation("GeneticComputeWorker is enabled and will be started.");
|
||||
logger.LogInformation("Genetic Worker ID: {WorkerId} (Task Slot: {TaskSlot})", geneticWorkerId, taskSlot);
|
||||
}
|
||||
else
|
||||
if (!isGeneticWorkerEnabled)
|
||||
{
|
||||
logger.LogWarning("GeneticComputeWorker is disabled via configuration. No genetic jobs will be processed.");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user