예제 #1
0
 public ScheduleHistoryItem(ScheduleItem objScheduleItem)
 {
     AttachToEvent = objScheduleItem.AttachToEvent;
     CatchUpEnabled = objScheduleItem.CatchUpEnabled;
     Enabled = objScheduleItem.Enabled;
     NextStart = objScheduleItem.NextStart;
     ObjectDependencies = objScheduleItem.ObjectDependencies;
     ProcessGroup = objScheduleItem.ProcessGroup;
     RetainHistoryNum = objScheduleItem.RetainHistoryNum;
     RetryTimeLapse = objScheduleItem.RetryTimeLapse;
     RetryTimeLapseMeasurement = objScheduleItem.RetryTimeLapseMeasurement;
     ScheduleID = objScheduleItem.ScheduleID;
     ScheduleSource = objScheduleItem.ScheduleSource;
     ThreadID = objScheduleItem.ThreadID;
     TimeLapse = objScheduleItem.TimeLapse;
     TimeLapseMeasurement = objScheduleItem.TimeLapseMeasurement;
     TypeFullName = objScheduleItem.TypeFullName;
     Servers = objScheduleItem.Servers;
     FriendlyName = objScheduleItem.FriendlyName;
     _ScheduleHistoryID = Null.NullInteger;
     _StartDate = Null.NullDate;
     EndDate = Null.NullDate;
     _Succeeded = Null.NullBoolean;
     _LogNotes = new StringBuilder();
     _Server = Null.NullString;
 }
        /// <summary>
        /// Upgrades the module.
        /// </summary>
        /// <param name="version">The version.</param>
        /// <returns>A success or failure message.</returns>
        public string UpgradeModule(string version)
        {
            switch (version)
            {
                case "1.0.0":
                    var scheduleItem = new ScheduleItem
                                           {
                                                   TypeFullName = "Engage.Dnn.Booking.EmailScheduler, EngageBooking",
                                                   TimeLapse = 5,
                                                   TimeLapseMeasurement = "m",
                                                   RetryTimeLapse = 10,
                                                   RetryTimeLapseMeasurement = "m",
                                                   RetainHistoryNum = 50,
                                                   AttachToEvent = "None",
                                                   CatchUpEnabled = true,
                                                   Enabled = true,
                                                   ObjectDependencies = string.Empty,
                                                   Servers = string.Empty
                                           };

                    SchedulingProvider.Instance().AddSchedule(scheduleItem);

                    return "Added EmailScheduler task.";
                default:
                    return "No tasks to perform for upgrade to version " + version;
            }
        }
예제 #3
0
 private ScheduleItem CreateScheduleItem()
 {
     var scheduleItem = new ScheduleItem();
     scheduleItem.TypeFullName = "Satrabel.OpenFiles.Components.Lucene.SearchEngineScheduler, OpenFiles";
     scheduleItem.FriendlyName = "OpenFiles.Search";
     //DNN-4964 - values for time lapse and retry frequency can't be set to 0, -1 or left empty (client side validation has been added)
     scheduleItem.TimeLapse = 30;
     scheduleItem.TimeLapseMeasurement = "m";
     scheduleItem.RetryTimeLapse = 30;
     scheduleItem.RetryTimeLapseMeasurement = "m";
     scheduleItem.RetainHistoryNum = 60;
     scheduleItem.AttachToEvent = "";
     scheduleItem.CatchUpEnabled = false;
     scheduleItem.Enabled = true;
     scheduleItem.ObjectDependencies = "SearchEngine";
     scheduleItem.ScheduleStartDate = Null.NullDate;
     scheduleItem.Servers = "";
     return scheduleItem;
 }
