private bool IsRuleInTimeframe(SchedulingRule schedulingRule, DateTime requestedTime) { bool isRuleInTimeframe = false; // check if in timeframe by scope switch (schedulingRule.Scope) { case SchedulingScope.Day: isRuleInTimeframe = true; break; case SchedulingScope.Week: var dayOfWeek = (int)requestedTime.DayOfWeek; if (schedulingRule.Days.Contains(dayOfWeek)) { isRuleInTimeframe = true; } break; case SchedulingScope.Month: var dayOfMonth = requestedTime.Day; if (schedulingRule.Days.Contains(dayOfMonth)) { isRuleInTimeframe = true; } break; } isRuleInTimeframe = (isRuleInTimeframe) && ((requestedTime >= _timeframeFrom && requestedTime <= _timeframeTo) || (requestedTime <= _timeframeFrom && (requestedTime.Add(schedulingRule.MaxDeviationAfter) >= DateTime.Now))); return(isRuleInTimeframe); }
public static string DebugInfo(this SchedulingRule rule) { if (rule == null) { return(String.Empty); } return(String.Format("Requested time={0}, scope={1}, max deviation after={2}", rule.Scope, rule.Times.Length > 0 ? rule.Times[0].ToString(@"hh\:mm\:ss") : String.Empty, rule.MaxDeviationAfter.ToString(@"hh\:mm\:ss"))); }
private ServiceInstance CreateServiceInstance(ServiceConfiguration config, SchedulingRule rule, DateTime requestedTime) { try { ServiceInstance request = Environment.NewServiceInstance(config); request.SchedulingInfo = new SchedulingInfo { SchedulingStatus = SchedulingStatus.New, SchedulingScope = rule.Scope, RequestedTime = requestedTime, MaxDeviationBefore = rule.MaxDeviationBefore, MaxDeviationAfter = rule.MaxDeviationAfter, }; AsLockable(request).Lock(_instanceLock); return(request); } catch (Exception ex) { WriteLog(String.Format("Failed create instance for service '{0}' rule '{1}', ex: {2}", config.DebugInfo(), rule.DebugInfo(), ex.Message), ex); } return(null); }