Add jobs
This commit is contained in:
170
src/Managing.Bootstrap/ComputeBootstrap.cs
Normal file
170
src/Managing.Bootstrap/ComputeBootstrap.cs
Normal file
@@ -0,0 +1,170 @@
|
||||
using Managing.Application.Abstractions;
|
||||
using Managing.Application.Abstractions.Repositories;
|
||||
using Managing.Application.Abstractions.Services;
|
||||
using Managing.Application.Accounts;
|
||||
using Managing.Application.Backtests;
|
||||
using Managing.Application.MoneyManagements;
|
||||
using Managing.Application.Scenarios;
|
||||
using Managing.Application.Shared;
|
||||
using Managing.Application.Synth;
|
||||
using Managing.Application.Trading;
|
||||
using Managing.Application.Users;
|
||||
using Managing.Application.Whitelist;
|
||||
using Managing.Domain.Statistics;
|
||||
using Managing.Domain.Trades;
|
||||
using Managing.Infrastructure.Databases;
|
||||
using Managing.Infrastructure.Databases.InfluxDb;
|
||||
using Managing.Infrastructure.Databases.InfluxDb.Abstractions;
|
||||
using Managing.Infrastructure.Databases.InfluxDb.Models;
|
||||
using Managing.Infrastructure.Databases.PostgreSql;
|
||||
using Managing.Infrastructure.Databases.PostgreSql.Configurations;
|
||||
using Managing.Infrastructure.Evm;
|
||||
using Managing.Infrastructure.Evm.Services;
|
||||
using Managing.Infrastructure.Evm.Subgraphs;
|
||||
using Managing.Infrastructure.Exchanges;
|
||||
using Managing.Infrastructure.Exchanges.Abstractions;
|
||||
using Managing.Infrastructure.Exchanges.Exchanges;
|
||||
using Managing.Infrastructure.Storage;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Options;
|
||||
using static Managing.Common.Enums;
|
||||
|
||||
namespace Managing.Bootstrap;
|
||||
|
||||
/// <summary>
|
||||
/// Bootstrap configuration for compute worker project (no Orleans)
|
||||
/// </summary>
|
||||
public static class ComputeBootstrap
|
||||
{
|
||||
public static IServiceCollection RegisterComputeDependencies(this IServiceCollection services,
|
||||
IConfiguration configuration)
|
||||
{
|
||||
return services
|
||||
.AddApplication()
|
||||
.AddInfrastructure(configuration);
|
||||
}
|
||||
|
||||
private static IServiceCollection AddApplication(this IServiceCollection services)
|
||||
{
|
||||
// Core services needed for backtest execution
|
||||
services.AddScoped<ITradingService, TradingService>();
|
||||
services.AddScoped<IScenarioService, ScenarioService>();
|
||||
services.AddScoped<IMoneyManagementService, MoneyManagementService>();
|
||||
services.AddScoped<IAccountService, AccountService>();
|
||||
services.AddScoped<IUserService, UserService>();
|
||||
|
||||
// Services not needed for compute worker (depend on IBacktester/Orleans)
|
||||
// services.AddScoped<IStatisticService, StatisticService>(); // Requires IBacktester
|
||||
// services.AddScoped<ISettingsService, SettingsService>(); // Requires IBacktester
|
||||
// services.AddScoped<IGeneticService, GeneticService>(); // Requires IBacktester
|
||||
// services.AddScoped<IAgentService, AgentService>(); // May require Orleans
|
||||
// services.AddScoped<IBotService, BotService>(); // May require Orleans
|
||||
// services.AddScoped<IWorkerService, WorkerService>(); // May require Orleans
|
||||
// services.AddScoped<IPricesService, PricesService>(); // May require Orleans
|
||||
|
||||
// Processors
|
||||
// Note: IBacktester not needed for compute worker - BacktestExecutor is used directly
|
||||
services.AddTransient<BacktestExecutor>();
|
||||
services.AddTransient<IExchangeProcessor, EvmProcessor>();
|
||||
|
||||
services.AddTransient<ITradaoService, TradaoService>();
|
||||
services.AddTransient<IExchangeService, ExchangeService>();
|
||||
|
||||
// Web3Proxy service (needed for EvmManager)
|
||||
services.AddTransient<IWeb3ProxyService, Web3ProxyService>();
|
||||
|
||||
// Evm services (needed for ExchangeService)
|
||||
services.AddGbcFeed();
|
||||
services.AddUniswapV2();
|
||||
services.AddChainlink();
|
||||
services.AddChainlinkGmx();
|
||||
services.AddSingleton<IEvmManager, EvmManager>();
|
||||
|
||||
services.AddTransient<IKaigenService, KaigenService>();
|
||||
services.AddTransient<IWhitelistService, WhitelistService>();
|
||||
|
||||
// Synth services (needed for TradingService)
|
||||
services.AddScoped<ISynthPredictionService, SynthPredictionService>();
|
||||
services.AddScoped<ISynthApiClient, SynthApiClient>();
|
||||
|
||||
// No-op implementations for compute worker (no Discord needed)
|
||||
services.AddSingleton<IDiscordService, NoOpDiscordService>();
|
||||
// IGrainFactory is optional in UserService - register as null for compute workers
|
||||
services.AddSingleton<IGrainFactory>(sp => null!);
|
||||
|
||||
// Webhook service (required for notifications)
|
||||
services.AddHttpClient<IWebhookService, WebhookService>();
|
||||
// MessengerService must be Scoped because it depends on IUserService which is Scoped
|
||||
services.AddScoped<IMessengerService, MessengerService>();
|
||||
|
||||
return services;
|
||||
}
|
||||
|
||||
private static IServiceCollection AddInfrastructure(this IServiceCollection services, IConfiguration configuration)
|
||||
{
|
||||
// Database
|
||||
services.AddSingleton<IPostgreSqlSettings>(sp =>
|
||||
sp.GetRequiredService<IOptions<PostgreSqlSettings>>().Value);
|
||||
|
||||
services.AddSingleton<IInfluxDbSettings>(sp =>
|
||||
sp.GetRequiredService<IOptions<InfluxDbSettings>>().Value);
|
||||
|
||||
services.Configure<KaigenSettings>(configuration.GetSection("Kaigen"));
|
||||
services.Configure<Web3ProxySettings>(configuration.GetSection("Web3Proxy"));
|
||||
|
||||
// SQL Monitoring (required by repositories)
|
||||
services.Configure<SqlMonitoringSettings>(configuration.GetSection("SqlMonitoring"));
|
||||
services.AddSingleton<SentrySqlMonitoringService>();
|
||||
|
||||
// PostgreSql Repositories
|
||||
services.AddTransient<IAccountRepository, PostgreSqlAccountRepository>();
|
||||
services.AddTransient<IBacktestRepository, PostgreSqlBacktestRepository>();
|
||||
services.AddTransient<IBacktestJobRepository, PostgreSqlJobRepository>();
|
||||
services.AddTransient<IGeneticRepository, PostgreSqlGeneticRepository>();
|
||||
services.AddTransient<ITradingRepository, PostgreSqlTradingRepository>();
|
||||
services.AddTransient<ISettingsRepository, PostgreSqlSettingsRepository>();
|
||||
services.AddTransient<IUserRepository, PostgreSqlUserRepository>();
|
||||
services.AddTransient<IAgentSummaryRepository, AgentSummaryRepository>();
|
||||
services.AddTransient<IStatisticRepository, PostgreSqlStatisticRepository>();
|
||||
services.AddTransient<IBotRepository, PostgreSqlBotRepository>();
|
||||
services.AddTransient<IWorkerRepository, PostgreSqlWorkerRepository>();
|
||||
services.AddTransient<ISynthRepository, PostgreSqlSynthRepository>();
|
||||
services.AddTransient<IWhitelistRepository, PostgreSqlWhitelistRepository>();
|
||||
|
||||
// InfluxDb Repositories
|
||||
services.AddSingleton<IInfluxDbRepository, InfluxDbRepository>();
|
||||
services.AddSingleton<ICandleRepository, CandleRepository>();
|
||||
services.AddSingleton<IAgentBalanceRepository, AgentBalanceRepository>();
|
||||
|
||||
// Cache
|
||||
services.AddDistributedMemoryCache();
|
||||
services.AddTransient<ICacheService, CacheService>();
|
||||
services.AddSingleton<ITaskCache, TaskCache>();
|
||||
|
||||
return services;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// No-op implementation of IDiscordService for compute workers
|
||||
/// </summary>
|
||||
internal class NoOpDiscordService : IDiscordService
|
||||
{
|
||||
public Task SendSignal(string message, TradingExchanges exchange, Ticker ticker, TradeDirection direction, Timeframe timeframe) => Task.CompletedTask;
|
||||
public Task SendPosition(Position position) => Task.CompletedTask;
|
||||
public Task SendClosingPosition(Position position) => Task.CompletedTask;
|
||||
public Task SendMessage(string v) => Task.CompletedTask;
|
||||
public Task SendTradeMessage(string message, bool isBadBehavior = false) => Task.CompletedTask;
|
||||
public Task SendIncreasePosition(string address, Trade trade, string copyAccountName, Trade? oldTrade = null) => Task.CompletedTask;
|
||||
public Task SendClosedPosition(string address, Trade oldTrade) => Task.CompletedTask;
|
||||
public Task SendDecreasePosition(string address, Trade newTrade, decimal decreaseAmount) => Task.CompletedTask;
|
||||
public Task SendBestTraders(List<Trader> traders) => Task.CompletedTask;
|
||||
public Task SendBadTraders(List<Trader> traders) => Task.CompletedTask;
|
||||
public Task SendDowngradedFundingRate(FundingRate oldRate) => Task.CompletedTask;
|
||||
public Task SendNewTopFundingRate(FundingRate newRate) => Task.CompletedTask;
|
||||
public Task SendFundingRateUpdate(FundingRate oldRate, FundingRate newRate) => Task.CompletedTask;
|
||||
public Task SendDebugMessage(string message) => Task.CompletedTask;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user