예제 #4
0
 public static void AddScheduleTask()
 {
     ScheduleItem oItem = SchedulingProvider.Instance().GetSchedule(typeof(Scheduler).Assembly.FullName, "");
     if (oItem == null)
     {
         oItem = new ScheduleItem();
         oItem.CatchUpEnabled = false;
         oItem.Enabled = true;
         oItem.FriendlyName = "ModuleTemplate.Scheduler";
         oItem.NextStart = DateTime.Now.AddMinutes(4);
         oItem.RetainHistoryNum = 60;
         oItem.RetryTimeLapse = 30;
         oItem.RetryTimeLapseMeasurement = "m";
         oItem.ScheduleSource = ScheduleSource.NOT_SET;
         oItem.TimeLapse = 60;
         oItem.TimeLapseMeasurement = "m";
         oItem.TypeFullName = typeof(Scheduler).Assembly.FullName;
         SchedulingProvider.Instance().AddSchedule(oItem);
     }
 }
예제 #5
0
        public override int AddSchedule(ScheduleItem scheduleItem)
        {
            //Remove item from queue
            Scheduler.CoreScheduler.RemoveFromScheduleQueue(scheduleItem);
            //save item
            scheduleItem.ScheduleID = SchedulingController.AddSchedule(scheduleItem.TypeFullName,
                                                                          scheduleItem.TimeLapse,
                                                                          scheduleItem.TimeLapseMeasurement,
                                                                          scheduleItem.RetryTimeLapse,
                                                                          scheduleItem.RetryTimeLapseMeasurement,
                                                                          scheduleItem.RetainHistoryNum,
                                                                          scheduleItem.AttachToEvent,
                                                                          scheduleItem.CatchUpEnabled,
                                                                          scheduleItem.Enabled,
                                                                          scheduleItem.ObjectDependencies,
                                                                          scheduleItem.Servers,
                                                                          scheduleItem.FriendlyName);
            //Add schedule to queue
            RunScheduleItemNow(scheduleItem);

            //Return Id
            return scheduleItem.ScheduleID;
        }
예제 #6
0
 /// <summary>
 /// cmdDelete_Click runs when the Delete Button is clicked
 /// </summary>
 /// <remarks>
 /// </remarks>
 /// <history>
 /// [cnurse]	9/28/2004	Updated to reflect design changes for Help, 508 support and localisation
 /// </history>
 protected void OnDeleteClick(Object sender, EventArgs e)
 {
     var objScheduleItem = new ScheduleItem {ScheduleID = Convert.ToInt32(ViewState["ScheduleID"])};
     SchedulingProvider.Instance().DeleteSchedule(objScheduleItem);
     var strMessage = Localization.GetString("DeleteSuccess", LocalResourceFile);
     UI.Skins.Skin.AddModuleMessage(this, strMessage, ModuleMessage.ModuleMessageType.GreenSuccess);
 }
예제 #7
0
 public override void RunScheduleItemNow(ScheduleItem scheduleItem)
 {
     RunScheduleItemNow(scheduleItem, false);
 }
