Add agentNames to the endpoint index

This commit is contained in:
2025-07-31 16:51:26 +07:00
parent 6cd28a4edb
commit 857ca348ba
4 changed files with 53 additions and 34 deletions

View File

@@ -672,6 +672,7 @@ public class DataController : ControllerBase
/// <param name="pageSize">Number of items per page (defaults to 10, max 100)</param>
/// <param name="sortBy">Field to sort by (TotalPnL, PnLLast24h, TotalROI, ROILast24h, Wins, Losses, AverageWinRate, ActiveStrategiesCount, TotalVolume, VolumeLast24h)</param>
/// <param name="sortOrder">Sort order - "asc" or "desc" (defaults to "desc")</param>
/// <param name="agentNames">Optional comma-separated list of agent names to filter by</param>
/// <returns>A paginated list of agent summaries sorted by the specified field</returns>
[HttpGet("GetAgentIndexPaginated")]
public async Task<ActionResult<PaginatedAgentIndexResponse>> GetAgentIndexPaginated(
@@ -679,7 +680,8 @@ public class DataController : ControllerBase
int page = 1,
int pageSize = 10,
string sortBy = "TotalPnL",
string sortOrder = "desc")
string sortOrder = "desc",
string? agentNames = null)
{
// Validate time filter
var validTimeFilters = new[] { "24H", "3D", "1W", "1M", "1Y", "Total" };
@@ -706,13 +708,24 @@ public class DataController : ControllerBase
}
// Validate sort by field
var validSortFields = new[] { "TotalPnL", "PnLLast24h", "TotalROI", "ROILast24h", "Wins", "Losses", "AverageWinRate", "ActiveStrategiesCount", "TotalVolume", "VolumeLast24h" };
var validSortFields = new[]
{
"TotalPnL", "PnLLast24h", "TotalROI", "ROILast24h", "Wins", "Losses", "AverageWinRate",
"ActiveStrategiesCount", "TotalVolume", "VolumeLast24h"
};
if (!validSortFields.Contains(sortBy))
{
sortBy = "TotalPnL"; // Default to TotalPnL if invalid
}
string cacheKey = $"AgentIndex_{timeFilter}";
// Create cache key that includes agent names filter
var agentNamesForCache = !string.IsNullOrWhiteSpace(agentNames)
? string.Join("_", agentNames.Split(',', StringSplitOptions.RemoveEmptyEntries)
.Select(name => name.Trim())
.Where(name => !string.IsNullOrWhiteSpace(name))
.OrderBy(name => name))
: "all";
string cacheKey = $"AgentIndex_{timeFilter}_{agentNamesForCache}";
// Check if the agent index is already cached
var cachedIndex = _cacheService.GetValue<AgentIndexViewModel>(cacheKey);
@@ -792,10 +805,26 @@ public class DataController : ControllerBase
_cacheService.SaveValue(cacheKey, agentIndex, TimeSpan.FromMinutes(5));
}
// Apply agent name filtering if specified
if (!string.IsNullOrWhiteSpace(agentNames))
{
var agentNameList = agentNames.Split(',', StringSplitOptions.RemoveEmptyEntries)
.Select(name => name.Trim())
.Where(name => !string.IsNullOrWhiteSpace(name))
.ToList();
if (agentNameList.Any())
{
allAgentSummaries = allAgentSummaries
.Where(agent => agentNameList.Contains(agent.AgentName, StringComparer.OrdinalIgnoreCase))
.ToList();
}
}
// Apply sorting
var sortedSummaries = sortBy switch
{
"TotalPnL" => sortOrder == "desc"
"TotalPnL" => sortOrder == "desc"
? allAgentSummaries.OrderByDescending(a => a.TotalPnL)
: allAgentSummaries.OrderBy(a => a.TotalPnL),
"PnLLast24h" => sortOrder == "desc"
@@ -850,7 +879,8 @@ public class DataController : ControllerBase
HasPreviousPage = page > 1,
TimeFilter = timeFilter,
SortBy = sortBy,
SortOrder = sortOrder
SortOrder = sortOrder,
FilteredAgentNames = agentNames
};
return Ok(response);
@@ -906,8 +936,8 @@ public class DataController : ControllerBase
/// Retrieves an array of online agent names
/// </summary>
/// <returns>An array of online agent names</returns>
[HttpGet("GetAgentStatuses")]
public async Task<ActionResult<List<string>>> GetAgentStatuses()
[HttpGet("GetOnlineAgent")]
public async Task<ActionResult<List<string>>> GetOnlineAgent()
{
const string cacheKey = "OnlineAgentNames";

View File

@@ -54,4 +54,9 @@ public class PaginatedAgentIndexResponse
/// Sort order (asc or desc)
/// </summary>
public string SortOrder { get; set; } = "desc";
/// <summary>
/// Comma-separated list of agent names used for filtering (if any)
/// </summary>
public string? FilteredAgentNames { get; set; }
}