Separate 2endpoints for data summary

This commit is contained in:
2025-07-28 14:36:51 +07:00
parent 38c7691615
commit 09e2c704ef
2 changed files with 88 additions and 18 deletions

View File

@@ -493,10 +493,10 @@ public class DataController : ControllerBase
} }
/// <summary> /// <summary>
/// Retrieves a summary of platform activity across all agents /// Retrieves a summary of platform activity across all agents (platform-level data only)
/// </summary> /// </summary>
/// <param name="timeFilter">Time filter to apply (24H, 3D, 1W, 1M, 1Y, Total)</param> /// <param name="timeFilter">Time filter to apply (24H, 3D, 1W, 1M, 1Y, Total)</param>
/// <returns>A summary of platform activity including per-agent statistics</returns> /// <returns>A summary of platform activity without individual agent details</returns>
[HttpGet("GetPlatformSummary")] [HttpGet("GetPlatformSummary")]
public async Task<ActionResult<PlatformSummaryViewModel>> GetPlatformSummary(string timeFilter = "Total") public async Task<ActionResult<PlatformSummaryViewModel>> GetPlatformSummary(string timeFilter = "Total")
{ {
@@ -533,6 +533,75 @@ public class DataController : ControllerBase
decimal totalPlatformVolume = 0; decimal totalPlatformVolume = 0;
decimal totalPlatformVolumeLast24h = 0; decimal totalPlatformVolumeLast24h = 0;
// Calculate totals from all agents
foreach (var agent in agentsWithStrategies)
{
var strategies = agent.Value;
if (strategies.Count == 0)
{
continue; // Skip agents with no strategies
}
// Combine all positions from all strategies
var allPositions = strategies.SelectMany<ITradingBot, Position>(s => s.Positions).ToList();
// Calculate agent metrics for platform totals
decimal totalPnL = TradingBox.GetPnLInTimeRange(allPositions, timeFilter);
decimal totalVolume = TradingBox.GetTotalVolumeTraded(allPositions);
decimal volumeLast24h = TradingBox.GetLast24HVolumeTraded(allPositions);
// Add to platform totals
totalPlatformPnL += totalPnL;
totalPlatformVolume += totalVolume;
totalPlatformVolumeLast24h += volumeLast24h;
}
// Set the platform totals
summary.TotalPlatformPnL = totalPlatformPnL;
summary.TotalPlatformVolume = totalPlatformVolume;
summary.TotalPlatformVolumeLast24h = totalPlatformVolumeLast24h;
// Cache the results for 5 minutes
_cacheService.SaveValue(cacheKey, summary, TimeSpan.FromMinutes(5));
return Ok(summary);
}
/// <summary>
/// Retrieves a list of agent summaries for the agent index page
/// </summary>
/// <param name="timeFilter">Time filter to apply (24H, 3D, 1W, 1M, 1Y, Total)</param>
/// <returns>A list of agent summaries sorted by performance</returns>
[HttpGet("GetAgentIndex")]
public async Task<ActionResult<AgentIndexViewModel>> GetAgentIndex(string timeFilter = "Total")
{
// Validate time filter
var validTimeFilters = new[] { "24H", "3D", "1W", "1M", "1Y", "Total" };
if (!validTimeFilters.Contains(timeFilter))
{
timeFilter = "Total"; // Default to Total if invalid
}
string cacheKey = $"AgentIndex_{timeFilter}";
// Check if the agent index is already cached
var cachedIndex = _cacheService.GetValue<AgentIndexViewModel>(cacheKey);
if (cachedIndex != null)
{
return Ok(cachedIndex);
}
// Get all agents and their strategies
var agentsWithStrategies = await _mediator.Send(new GetAllAgentsCommand(timeFilter));
// Create the agent index response
var agentIndex = new AgentIndexViewModel
{
TimeFilter = timeFilter
};
// Create summaries for each agent // Create summaries for each agent
foreach (var agent in agentsWithStrategies) foreach (var agent in agentsWithStrategies)
{ {
@@ -583,26 +652,16 @@ public class DataController : ControllerBase
VolumeLast24h = volumeLast24h VolumeLast24h = volumeLast24h
}; };
summary.AgentSummaries.Add(agentSummary); agentIndex.AgentSummaries.Add(agentSummary);
// Add to platform totals
totalPlatformPnL += totalPnL;
totalPlatformVolume += totalVolume;
totalPlatformVolumeLast24h += volumeLast24h;
} }
// Set the platform totals
summary.TotalPlatformPnL = totalPlatformPnL;
summary.TotalPlatformVolume = totalPlatformVolume;
summary.TotalPlatformVolumeLast24h = totalPlatformVolumeLast24h;
// Sort agent summaries by total PnL (highest first) // Sort agent summaries by total PnL (highest first)
summary.AgentSummaries = summary.AgentSummaries.OrderByDescending(a => a.TotalPnL).ToList(); agentIndex.AgentSummaries = agentIndex.AgentSummaries.OrderByDescending(a => a.TotalPnL).ToList();
// Cache the results for 5 minutes // Cache the results for 5 minutes
_cacheService.SaveValue(cacheKey, summary, TimeSpan.FromMinutes(5)); _cacheService.SaveValue(cacheKey, agentIndex, TimeSpan.FromMinutes(5));
return Ok(summary); return Ok(agentIndex);
} }
/// <summary> /// <summary>

View File

@@ -62,7 +62,7 @@ namespace Managing.Api.Models.Responses
} }
/// <summary> /// <summary>
/// Platform-wide statistics including per-agent summaries /// Platform-wide statistics without individual agent details
/// </summary> /// </summary>
public class PlatformSummaryViewModel public class PlatformSummaryViewModel
{ {
@@ -92,7 +92,18 @@ namespace Managing.Api.Models.Responses
public decimal TotalPlatformVolumeLast24h { get; set; } public decimal TotalPlatformVolumeLast24h { get; set; }
/// <summary> /// <summary>
/// Summaries for each agent /// Time filter applied to the data
/// </summary>
public string TimeFilter { get; set; } = "Total";
}
/// <summary>
/// Response model containing a list of agent summaries for the agent index
/// </summary>
public class AgentIndexViewModel
{
/// <summary>
/// List of agent summaries sorted by performance
/// </summary> /// </summary>
public List<AgentSummaryViewModel> AgentSummaries { get; set; } = new List<AgentSummaryViewModel>(); public List<AgentSummaryViewModel> AgentSummaries { get; set; } = new List<AgentSummaryViewModel>();