예제 #8
0
 /// <summary>
 /// cmdDelete_Click runs when the Delete Button is clicked
 /// </summary>
 /// <returns></returns>
 /// <remarks>
 /// </remarks>
 /// <history>
 /// 	[cnurse]	9/28/2004	Updated to reflect design changes for Help, 508 support
 ///                       and localisation
 /// </history>
 protected void cmdDelete_Click( Object sender, EventArgs e )
 {
     ScheduleItem objScheduleItem = new ScheduleItem();
     objScheduleItem.ScheduleID = Convert.ToInt32( ViewState["ScheduleID"] );
     SchedulingProvider.Instance().DeleteSchedule( objScheduleItem );
     string strMessage;
     strMessage = Localization.GetString( "DeleteSuccess", this.LocalResourceFile );
     UI.Skins.Skin.AddModuleMessage( this, strMessage, ModuleMessageType.GreenSuccess );
     pnlScheduleItem.Visible = false;
 }
        private ScheduleItem CreateScheduleItem()
        {
            var scheduleItem = new ScheduleItem();
            scheduleItem.TypeFullName = txtType.Text;
            scheduleItem.FriendlyName = txtFriendlyName.Text;
            if (String.IsNullOrEmpty(txtTimeLapse.Text) || txtTimeLapse.Text == "0" || txtTimeLapse.Text == "-1")
            {
                scheduleItem.TimeLapse = Null.NullInteger;
            }
            else
            {
                scheduleItem.TimeLapse = Convert.ToInt32(txtTimeLapse.Text);
            }
            scheduleItem.TimeLapseMeasurement = ddlTimeLapseMeasurement.SelectedItem.Value;

            if (String.IsNullOrEmpty(txtRetryTimeLapse.Text) || txtRetryTimeLapse.Text == "0" || txtRetryTimeLapse.Text == "-1")
            {
                scheduleItem.RetryTimeLapse = Null.NullInteger;
            }
            else
            {
                scheduleItem.RetryTimeLapse = Convert.ToInt32(txtRetryTimeLapse.Text);
            }
            scheduleItem.RetryTimeLapseMeasurement = ddlRetryTimeLapseMeasurement.SelectedItem.Value;
            scheduleItem.RetainHistoryNum = Convert.ToInt32(ddlRetainHistoryNum.SelectedItem.Value);
            scheduleItem.AttachToEvent = ddlAttachToEvent.SelectedItem.Value;
            scheduleItem.CatchUpEnabled = chkCatchUpEnabled.Checked;
            scheduleItem.Enabled = chkEnabled.Checked;
            scheduleItem.ObjectDependencies = txtObjectDependencies.Text;

            //if servers are specified, the concatenated string needs to be prefixed and suffixed by commas ( ie. ",SERVER1,SERVER2," )
            var servers = Null.NullString;
            var bAllSelected = true;
            foreach (ListItem item in lstServers.Items)
            {
                if (item.Selected)
                {
                    servers += "," + item.Value;
                }
                else
                {
                    bAllSelected = Null.NullBoolean;
                }
            }
            if (bAllSelected)
            {
                servers = Null.NullString;
            }
            if (!string.IsNullOrEmpty(servers))
            {
                scheduleItem.Servers = servers + ",";
            }
            return scheduleItem;
        }
예제 #10
0
 //DNN-5001 Possibility to stop already running tasks
 public override void RemoveFromScheduleInProgress(ScheduleItem scheduleItem)
 {
     //get ScheduleHistoryItem of the running task
     var runningscheduleHistoryItem = GetScheduleHistory(scheduleItem.ScheduleID).Cast<ScheduleHistoryItem>().ElementAtOrDefault(0);
     Scheduler.CoreScheduler.StopScheduleInProgress(scheduleItem, runningscheduleHistoryItem);
 }
예제 #11
0
 public abstract void RemoveFromScheduleInProgress(ScheduleItem scheduleItem);
예제 #12
0
 public override void DeleteSchedule(ScheduleItem scheduleItem)
 {
     SchedulingController.DeleteSchedule(scheduleItem.ScheduleID);
     Scheduler.CoreScheduler.RemoveFromScheduleQueue(scheduleItem);
     DataCache.RemoveCache("ScheduleLastPolled");
 }
예제 #13
0
 public override void UpdateScheduleWithoutExecution(ScheduleItem scheduleItem)
 {
     SchedulingController.UpdateSchedule(scheduleItem);
 }
예제 #14
0
 public abstract void UpdateSchedule(ScheduleItem scheduleItem);
예제 #15
0
 public abstract void UpdateScheduleWithoutExecution(ScheduleItem scheduleItem);
예제 #16
0
 public abstract int AddSchedule(ScheduleItem scheduleItem);
예제 #17
0
 public virtual void RunScheduleItemNow(ScheduleItem scheduleItem)
 {
     //Do Nothing
 }
예제 #18
0
 public abstract void DeleteSchedule(ScheduleItem scheduleItem);
예제 #19
0
 public virtual void RunScheduleItemNow(ScheduleItem scheduleItem, bool runNow)
 {
     //Do Nothing
 }
예제 #20
0
 public override void RunScheduleItemNow(ScheduleItem scheduleItem)
 {
     RunScheduleItemNow(scheduleItem, false);
 }
