diff --git a/src/ApiService/ApiService/Functions/Tasks.cs b/src/ApiService/ApiService/Functions/Tasks.cs index 2b5f89de8..ba254679e 100644 --- a/src/ApiService/ApiService/Functions/Tasks.cs +++ b/src/ApiService/ApiService/Functions/Tasks.cs @@ -1,4 +1,5 @@ using System.Net; +using System.Threading.Tasks; using Microsoft.Azure.Functions.Worker; using Microsoft.Azure.Functions.Worker.Http; @@ -31,20 +32,36 @@ public class Tasks { return await _context.RequestHandling.NotOk(req, request.ErrorV, "task get"); } - if (request.OkV.TaskId != null) { - var task = await _context.TaskOperations.GetByTaskId(request.OkV.TaskId.Value); + if (request.OkV.TaskId is Guid taskId) { + var task = await _context.TaskOperations.GetByTaskId(taskId); if (task == null) { - return await _context.RequestHandling.NotOk(req, new Error(ErrorCode.INVALID_REQUEST, new[] { "unable to find task" - }), "task get"); - + return await _context.RequestHandling.NotOk( + req, + new Error( + ErrorCode.INVALID_REQUEST, + new[] { "unable to find task" }), + "task get"); } - task.Nodes = await _context.NodeTasksOperations.GetNodeAssignments(request.OkV.TaskId.Value).ToListAsync(); - task.Events = await _context.TaskEventOperations.GetSummary(request.OkV.TaskId.Value).ToListAsync(); - var response = req.CreateResponse(HttpStatusCode.OK); - await response.WriteAsJsonAsync(task); - return response; + var (nodes, events) = await ( + _context.NodeTasksOperations.GetNodeAssignments(taskId).ToListAsync().AsTask(), + _context.TaskEventOperations.GetSummary(taskId).ToListAsync().AsTask()); + var result = new TaskSearchResult( + JobId: task.JobId, + TaskId: task.TaskId, + State: task.State, + Os: task.Os, + Config: task.Config, + Error: task.Error, + Auth: task.Auth, + Heartbeat: task.Heartbeat, + EndTime: task.EndTime, + UserInfo: task.UserInfo, + Nodes: nodes, + Events: events); + + return await RequestHandling.Ok(req, result); } var tasks = await _context.TaskOperations.SearchAll().ToListAsync(); diff --git a/src/ApiService/ApiService/OneFuzzTypes/Model.cs b/src/ApiService/ApiService/OneFuzzTypes/Model.cs index ac87e38dc..537800f95 100644 --- a/src/ApiService/ApiService/OneFuzzTypes/Model.cs +++ b/src/ApiService/ApiService/OneFuzzTypes/Model.cs @@ -256,8 +256,6 @@ public record Task( DateTimeOffset? Heartbeat = null, DateTimeOffset? EndTime = null, UserInfo? UserInfo = null) : StatefulEntityBase(State) { - public List Events { get; set; } = new List(); - public List Nodes { get; set; } = new List(); } public record TaskEvent( diff --git a/src/ApiService/ApiService/OneFuzzTypes/Responses.cs b/src/ApiService/ApiService/OneFuzzTypes/Responses.cs index f5cbfa987..82eb087f0 100644 --- a/src/ApiService/ApiService/OneFuzzTypes/Responses.cs +++ b/src/ApiService/ApiService/OneFuzzTypes/Responses.cs @@ -35,6 +35,21 @@ public record NodeSearchResult( bool DebugKeepNode ) : BaseResponse(); +public record TaskSearchResult( + Guid JobId, + Guid TaskId, + TaskState State, + Os Os, + TaskConfig Config, + Error? Error, + Authentication? Auth, + DateTimeOffset? Heartbeat, + DateTimeOffset? EndTime, + UserInfo? UserInfo, + List Events, + List Nodes +) : BaseResponse(); + public record BoolResult( bool Result ) : BaseResponse();