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);
        }
예제 #2
0
    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("Применить");
        }
예제 #4
0
        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"));
        }
예제 #7
0
        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);
        }
예제 #8
0
        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;
            }
        }
예제 #9
0
        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);
             }
         }
     }
 }
예제 #11
0
    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;
    }