예제 #21
0
 /// <summary>
 /// Removes an item from the collection of schedule items in queue.
 /// </summary>
 /// <param name="scheduleItem">Item to remove</param>
 public static void RemoveFromScheduleQueue(ScheduleItem scheduleItem)
 {
     try
     {
         using (ScheduleQueue.GetWriteLock(LockTimeout))
         {
             //the scheduleitem instances may not be equal even though the scheduleids are equal
             ScheduleItem item = ScheduleQueue.Where(si => si.ScheduleID == scheduleItem.ScheduleID).SingleOrDefault();
             if (item != null)
             {
                 ScheduleQueue.Remove(item);
             }
         }
     }
     catch (ApplicationException ex)
     {
         // The writer lock request timed out.
         Interlocked.Increment(ref _writerTimeouts);
         Exceptions.Exceptions.LogException(ex);
     }
 }
예제 #22
0
 public override void DeleteSchedule(ScheduleItem scheduleItem)
 {
     SchedulingController.DeleteSchedule(scheduleItem.ScheduleID);
     Scheduler.CoreScheduler.RemoveFromScheduleQueue(scheduleItem);
     DataCache.RemoveCache("ScheduleLastPolled");
 }
예제 #23
0
        public override void RunScheduleItemNow(ScheduleItem scheduleItem, bool runNow)
        {
            //Remove item from queue
            Scheduler.CoreScheduler.RemoveFromScheduleQueue(scheduleItem);
            var scheduleHistoryItem = new ScheduleHistoryItem(scheduleItem) { NextStart = runNow ? DateTime.Now : (scheduleItem.ScheduleStartDate != Null.NullDate ? scheduleItem.ScheduleStartDate : DateTime.Now) };

            if (scheduleHistoryItem.TimeLapse != Null.NullInteger
                && scheduleHistoryItem.TimeLapseMeasurement != Null.NullString
                && scheduleHistoryItem.Enabled
                && CanRunOnThisServer(scheduleItem.Servers))
            {
                scheduleHistoryItem.ScheduleSource = ScheduleSource.STARTED_FROM_SCHEDULE_CHANGE;
                Scheduler.CoreScheduler.AddToScheduleQueue(scheduleHistoryItem);
            }

            DataCache.RemoveCache("ScheduleLastPolled");
        }
