Exemple #1
0
 public override async Task ProcessMessageAsync(AgentMessage message)
 {
     if (message.MessageType == MessageType.DeleteFile)
     {
         var taskId = message.To <string>().Data;
         await DeleteFileAsync(taskId);
     }
 }
        public override async Task ProcessMessageAsync(AgentMessage message)
        {
            switch (message.MessageType)
            {
            case MessageType.SplitterTask:
            {
                var taskMsg = message.To <TaskMessage>();

                _logger.LogInformation($"Save to DB split task {taskMsg.Data.Id}");
                var task = new DbTask
                {
                    Id                = taskMsg.Data.Id,
                    Creator           = taskMsg.Data.Creator,
                    Name              = taskMsg.Data.Name,
                    State             = taskMsg.Data.State,
                    FileName          = taskMsg.Data.FileName,
                    StartDate         = taskMsg.Data.StartDate,
                    ErrorPercentage   = taskMsg.Data.ErrorPercentage,
                    ProcessPercentage = taskMsg.Data.ProcessPercentage,
                    RequiredSubtype   = taskMsg.Data.RequiredSubtype,
                    UniquePercentage  = taskMsg.Data.UniquePercentage
                };
                await _taskCollection.InsertOneAsync(task);

                break;
            }

            case MessageType.WorkerTask:
            {
                var taskMsg = message.To <TaskMessage>();
                _logger.LogInformation($"Save to DB work task {taskMsg.Data.Id}. Parent: {taskMsg.Data.ParentId}");

                var upd = Builders <DbTask> .Update.Push(x => x.SubTasks, new DbSubTask
                    {
                        Id                = taskMsg.Data.Id,
                        Name              = taskMsg.Data.Name,
                        State             = taskMsg.Data.State,
                        StartDate         = taskMsg.Data.StartDate,
                        ErrorPercentage   = taskMsg.Data.ErrorPercentage,
                        ProcessPercentage = taskMsg.Data.ProcessPercentage,
                        UniquePercentage  = taskMsg.Data.UniquePercentage,
                        Workers           = new Dictionary <string, WorkerInfo>()
                    });

                await _taskCollection.FindOneAndUpdateAsync(x => x.Id == taskMsg.Data.ParentId, upd);

                break;
            }

            case MessageType.TaskStat:
            {
                var taskMsg = message.To <TaskMessage>();
                var upd     = Builders <DbTask> .Update
                              .Set(f => f.SubTasks[-1].Workers[taskMsg.Author.SubType].Process, taskMsg.Data.ProcessPercentage)
                              .Set(f => f.SubTasks[-1].Workers[taskMsg.Author.SubType].Errors, taskMsg.Data.ErrorPercentage)
                              .Set(f => f.SubTasks[-1].Workers[taskMsg.Author.SubType].Unique, taskMsg.Data.UniquePercentage);

                if (taskMsg.Data.StartDate != DateTime.MinValue)
                {
                    upd = upd.Set(f => f.SubTasks[-1].StartDate, taskMsg.Data.StartDate);
                }
                if (!string.IsNullOrEmpty(taskMsg.Data.Report))
                {
                    upd = upd.Set(f => f.SubTasks[-1].Workers[taskMsg.Author.SubType].Report, taskMsg.Data.Report);
                }
                await _taskCollection.FindOneAndUpdateAsync(
                    x => x.Id == taskMsg.Data.ParentId && x.SubTasks.Any(st => st.Id == taskMsg.Data.Id),
                    upd);

                break;
            }
            }
        }