Пример #1
0
        /// <summary>
        /// Delete specific instance of service (service for specific time not all the services)
        /// </summary>
        /// <param name="schedulingRequest"></param>
        public void CancelSchedulingRequest(SchedulingRequest schedulingRequest)
        {
            throw new NotImplementedException();
            //if(_schedulingRequests.ContainsSimilar(schedulingRequest))

            //_schedulingRequests[schedulingRequest].Canceled = true;
        }
        public CommandResponse SetScheduleExternalProviderInformation(SchedulingRequest request)
        {
            var taskId             = request.Id.ToString();
            var providerId         = request.Provider;
            var providerScheduleId = request.ProviderScheduleId;

            var scheduleInfo = (from sInfo in _repository.ScheduleInfos
                                where sInfo.TaskActivity.Id == taskId
                                select sInfo).FirstOrDefault();

            if (scheduleInfo == null)
            {
                var scheduleNotFoundResponse = CommandResponse.Failed;
                scheduleNotFoundResponse.Description = $"ScheduleInfo Not Found: Task Id:{taskId}";
                return(scheduleNotFoundResponse);
            }

            scheduleInfo.ProviderId         = providerId;
            scheduleInfo.ProviderScheduleId = providerScheduleId;
            _repository.ScheduleInfos.Update(scheduleInfo);
            var count = _repository.SaveChanges();

            if (count > 0)
            {
                return(CommandResponse.Ok);
            }

            var cannotUpdateDatabaseResponse = CommandResponse.Failed;

            cannotUpdateDatabaseResponse.Description =
                $"Cannot update ScheduleInfo: ScheduleInfo Id:{scheduleInfo.Id} Task Id:{taskId}";
            return(cannotUpdateDatabaseResponse);
        }
Пример #3
0
        public void AddChildServiceToSchedule(Legacy.ServiceInstance legacyInstance)
        {
            ServiceConfiguration baseConfiguration;

            if (!_serviceBaseConfigurations.TryGetValue(legacyInstance.Configuration.Name, out baseConfiguration))
            {
                throw new KeyNotFoundException(String.Format("No base configuration exists for the service '{0}'.", legacyInstance.Configuration.Name));
            }

            Profile profile;

            if (!_profiles.TryGetValue(legacyInstance.AccountID, out profile))
            {
                throw new KeyNotFoundException(String.Format("No profile exists with the ID '{0}' (account ID).", legacyInstance.AccountID));
            }

            ServiceInstance childInstance = ServiceInstance.FromLegacyInstance(legacyInstance, baseConfiguration, profile);

            SchedulingRequest request = new SchedulingRequest(childInstance, new SchedulingRule()
            {
                SpecificDateTime  = DateTime.Now,
                Scope             = SchedulingScope.Unplanned,
                MaxDeviationAfter = TimeSpan.FromHours(1)
            }, DateTime.Now);

            AddRequestToSchedule(request);
        }
Пример #4
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="serviceConfiguration"></param>
 public void AddRequestToSchedule(SchedulingRequest request)
 {
     lock (_unscheduledRequests)
     {
         _unscheduledRequests.Add(request);
     }
     _needReschedule = true;
 }
        public virtual CommandResponse CreateScheduledingFromRequest(SchedulingRequest request)
        {
            var scheduleInfo = MapUtil.Map <SchedulingRequest, ScheduleInfo>(request);

            _repository.ScheduleInfos.Add(scheduleInfo);
            var count = _repository.SaveChanges();

            var response = new CommandResponse(request.Id, count > 0, request.Id.ToString());

            return(response);
        }
        public void Handle(ExternalProviderScheduleCreatedEvent message)
        {
            var schedulingRequest = new SchedulingRequest();
            var evt = MapUtil.Map
                      <ExternalProviderScheduleCreatedEvent,
                       SchedulingRequestExternalScheduleProviderCreatedEvent>(message);

            schedulingRequest.Apply(evt);
            var response = _schedulingRepository.SetScheduleExternalProviderInformation(schedulingRequest);

            if (response.Success)
            {
                _eventStore.Save(message);
            }
        }
        public IActionResult Put(long id, [FromBody] SchedulingRequest schedulingRequest)
        {
            _schedulingRequestService.Update(id, schedulingRequest);

            return(Ok());
        }
        public IActionResult Post([FromBody] SchedulingRequest schedulingRequest)
        {
            _schedulingRequestService.Add(schedulingRequest);

            return(Ok());
        }
 public async void Update(long id, SchedulingRequest schedulingRequest)
 {
     await _schedulingRequestRepository.Update(id, schedulingRequest);
 }
 public void Add(SchedulingRequest schedulingRequest)
 {
     _schedulingRequestRepository.Create(schedulingRequest);
 }
Пример #11
0
        /// <summary>
        /// Get this time line services
        /// </summary>
        /// <param name="useCurrentTimeline">if it's for reschedule then the time line is the same as the last schedule</param>
        /// <returns></returns>
        private IEnumerable <SchedulingRequest> GetServicesForTimeLine(bool useCurrentTimeline)
        {
            // Take next timeline if false
            if (!useCurrentTimeline)
            {
                _timeLineFrom = DateTime.Now;
                _timeLineTo   = DateTime.Now.Add(_neededScheduleTimeLine);
            }

            lock (_serviceConfigurationsToSchedule)
            {
                for (int i = 0; i < _serviceConfigurationsToSchedule.Count; i++)
                {
                    ServiceConfiguration service = _serviceConfigurationsToSchedule[i];

                    foreach (SchedulingRule schedulingRule in service.SchedulingRules)
                    {
                        bool ruleSuitable = false;
                        foreach (TimeSpan time in schedulingRule.Times)
                        {
                            DateTime requestedTime = (_timeLineFrom.Date + time).RemoveSeconds();

                            while (requestedTime.Date <= _timeLineTo.Date)
                            {
                                switch (schedulingRule.Scope)
                                {
                                case SchedulingScope.Day:
                                    ruleSuitable = true;
                                    break;

                                case SchedulingScope.Week:
                                    int dayOfWeek = (int)requestedTime.DayOfWeek + 1;
                                    if (schedulingRule.Days.Contains(dayOfWeek))
                                    {
                                        ruleSuitable = true;
                                    }
                                    break;

                                case SchedulingScope.Month:
                                    int dayOfMonth = requestedTime.Day;
                                    if (schedulingRule.Days.Contains(dayOfMonth))
                                    {
                                        ruleSuitable = true;
                                    }
                                    break;
                                }

                                if ((ruleSuitable) &&
                                    (requestedTime >= _timeLineFrom && requestedTime <= _timeLineTo) ||
                                    (requestedTime <= _timeLineFrom && (schedulingRule.MaxDeviationAfter == TimeSpan.Zero || requestedTime.Add(schedulingRule.MaxDeviationAfter) >= DateTime.Now))
                                    )
                                {
                                    SchedulingRequest request = new SchedulingRequest(service, schedulingRule, requestedTime);
                                    if (!_unscheduledRequests.ContainsSignature(request) && !_scheduledRequests.ContainsSignature(request))
                                    {
                                        yield return(request);
                                    }
                                }
                                requestedTime = requestedTime.AddDays(1);
                            }
                        }
                    }
                }
            }
        }