예제 #24
0
            //DNN-5001
            public static void StopScheduleInProgress(ScheduleItem scheduleItem, ScheduleHistoryItem runningscheduleHistoryItem)
            {
                try
                {
                    //attempt to stop task only if it is still in progress
                    if (GetScheduleItemFromScheduleInProgress(scheduleItem) != null)
                    {
                        var scheduleHistoryItem = GetScheduleItemFromScheduleInProgress(scheduleItem);
                        scheduleHistoryItem.ScheduleHistoryID = runningscheduleHistoryItem.ScheduleHistoryID;
                        scheduleHistoryItem.StartDate = runningscheduleHistoryItem.StartDate;
                        //Remove the object in the ScheduleInProgress collection
                        RemoveFromScheduleInProgress(scheduleHistoryItem);

                        //A SchedulerClient is notifying us that their
                        //process has completed.  Decrease our ActiveThreadCount
                        Interlocked.Decrement(ref _activeThreadCount);

                        //Update the schedule item object property
                        //to note the end time and next start
                        scheduleHistoryItem.EndDate = DateTime.Now;

                        if (scheduleHistoryItem.ScheduleSource == ScheduleSource.STARTED_FROM_EVENT)
                        {
                            scheduleHistoryItem.NextStart = Null.NullDate;
                        }
                        else
                        {
                            if (scheduleHistoryItem.CatchUpEnabled)
                            {
                                switch (scheduleHistoryItem.TimeLapseMeasurement)
                                {
                                    case "s":
                                        scheduleHistoryItem.NextStart =
                                            scheduleHistoryItem.NextStart.AddSeconds(scheduleHistoryItem.TimeLapse);
                                        break;
                                    case "m":
                                        scheduleHistoryItem.NextStart =
                                            scheduleHistoryItem.NextStart.AddMinutes(scheduleHistoryItem.TimeLapse);
                                        break;
                                    case "h":
                                        scheduleHistoryItem.NextStart =
                                            scheduleHistoryItem.NextStart.AddHours(scheduleHistoryItem.TimeLapse);
                                        break;
                                    case "d":
                                        scheduleHistoryItem.NextStart =
                                            scheduleHistoryItem.NextStart.AddDays(scheduleHistoryItem.TimeLapse);
                                        break;
                                    case "w":
                                        scheduleHistoryItem.NextStart =
                                            scheduleHistoryItem.StartDate.AddDays(scheduleHistoryItem.TimeLapse*7);
                                        break;
                                    case "mo":
                                        scheduleHistoryItem.NextStart =
                                            scheduleHistoryItem.StartDate.AddMonths(scheduleHistoryItem.TimeLapse);
                                        break;
                                    case "y":
                                        scheduleHistoryItem.NextStart =
                                            scheduleHistoryItem.StartDate.AddYears(scheduleHistoryItem.TimeLapse);
                                        break;
                                }
                            }
                            else
                            {
                                switch (scheduleHistoryItem.TimeLapseMeasurement)
                                {
                                    case "s":
                                        scheduleHistoryItem.NextStart =
                                            scheduleHistoryItem.StartDate.AddSeconds(scheduleHistoryItem.TimeLapse);
                                        break;
                                    case "m":
                                        scheduleHistoryItem.NextStart =
                                            scheduleHistoryItem.StartDate.AddMinutes(scheduleHistoryItem.TimeLapse);
                                        break;
                                    case "h":
                                        scheduleHistoryItem.NextStart =
                                            scheduleHistoryItem.StartDate.AddHours(scheduleHistoryItem.TimeLapse);
                                        break;
                                    case "d":
                                        scheduleHistoryItem.NextStart =
                                            scheduleHistoryItem.StartDate.AddDays(scheduleHistoryItem.TimeLapse);
                                        break;
                                    case "w":
                                        scheduleHistoryItem.NextStart =
                                            scheduleHistoryItem.StartDate.AddDays(scheduleHistoryItem.TimeLapse*7);
                                        break;
                                    case "mo":
                                        scheduleHistoryItem.NextStart =
                                            scheduleHistoryItem.StartDate.AddMonths(scheduleHistoryItem.TimeLapse);
                                        break;
                                    case "y":
                                        scheduleHistoryItem.NextStart =
                                            scheduleHistoryItem.StartDate.AddYears(scheduleHistoryItem.TimeLapse);
                                        break;
                                }
                            }
                        }
                        //Update the ScheduleHistory in the database
                        UpdateScheduleHistory(scheduleHistoryItem);


                        if (scheduleHistoryItem.NextStart != Null.NullDate)
                        {
                            //Put the object back into the ScheduleQueue
                            //collection with the new NextStart date.
                            scheduleHistoryItem.StartDate = Null.NullDate;
                            scheduleHistoryItem.EndDate = Null.NullDate;
                            scheduleHistoryItem.LogNotes = "";
                            scheduleHistoryItem.ProcessGroup = -1;
                            AddToScheduleQueue(scheduleHistoryItem);
                        }

                        //Write out the log entry for this event
                        var log = new LogInfo {LogTypeKey = "SCHEDULER_EVENT_COMPLETED"};
                        log.AddProperty("REASON", "Scheduler task has been stopped manually");
                        log.AddProperty("TYPE", scheduleHistoryItem.TypeFullName);
                        log.AddProperty("THREAD ID", Thread.CurrentThread.GetHashCode().ToString());
                        log.AddProperty("NEXT START", Convert.ToString(scheduleHistoryItem.NextStart));
                        LogController.Instance.AddLog(log);
                    }

                }
                catch (Exception exc)
                {
                    Exceptions.Exceptions.ProcessSchedulerException(exc);
                }
            }
