Esempio n. 1
0
        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 List <FQueueingScope> GetQueueAbleTime(FRequestProposalForCapability jobProposal
                                                      , long currentTime, CapabilityProviderManager cpm
                                                      , long resourceBlockedUntil, int resourceId)
        {
            //TODO Right now only take the first
            var resourceCapabilityProvider = cpm.GetCapabilityProviderByCapability(jobProposal.CapabilityId);
            var setup = resourceCapabilityProvider.ResourceSetups.Single(x => resourceId.Equals(x.Resource.Id));

            var requiredDuration = 0L;

            if (setup.UsedInProcess)
            {
                requiredDuration += ((FBucket)jobProposal.Job).MaxBucketSize;
            }

            if (setup.UsedInSetup)
            {
                requiredDuration += resourceCapabilityProvider.ResourceSetups.Sum(x => x.SetupTime);
            }

            var usedForSetupAndProcess = setup.UsedInProcess && setup.UsedInSetup;

            var queuingScopes = GetScopesFor(requiredTimeForJob: requiredDuration,
                                             jobProposal.Job,
                                             //jobProposal.CapabilityId,
                                             resourceCapabilityProvider.ResourceCapabilityId,
                                             usedForSetupAndProcess,
                                             currentTime,
                                             resourceBlockedUntil,
                                             cpm);

            return(queuingScopes);
        }
Esempio n. 3
0
        /// <summary>
        /// Is Called from Hub Agent to get an Proposal when the item with a given priority can be scheduled.
        /// </summary>
        /// <param name="jobItem"></param>
        internal void RequestProposal(FRequestProposalForCapability requestProposal)
        {
            var jobConfirmation = _scopeQueue.GetConfirmation(requestProposal.Job.Key);

            if (jobConfirmation != null)
            {
                _scopeQueue.RemoveJob(jobConfirmation);
            }

            Agent.DebugMessage(msg: $"Asked by Hub for Proposal: " + requestProposal.Job.Name + " with Id: " + requestProposal.Job.Key + " for setup " + requestProposal.CapabilityId, CustomLogger.PROPOSAL, LogLevel.Warn);
            SendProposalTo(requestProposal);
        }
 public static RequestProposal Create(FRequestProposalForCapability message, IActorRef target)
 {
     return(new RequestProposal(message: message, target: target));
 }