Add Role based grain placement

This commit is contained in:
2025-09-18 20:17:28 +07:00
parent 530dd83daa
commit c2f3734021
16 changed files with 404 additions and 18 deletions

View File

@@ -1,6 +1,7 @@
using System.Text.Json;
using Managing.Application.Abstractions.Grains;
using Managing.Application.Abstractions.Services;
using Managing.Application.Orleans;
using Managing.Core;
using Managing.Domain.Accounts;
using Managing.Domain.Backtests;
@@ -18,8 +19,10 @@ namespace Managing.Application.Grains;
/// Stateless worker grain for processing bundle backtest requests
/// Uses the bundle request ID as the primary key (Guid)
/// Implements IRemindable for automatic retry of failed bundles
/// Uses custom compute placement with random fallback.
/// </summary>
[StatelessWorker]
[TradingPlacement] // Use custom compute placement with random fallback
public class BundleBacktestGrain : Grain, IBundleBacktestGrain, IRemindable
{
private readonly ILogger<BundleBacktestGrain> _logger;

View File

@@ -1,5 +1,6 @@
using Managing.Application.Abstractions.Grains;
using Managing.Application.Abstractions.Repositories;
using Managing.Application.Orleans;
using Managing.Domain.Candles;
using Microsoft.Extensions.Logging;
using Orleans.Streams;
@@ -10,7 +11,9 @@ namespace Managing.Application.Grains;
/// <summary>
/// Grain for managing in-memory historical candle data with Orleans state persistence.
/// Subscribes to price streams and maintains a rolling window of 500 candles.
/// Uses custom trading placement with load balancing and built-in fallback.
/// </summary>
[TradingPlacement] // Use custom trading placement with load balancing
public class CandleStoreGrain : Grain, ICandleStoreGrain, IAsyncObserver<Candle>
{
private readonly IPersistentState<CandleStoreGrainState> _state;

View File

@@ -1,5 +1,6 @@
using Managing.Application.Abstractions.Grains;
using Managing.Application.Abstractions.Services;
using Managing.Application.Orleans;
using Managing.Core;
using Managing.Domain.Accounts;
using Managing.Domain.Backtests;
@@ -12,8 +13,10 @@ namespace Managing.Application.Grains;
/// <summary>
/// Stateless worker grain for processing genetic backtest requests.
/// Uses the genetic request ID (string) as the primary key.
/// Uses custom compute placement with random fallback.
/// </summary>
[StatelessWorker]
[TradingPlacement] // Use custom compute placement with random fallback
public class GeneticBacktestGrain : Grain, IGeneticBacktestGrain
{
private readonly ILogger<GeneticBacktestGrain> _logger;

View File

@@ -2,6 +2,7 @@ using Managing.Application.Abstractions;
using Managing.Application.Abstractions.Grains;
using Managing.Application.Abstractions.Models;
using Managing.Application.Abstractions.Services;
using Managing.Application.Orleans;
using Managing.Domain.Bots;
using Microsoft.Extensions.Logging;
using static Managing.Common.Enums;
@@ -10,7 +11,9 @@ namespace Managing.Application.Grains;
/// <summary>
/// Grain for managing platform-wide summary metrics with real-time updates and periodic snapshots
/// Uses custom trading placement with load balancing and built-in fallback.
/// </summary>
[TradingPlacement] // Use custom trading placement with load balancing
public class PlatformSummaryGrain : Grain, IPlatformSummaryGrain, IRemindable
{
private readonly IPersistentState<PlatformSummaryGrainState> _state;

View File

@@ -1,6 +1,7 @@
using Managing.Application.Abstractions.Grains;
using Managing.Application.Abstractions.Repositories;
using Managing.Application.Abstractions.Services;
using Managing.Application.Orleans;
using Managing.Application.Shared;
using Managing.Common;
using Managing.Domain.Accounts;
@@ -15,7 +16,9 @@ namespace Managing.Application.Grains;
/// Grain for fetching price data from external APIs and publishing to Orleans streams.
/// This grain runs periodically and processes all exchange/ticker combinations for a specific timeframe.
/// The timeframe is passed as the PrimaryKeyString to identify which timeframe this grain handles.
/// Uses custom trading placement with load balancing and built-in fallback.
/// </summary>
[TradingPlacement] // Use custom trading placement with load balancing
public class PriceFetcherGrain : Grain, IPriceFetcherGrain, IRemindable
{
private readonly ILogger<PriceFetcherGrain> _logger;