예제 #25
0
        public override void UpdateSchedule(ScheduleItem scheduleItem)
        {
            //Remove item from queue
            Scheduler.CoreScheduler.RemoveFromScheduleQueue(scheduleItem);
            //save item
            SchedulingController.UpdateSchedule(scheduleItem.ScheduleID,
                                                scheduleItem.TypeFullName,
                                                scheduleItem.TimeLapse,
                                                scheduleItem.TimeLapseMeasurement,
                                                scheduleItem.RetryTimeLapse,
                                                scheduleItem.RetryTimeLapseMeasurement,
                                                scheduleItem.RetainHistoryNum,
                                                scheduleItem.AttachToEvent,
                                                scheduleItem.CatchUpEnabled,
                                                scheduleItem.Enabled,
                                                scheduleItem.ObjectDependencies,
                                                scheduleItem.Servers,
                                                scheduleItem.FriendlyName,
                                                scheduleItem.ScheduleStartDate);
            //Update items that are already scheduled
            var futureHistory = GetScheduleHistory(scheduleItem.ScheduleID).Cast<ScheduleHistoryItem>().Where(h => h.NextStart > DateTime.Now);

            var scheduleItemStart = scheduleItem.ScheduleStartDate > DateTime.Now
                                        ? scheduleItem.ScheduleStartDate
                                        : scheduleItem.NextStart;
            foreach (var scheduleHistoryItem in futureHistory)
            {
                scheduleHistoryItem.NextStart = scheduleItemStart;
                SchedulingController.UpdateScheduleHistory(scheduleHistoryItem);
            }


            //Add schedule to queue
            RunScheduleItemNow(scheduleItem);
        }
예제 #26
0
 private static bool IsInProgress(ScheduleItem scheduleItem)
 {
     try
     {
         using (ScheduleInProgress.GetReadLock(LockTimeout))
         {
             return ScheduleInProgress.Any(si => si.ScheduleID == scheduleItem.ScheduleID);
         }
     }
     catch (ApplicationException ex)
     {
         // The reader lock request timed out.
         Interlocked.Increment(ref _readerTimeouts);
         Logger.Debug(ex);
         return false;
     }
 }
예제 #27
0
 public virtual void RunScheduleItemNow(ScheduleItem scheduleItem, bool runNow)
 {
     //Do Nothing
 }
예제 #28
0
 /// <summary>
 /// Gets a schedulehistory item from the collection of schedule items in progress.
 /// </summary>
 /// <param name="scheduleItem"></param>
 /// <remarks>Thread Safe</remarks>
 private static ScheduleHistoryItem GetScheduleItemFromScheduleInProgress(ScheduleItem scheduleItem)
 {
     try
     {
         using (ScheduleInProgress.GetWriteLock(LockTimeout))
         {
             ScheduleHistoryItem item = ScheduleInProgress.Where(si => si.ScheduleID == scheduleItem.ScheduleID).SingleOrDefault();
             return item;
         }
         
     }
     catch (ApplicationException ex)
     {
         // The writer lock request timed out.
         Interlocked.Increment(ref _writerTimeouts);
         Exceptions.Exceptions.LogException(ex);
     }
     return null;
 }
예제 #29
0
 private static bool ScheduleQueueContains(ScheduleItem objScheduleItem)
 {
     try
     {
         using (ScheduleQueue.GetReadLock(LockTimeout))
         {
             return ScheduleQueue.Any(si => si.ScheduleID == objScheduleItem.ScheduleID);
         }
     }
     catch (ApplicationException ex)
     {
         Interlocked.Increment(ref _readerTimeouts);
         Exceptions.Exceptions.LogException(ex);
         return false;
     }
 }
예제 #30
0
 internal static bool IsInQueue(ScheduleItem scheduleItem)
 {
     try
     {
         using (ScheduleQueue.GetReadLock(LockTimeout))
         {
             return ScheduleQueue.Any(si => si.ScheduleID == scheduleItem.ScheduleID);
         }
     }
     catch (ApplicationException)
     {
         // The reader lock request timed out.
         Interlocked.Increment(ref _readerTimeouts);
         return false;
     }
 }
