internal void SendProposalTo(FRequestProposalForCapability requestProposal) { Agent.DebugMessage($"Send Proposal for Job {requestProposal.Job.Key} with Priority {requestProposal.Job.Priority(Agent.CurrentTime)}", CustomLogger.PRIORITY, LogLevel.Warn); foreach (var job in _scopeQueue.GetAllJobs()) { Agent.DebugMessage($"{job.Key} with Priority {job.Job.Priority(Agent.CurrentTime)}", CustomLogger.PRIORITY, LogLevel.Warn); } var queuePositions = _scopeQueue.GetQueueAbleTime(requestProposal , currentTime: Agent.CurrentTime , cpm: _capabilityProviderManager , resourceBlockedUntil: _jobInProgress.ResourceIsBusyUntil , resourceId: _resourceId); //TODO Sets Postponed to calculated Duration of Bucket var fPostponed = new FPostponed(offset: queuePositions.Any(x => x.IsQueueAble) ? 0 : Convert.ToInt32(_scopeQueue.Workload * 0.8)); var jobPrio = requestProposal.Job.Priority(Agent.CurrentTime); Agent.DebugMessage(msg: queuePositions.First().IsQueueAble ? $"Bucket: {requestProposal.Job.Name} {requestProposal.Job.Key} IsQueueAble: {queuePositions.First().IsQueueAble} and has satisfiedJobs {((FBucket)requestProposal.Job).HasSatisfiedJob } with EstimatedStart: {queuePositions.First().Scope.Start} and Prio: {jobPrio}" : $"Bucket: {requestProposal.Job.Name} {requestProposal.Job.Key} Postponed: {fPostponed.IsPostponed} with Offset: {fPostponed.Offset} and Prio: {jobPrio} ", CustomLogger.PRIORITY, LogLevel.Warn); // calculate proposal var proposal = new FProposals.FProposal(possibleSchedule: queuePositions , postponed: fPostponed , requestProposal.CapabilityId , resourceAgent: Agent.Context.Self , jobKey: requestProposal.Job.Key); Agent.Send(instruction: Hub.Instruction.Default.ProposalFromResource.Create(message: proposal, target: Agent.Context.Sender)); }
public static void CreateGanttChartForRessource(JobInProgress jobInProgress, IJobQueue scopeQueue, Agent agent) { List <GanttChartItem> ganttData = new List <GanttChartItem>(); if (jobInProgress.IsSet) { ganttData.AddRange(CreateGanttProcessingQueueLog(new[] { jobInProgress.GanttItem }, true, "Processing", jobInProgress, agent)); // add from scope } ganttData.AddRange(CreateGanttProcessingQueueLog(jobInProgress.GanttItems.ToArray(), false, "ReadyElement", jobInProgress, agent)); var jobs = scopeQueue.GetAllJobs().OrderBy(x => x.Job.Priority(agent.CurrentTime)).ToList(); ganttData.AddRange(CreateGanttProcessingQueueLog(jobs.ToArray(), false, "ScopeQueue", jobInProgress, agent)); CustomFileWriter.WriteToFile($"Logs//ResourceScheduleAt-{agent.CurrentTime}.log", JsonConvert.SerializeObject(ganttData).Replace("[", "").Replace("]", ",")); if (jobs.Count > 0) { if (jobs.First().ScopeConfirmation.GetScopeStart() < jobInProgress.ResourceIsBusyUntil) { agent.DebugMessage("Seems wrong"); } } }