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)); }