예제 #31
0
        /// <summary>
        /// cmdUpdate_Click runs when the Update Button is clicked
        /// </summary>
        /// <returns></returns>
        /// <remarks>
        /// </remarks>
        /// <history>
        /// 	[cnurse]	9/28/2004	Updated to reflect design changes for Help, 508 support
        ///                       and localisation
        /// </history>
        protected void cmdUpdate_Click( Object sender, EventArgs e )
        {
            ScheduleItem objScheduleItem = new ScheduleItem();
            string strMessage;
            objScheduleItem.TypeFullName = txtType.Text;
            if( txtTimeLapse.Text == "" || txtTimeLapse.Text == "0" || txtTimeLapse.Text == "-1" )
            {
                objScheduleItem.TimeLapse = Null.NullInteger;
            }
            else
            {
                objScheduleItem.TimeLapse = Convert.ToInt32( txtTimeLapse.Text );
            }

            objScheduleItem.TimeLapseMeasurement = ddlTimeLapseMeasurement.SelectedItem.Value;

            if( txtRetryTimeLapse.Text == "" || txtRetryTimeLapse.Text == "0" || txtRetryTimeLapse.Text == "-1" )
            {
                objScheduleItem.RetryTimeLapse = Null.NullInteger;
            }
            else
            {
                objScheduleItem.RetryTimeLapse = Convert.ToInt32( txtRetryTimeLapse.Text );
            }

            objScheduleItem.RetryTimeLapseMeasurement = ddlRetryTimeLapseMeasurement.SelectedItem.Value;
            objScheduleItem.RetainHistoryNum = Convert.ToInt32( ddlRetainHistoryNum.SelectedItem.Value );
            objScheduleItem.AttachToEvent = ddlAttachToEvent.SelectedItem.Value;
            objScheduleItem.CatchUpEnabled = chkCatchUpEnabled.Checked;
            objScheduleItem.Enabled = chkEnabled.Checked;
            objScheduleItem.ObjectDependencies = txtObjectDependencies.Text;
            objScheduleItem.Servers = txtServers.Text;

            if( ViewState["ScheduleID"] != null )
            {
                objScheduleItem.ScheduleID = Convert.ToInt32( ViewState["ScheduleID"] );
                SchedulingProvider.Instance().UpdateSchedule( objScheduleItem );
            }
            else
            {
                SchedulingProvider.Instance().AddSchedule( objScheduleItem );
            }
            strMessage = Localization.GetString( "UpdateSuccess", this.LocalResourceFile );
            UI.Skins.Skin.AddModuleMessage( this, strMessage, ModuleMessageType.GreenSuccess );
            if( SchedulingProvider.SchedulerMode == SchedulerMode.TIMER_METHOD )
            {
                SchedulingProvider.Instance().ReStart( "Change made to schedule." );
            }
            BindData();
            cmdDelete.Visible = true;
        }
예제 #32
0
 public abstract int AddSchedule(ScheduleItem scheduleItem);
예제 #33
0
        private ScheduleItem CreateScheduleItem()
        {
            var scheduleItem = new ScheduleItem();
            scheduleItem.TypeFullName = txtType.Text;
            scheduleItem.FriendlyName = txtFriendlyName.Text;
            //DNN-4964 - values for time lapse and retry frequency can't be set to 0, -1 or left empty (client side validation has been added)
            scheduleItem.TimeLapse = Convert.ToInt32(txtTimeLapse.Text);
            scheduleItem.TimeLapseMeasurement = ddlTimeLapseMeasurement.SelectedItem.Value;
            scheduleItem.RetryTimeLapse = Convert.ToInt32(txtRetryTimeLapse.Text);
            scheduleItem.RetryTimeLapseMeasurement = ddlRetryTimeLapseMeasurement.SelectedItem.Value;
            scheduleItem.RetainHistoryNum = Convert.ToInt32(ddlRetainHistoryNum.SelectedItem.Value);
            scheduleItem.AttachToEvent = ddlAttachToEvent.SelectedItem.Value;
            scheduleItem.CatchUpEnabled = chkCatchUpEnabled.Checked;
            scheduleItem.Enabled = chkEnabled.Checked;
            scheduleItem.ObjectDependencies = txtObjectDependencies.Text;
            scheduleItem.ScheduleStartDate = startScheduleDatePicker.SelectedDate != null
                                                 ? startScheduleDatePicker.SelectedDate.Value
                                                 : Null.NullDate; 

            //if servers are specified, the concatenated string needs to be prefixed and suffixed by commas ( ie. ",SERVER1,SERVER2," )
            var servers = Null.NullString;

            if (!String.IsNullOrEmpty(txtServers.Text))
            {
                servers = txtServers.Text;
                
            }
            
            if (!string.IsNullOrEmpty(servers))
            {
                if (!servers.StartsWith(","))
                {
                    servers = "," +servers; 
                }
                if (!servers.EndsWith(","))
                {
                    servers = servers + ",";
                }
            }
            scheduleItem.Servers = servers;
            return scheduleItem;
        }
