public void CheckTaskDefinitionUpdate() { var comment = Generator.Name(); var payer = new Payer("Тестовый плательщик"); var report = new GeneralReport(payer) { Comment = comment }; session.Save(payer); session.Save(report); var helper = new ScheduleHelper(); helper.GetTaskOrCreate(report.Id, report.Comment); var reportPage = new Reports_GeneralReports { DbSession = session }; comment = Generator.Name(); report.Comment = comment; session.Save(report); session.Flush(); reportPage.UpdateTasksForGeneralReports(new List <ulong>(), new List <ulong> { report.Id }); var task = helper.GetTaskOrCreate(report.Id, report.Comment); Assert.AreEqual(task.Definition.RegistrationInfo.Description, comment); }
private void RunSelfTaskAndUpdateAction() { string user = HttpContext.Current.User.Identity.Name.Replace(@"ANALIT\", string.Empty); var thisTask = ScheduleHelper.GetTaskOrCreate(taskService, reportsFolder, Convert.ToUInt64(_generalReport.Id), user, "temp_"); var newAction = new ExecAction(ScheduleHelper.ScheduleAppPath, "/gr:" + _generalReport.Id + string.Format(" /inter:true /dtFrom:{0} /dtTo:{1} /manual:true", DateTime.Parse(dtFrom.Value).ToShortDateString(), DateTime.Parse(dtTo.Value).ToShortDateString()), ScheduleHelper.ScheduleWorkDir); var taskDefinition = thisTask.Definition; taskDefinition.Actions.RemoveAt(0); taskDefinition.Actions.Add(newAction); taskDefinition.RegistrationInfo.Description = user; taskDefinition.Settings.RunOnlyIfIdle = false; taskDefinition.Settings.StopIfGoingOnBatteries = false; taskDefinition.Settings.DisallowStartIfOnBatteries = false; taskDefinition.Settings.StopIfGoingOnBatteries = false; ScheduleHelper.UpdateTaskDefinition(taskService, reportsFolder, Convert.ToUInt64(_generalReport.Id), taskDefinition, "temp_"); if (thisTask.State != TaskState.Running) { thisTask.Run(); Session.Add("StartTaskTime", DateTime.Now); Response.Redirect("Schedule.aspx?r=" + _generalReport.Id); } }
public void Set_shedule_month() { var report = CreateReport("Mixed"); Open($"/Reports/schedule.aspx?r={report.GeneralReport.Id}"); Click("Добавить ежемесячное расписание"); //Чекбоксы должны быть выбраны по-умолчанию, но на всякий случай оставляю код //browser.Div("firstSixMonth").ChildOfType<CheckBox>(box => !box.Checked).Checked = true; //browser.Div("firstFifteenDays").ChildOfType<CheckBox>(box => !box.Checked).Checked = true; Click("Применить"); AssertText("Временной промежуток от 23:00 до 4:00 является недопустимым для времени выполнения отчета"); var text = browser.FindElementsByCssSelector("input[type=\"text\"]").First(x => x.GetAttribute("value") == "0:00"); text.Clear(); text.SendKeys("10:00"); Click("Применить"); AssertNoText("Временной промежуток от 23:00 до 4:00 является недопустимым для времени выполнения отчета"); AssertText("Задать расписание для отчета"); var taskService = ScheduleHelper.GetService(); var reportsFolder = ScheduleHelper.GetReportsFolder(taskService); var currentTask = ScheduleHelper.GetTaskOrCreate(taskService, reportsFolder, report.GeneralReport.Id, "", "GR"); Assert.That(currentTask.Definition.Settings.RestartCount == 3); Assert.That(currentTask.Definition.Settings.RestartInterval == new TimeSpan(0, 15, 0)); Assert.That(currentTask.Definition.Settings.StartWhenAvailable); Click(By.CssSelector(".deleteMonthItem")); Click("Применить"); }
public void Temporary_task_should_not_contains_triggers() { var service = ScheduleHelper.GetService(); var folder = ScheduleHelper.GetReportsFolder(service); ScheduleHelper.DeleteTask(folder, 100, "GR"); ScheduleHelper.DeleteTask(folder, 1, "temp"); var task = ScheduleHelper.GetTaskOrCreate(service, folder, 100, "", "GR"); ScheduleHelper.SetTaskEnableStatus(100, true, "GR"); var definition = task.Definition; var trigger = new WeeklyTrigger { DaysOfWeek = DaysOfTheWeek.Friday, WeeksInterval = 1, StartBoundary = DateTime.Now }; definition.Triggers.Add(trigger); ScheduleHelper.UpdateTaskDefinition(service, folder, Convert.ToUInt64(100), definition, "GR"); task = ScheduleHelper.FindTask(service, folder, 100, "GR"); Assert.That(task.Definition.Triggers.Count, Is.EqualTo(1)); var temp = Report.CreateTemporaryTaskForRunFromInterface(service, folder, task, "cmd /c echo"); Assert.That(temp.Definition.Triggers.Count, Is.EqualTo(0)); }
protected void Page_Load(object sender, EventArgs e) { if (String.IsNullOrEmpty(Request["TemporaryId"])) { Response.Redirect("base.aspx"); } else { uint contactOwnerId; if (uint.TryParse(ConfigurationManager.AppSettings["ReportsContactGroupOwnerId"], out contactOwnerId)) { try { _reportsContactGroupOwner = ContactGroupOwner.Find(contactOwnerId); } catch (NotFoundException exp) { throw new ReportTunerException("В файле Web.Config параметр ReportsContactGroupOwnerId указывает на несуществующую запись.", exp); } } else { throw new ReportTunerException("В файле Web.Config параметр ReportsContactGroupOwnerId не существует или настроен некорректно."); } _generalReport = GeneralReport.Find(Convert.ToUInt64(Request["TemporaryId"])); _taskService = ScheduleHelper.GetService(); _currentTask = ScheduleHelper.GetTaskOrCreate( _taskService, ScheduleHelper.GetReportsFolder(_taskService), _generalReport.Id, "Временный отчет, созданный " + _generalReport.TemporaryCreationDate.Value.ToString(), "GR"); btnRun.Enabled = _currentTask.Enabled && (_currentTask.State != TaskState.Running); btnRun.Text = (_currentTask.State == TaskState.Running) ? StatusNotRunning : StatusRunning; if ((_generalReport.ContactGroup == null) && btnRun.Enabled) { btnRun.Enabled = false; } if (!IsPostBack) { ClearSearch(); if (_generalReport.ContactGroup != null) { lContactGroupName.Text = _generalReport.ContactGroup.Name; } } } }
public void CurrentTaskStartReport() { var report = CreateReport("Mixed"); Open($"/Reports/schedule.aspx?r={report.GeneralReport.Id}"); Click("Выполнить задание"); Thread.Sleep(500); var taskService = ScheduleHelper.GetService(); var reportsFolder = ScheduleHelper.GetReportsFolder(taskService); var currentTask = ScheduleHelper.GetTaskOrCreate(taskService, reportsFolder, report.GeneralReport.Id, "", "GR"); Assert.That(((ExecAction)currentTask.Definition.Actions[0]).Arguments, Does.Contain("manual:true")); }
public static Task CreateTemporaryTaskForRunFromInterface(TaskService service, TaskFolder folder, Task source, string action) { var task = ScheduleHelper.GetTaskOrCreate(service, folder, Convert.ToUInt64(1), "tempTask1", "temp"); var sourceDefinition = source.Definition; sourceDefinition.Triggers.Clear(); ScheduleHelper.UpdateTaskDefinition(service, folder, Convert.ToUInt64(1), sourceDefinition, "temp"); ScheduleHelper.SetTaskEnableStatus(1, true, "temp"); var definition = task.Definition; var newAction = new ExecAction(ScheduleHelper.ScheduleAppPath, action, ScheduleHelper.ScheduleWorkDir); definition.Actions.RemoveAt(0); definition.Actions.Add(newAction); ScheduleHelper.UpdateTaskDefinition(service, folder, Convert.ToUInt64(1), definition, "temp"); return(task); }
public void RunTask() { var taskService = ScheduleHelper.GetService(); var reportsFolder = ScheduleHelper.GetReportsFolder(taskService); var currentTask = ScheduleHelper.GetTaskOrCreate(taskService, reportsFolder, 1, "Это тестовый отчет Морозова (Рейтинг)", "GR"); currentTask.Run(); Thread.Sleep(500); if (currentTask != null) { currentTask.Dispose(); currentTask = null; } if (taskService != null) { taskService.Dispose(); taskService = null; } }
public void Base_test() { var report = new GeneralReport(); session.Save(report); var helper = new ScheduleHelper(); helper.GetTaskOrCreate(report.Id); ScheduleHelper.SetTaskAction(report.Id, String.Format("/gr:{0} /manual:true", report.Id)); session.CreateSQLQuery("delete from `logs`.reportexecutelogs; update reports.general_reports set allow = 0;").ExecuteUpdate(); session.Transaction.Commit(); Program.Main(new[] { String.Format("/gr:{0}", report.Id) }); var reportLogCount = session.Query <ReportExecuteLog>().Count(); Assert.AreEqual(reportLogCount, 1); var currentTask = helper.FindTask(report.Id); Assert.That(((ExecAction)currentTask.Definition.Actions[0]).Arguments, Does.Contain("manual:true")); }
public void UpdateTasksForGeneralReports(List <ulong> deletedReports, List <ulong> updatedReports) { if ((deletedReports.Count > 0) || (updatedReports.Count > 0)) { using (var helper = new ScheduleHelper()) { foreach (var id in updatedReports) { var report = DbSession.Get <GeneralReport>(id); helper.GetTaskOrCreate(id, report.Comment); ScheduleHelper.SetTaskComment(id, report.Comment, "GR"); ScheduleHelper.SetTaskEnableStatus(id, report.Allow, "GR"); } foreach (var id in deletedReports) { helper.DeleteReportTask(id); } } } }
protected void Page_Load(object sender, EventArgs e) { if ((Request.UrlReferrer == null || !Request.UrlReferrer.LocalPath.Contains("Schedule.aspx")) && Session["StartTaskTime"] != null) { Session.Remove("StartTaskTime"); } if (Request["r"] == null) { Response.Redirect("GeneralReports.aspx"); } _generalReport = GeneralReport.Find(Convert.ToUInt64(Request["r"])); taskService = ScheduleHelper.GetService(); reportsFolder = ScheduleHelper.GetReportsFolder(taskService); currentTask = ScheduleHelper.GetTaskOrCreate(taskService, reportsFolder, _generalReport.Id, _generalReport.Comment, "GR"); currentTaskDefinition = currentTask.Definition; tempTask = ScheduleHelper.FindTaskNullable(reportsFolder, _generalReport.Id, "temp_"); TaskState tempTaskState; string tempTaskDescription = string.Empty; if (tempTask != null) { tempTaskState = tempTask.State; tempTaskDescription = tempTask.Definition.RegistrationInfo.Description; } else { tempTaskState = TaskState.Unknown; } btnExecute.Enabled = currentTask.State != TaskState.Running && tempTaskState != TaskState.Running; btnExecute.Text = (currentTask.State == TaskState.Running) ? StatusNotRunning : StatusRunning; var userName = HttpContext.Current.User.Identity.Name.Replace(@"ANALIT\", string.Empty); ErrorMassage.Text = string.Empty; ErrorMassage.CssClass = "error"; var description = tempTaskState == TaskState.Running ? string.Format("(запустил: {0})", tempTaskDescription) : string.Empty; if (tempTaskState == TaskState.Running || currentTask.State == TaskState.Running) { ExecAction action = null; var currentReportNumber = ""; ulong runningNumber = 0; if (tempTaskState == TaskState.Running) { if (tempTask != null) { action = (ExecAction)tempTask.Definition.Actions.FirstOrDefault(); } } else { action = (ExecAction)currentTask.Definition.Actions.FirstOrDefault(); } if (action != null) { var arguments = (action).Arguments; if (!String.IsNullOrEmpty(arguments)) { if (arguments.IndexOf("/gr:") >= 0) { var substring = arguments.Substring(arguments.IndexOf("/gr:") + 4); var numberLength = substring.IndexOf(@" /"); var reportNumber = substring.Substring(0, numberLength != -1 ? numberLength : substring.Length); if (!String.IsNullOrEmpty(reportNumber)) { currentReportNumber += " № "; currentReportNumber += reportNumber; ulong.TryParse(reportNumber, out runningNumber); } } } } var startTime = GetStartTime(DbSession, runningNumber != 0 ? runningNumber : _generalReport.Id); var prefix = tempTaskState == TaskState.Running ? String.Format("Успешно запущен разовый отчет{0}", currentReportNumber) : String.Format("Отчет запущен ({0})", currentReportNumber); if (tempTaskDescription == userName || currentTask.State == TaskState.Running) { ErrorMassage.Text = string.Format("{0}, ожидайте окончания выполнения операции. {1}", prefix, startTime); ErrorMassage.BackColor = Color.LightGreen; } else { ErrorMassage.Text = String.Format("{1}, выполнение данного отчета отложено {0}. {2}", description, prefix, startTime); ErrorMassage.BackColor = Color.Red; } btn_Mailing.Enabled = false; RadioSelf.Enabled = false; RadioMails.Enabled = false; } if (tempTaskState == TaskState.Queued || currentTask.State == TaskState.Queued) { var prefix = tempTaskState == TaskState.Running ? "Запускается разовый отчет" : "Отчет запускается"; if (tempTaskDescription == userName || currentTask.State == TaskState.Queued) { ErrorMassage.Text = string.Format("{0}, ожидайте окончания выполнения операции", prefix); ErrorMassage.BackColor = Color.LightGreen; } else { ErrorMassage.Text = string.Format("{1} {0}, выполнение данного отчета отложено)", description, prefix); ErrorMassage.BackColor = Color.Red; } btn_Mailing.Enabled = false; RadioSelf.Enabled = false; RadioMails.Enabled = false; } if ((tempTaskState == TaskState.Ready && currentTask.State != TaskState.Running && currentTask.State != TaskState.Queued) || (currentTask.State == TaskState.Ready && tempTaskState != TaskState.Running && tempTaskState != TaskState.Queued)) { if (tempTaskDescription == userName || currentTask.State == TaskState.Ready) { // отчет выполнен if (Session["StartTaskTime"] != null) { Session.Remove("StartTaskTime"); ErrorMassage.Text = "Операция выполнена"; ErrorMassage.BackColor = Color.LightGreen; } else { ErrorMassage.Text = ""; } } } if ((tempTaskState == TaskState.Disabled && currentTask.State != TaskState.Running && currentTask.State != TaskState.Queued) || (currentTask.State == TaskState.Disabled && tempTaskState != TaskState.Running && tempTaskState != TaskState.Queued)) { if (Session["StartTaskTime"] != null) { Session.Remove("StartTaskTime"); ErrorMassage.Text = "Операция отменена"; ErrorMassage.BackColor = Color.Red; } else { ErrorMassage.Text = ""; } } var otherTriggers = new List <Trigger>(); if (!IsPostBack) { var selfMail = GetSelfEmails(); if ((selfMail.Count != 0) && (selfMail[0].Length != 0)) { RadioSelf.Text = "Выполнить и отослать на: " + selfMail[0][0]; } dtFrom.Value = DateTime.Now.AddDays(-7).ToShortDateString(); dtTo.Value = DateTime.Now.ToShortDateString(); mail_Text.Text = GetMailingAdresses(); try { lblClient.Text = _generalReport.Payer.Id + " - " + _generalReport.Payer.ShortName; lblReportComment.Text = _generalReport.Comment; var lastLogTimes = ObjectFromQuery(new[] { new MySqlParameter("?GeneralReportCode", _generalReport.Id) }, @" SELECT Max(LogTime) as MaxLogTime FROM logs.reportslogs WHERE reportslogs.GeneralReportCode = ?GeneralReportCode "); if ((lastLogTimes.Count > 0) && (lastLogTimes[0].Length > 0)) { if (lastLogTimes[0][0] is DateTime) { MyCn.Open(); MyCmd.CommandText = @" SELECT LogTime, EMail, SMTPID FROM logs.reportslogs WHERE reportslogs.GeneralReportCode = ?GeneralReportCode and reportslogs.LogTime > ?LastLogTime order by LogTime desc "; MyCmd.Parameters.AddWithValue("?LastLogTime", ((DateTime)lastLogTimes[0][0]).AddDays(-1).Date); var _logs = new DataTable(); MyDA.Fill(_logs); gvLogs.DataSource = _logs; } } gvLogs.DataBind(); MyCmd.Parameters.Clear(); MyCmd.CommandText = @"select rel.StartTime, if (not EndError, rel.EndTime, 'Ошибка при формировании отчета') as EndTime from `logs`.reportexecutelogs rel where rel.GeneralReportCode = ?GeneralReportCode order by StartTime desc limit 15;"; MyCmd.Parameters.AddWithValue("?GeneralReportCode", _generalReport.Id); var startlogs = new DataTable(); MyDA.Fill(startlogs); startLogs.DataSource = startlogs; startLogs.DataBind(); } finally { MyCn.Close(); } chbAllow.Checked = currentTask.Enabled; lblWork.Text = ((ExecAction)currentTask.Definition.Actions[0]).Path + " " + ((ExecAction)currentTask.Definition.Actions[0]).Arguments; lblFolder.Text = ((ExecAction)currentTask.Definition.Actions[0]).WorkingDirectory; if (_generalReport.FirmCode != null) { var ftpId = _generalReport.FirmCode.ToString().PadLeft(3, '0'); FtpPath.Text = $"ftp://ftp.analit.net/OptBox/{ftpId}/Reports/"; } else { FtpPath.Text = ""; } var tl = currentTask.Definition.Triggers; for (int i = 0; i < tl.Count; i++) { if (tl[i] is WeeklyTrigger) { var dr = DS.Tables[dtSchedule.TableName].NewRow(); var trigger = ((WeeklyTrigger)tl[i]); dr[SStartHour.ColumnName] = trigger.StartBoundary.Hour; dr[SStartMinute.ColumnName] = trigger.StartBoundary.Minute; var days = trigger.DaysOfWeek; SetWeekDays(dr, DaysOfTheWeek.Monday, days); SetWeekDays(dr, DaysOfTheWeek.Tuesday, days); SetWeekDays(dr, DaysOfTheWeek.Wednesday, days); SetWeekDays(dr, DaysOfTheWeek.Thursday, days); SetWeekDays(dr, DaysOfTheWeek.Friday, days); SetWeekDays(dr, DaysOfTheWeek.Saturday, days); SetWeekDays(dr, DaysOfTheWeek.Sunday, days); DS.Tables[dtSchedule.TableName].Rows.Add(dr); } else if (tl[i] is MonthlyTrigger) { var dr = DS.Tables[dtScheduleMonth.TableName].NewRow(); //очищаем таблицу от значений по умолчанию for (var k = 1; k <= 31; k++) { dr["d" + k] = 0; } for (var k = 1; k <= 12; k++) { dr["m" + k] = 0; } var trigger = ((MonthlyTrigger)tl[i]); dr[MSStartHour.ColumnName] = trigger.StartBoundary.Hour; dr[MSStartMinute.ColumnName] = trigger.StartBoundary.Minute; var months = trigger.MonthsOfYear; MonthsOfTheYear month; for (int j = 0; j < 12; j++) { MonthsOfTheYear.TryParse((1 << j).ToString(), true, out month); if (months.HasFlag(month)) { dr["m" + (j + 1)] = 1; } } foreach (int em in trigger.DaysOfMonth) { dr["d" + em] = 1; } DS.Tables[dtScheduleMonth.TableName].Rows.Add(dr); } else { otherTriggers.Add(tl[i]); } } DS.Tables[dtSchedule.TableName].AcceptChanges(); dgvSchedule.DataSource = DS; dgvSchedule.DataMember = dtSchedule.TableName; dgvSchedule.DataBind(); dgvScheduleMonth.DataSource = DS; dgvScheduleMonth.DataMember = dtScheduleMonth.TableName; dgvScheduleMonth.DataBind(); gvOtherTriggers.DataSource = otherTriggers; gvOtherTriggers.DataBind(); Session[DSSchedule] = DS; CloseTaskService(); } else { DS = ((DataSet)Session[DSSchedule]); if (DS == null) // вероятно, сессия завершилась и все ее данные утеряны { Reports_GeneralReports.Redirect(this); } } send_created_report.Visible = _generalReport.IsSuccessfulyProcessed; }