예제 #34
0
 public abstract void DeleteSchedule(ScheduleItem scheduleItem);
예제 #35
0
            private static void LogWhyTaskNotRun(ScheduleItem scheduleItem)
            {
                if (_debug)
                {
                    bool appended = false;
                    var strDebug = new StringBuilder("Task not run because ");
                    if (!(scheduleItem.NextStart <= DateTime.Now))
                    {
                        strDebug.Append(" task is scheduled for " + scheduleItem.NextStart);
                        appended = true;
                    }


                    if (!scheduleItem.Enabled)
                    {
                        if (appended)
                        {
                            strDebug.Append(" and");
                        }
                        strDebug.Append(" task is not enabled");
                        appended = true;
                    }
                    if (IsInProgress(scheduleItem))
                    {
                        if (appended)
                        {
                            strDebug.Append(" and");
                        }
                        strDebug.Append(" task is already in progress");
                        appended = true;
                    }
                    if (HasDependenciesConflict(scheduleItem))
                    {
                        if (appended)
                        {
                            strDebug.Append(" and");
                        }
                        strDebug.Append(" task has conflicting dependency");
                    }
                    var log = new LogInfo();
                    log.AddProperty("EVENT NOT RUN REASON", strDebug.ToString());
                    log.AddProperty("SCHEDULE ID", scheduleItem.ScheduleID.ToString());
                    log.AddProperty("TYPE FULL NAME", scheduleItem.TypeFullName);
                    log.LogTypeKey = "DEBUG";
                    LogController.Instance.AddLog(log);
                }
            }
예제 #36
0
 public abstract void RemoveFromScheduleInProgress(ScheduleItem scheduleItem);
예제 #37
0
 public abstract void UpdateSchedule(ScheduleItem scheduleItem);
예제 #38
0
 private static void LogEventAddedToProcessGroup(ScheduleItem scheduleItem)
 {
     if (_debug)
     {
         var log = new LogInfo();
         log.AddProperty("EVENT ADDED TO PROCESS GROUP " + scheduleItem.ProcessGroup, scheduleItem.TypeFullName);
         log.AddProperty("SCHEDULE ID", scheduleItem.ScheduleID.ToString());
         log.LogTypeKey = "DEBUG";
         LogController.Instance.AddLog(log);
     }
 }
예제 #39
0
 public virtual void RunScheduleItemNow(ScheduleItem scheduleItem)
 {
     //Do Nothing
 }
예제 #40
0
            public static bool HasDependenciesConflict(ScheduleItem scheduleItem)
            {
                try
                {
                    using (ScheduleInProgress.GetReadLock(LockTimeout))
                    {
                        if (scheduleItem.ObjectDependencies.Any())
                        {
                            foreach (ScheduleHistoryItem item in ScheduleInProgress.Where(si => si.ObjectDependencies.Any()))
                            {
                                if (item.HasObjectDependencies(scheduleItem.ObjectDependencies))
                                {
                                    return true;
                                }
                            }
                        }
                    }

                    return false;
                }
                catch (ApplicationException ex)
                {
                    // The reader lock request timed out.
                    Interlocked.Increment(ref _readerTimeouts);
                    Logger.Debug(ex);
                    return false;
                }
            }