예제 #1
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 btnFinish_Click(object sender, EventArgs e)
        {
            if (_currentTask != null)
            {
                _currentTask.Dispose();
                _currentTask = null;
            }

            ScheduleHelper.DeleteTask(ScheduleHelper.GetReportsFolder(_taskService), _generalReport.Id, "GR");

            //Закончили работу с задачами
            if (_taskService != null)
            {
                _taskService.Dispose();
                _taskService = null;
            }

            //Удаляем отчет
            using (new TransactionScope()) {
                _generalReport.Delete();
            }

            Response.Redirect("base.aspx");
        }
예제 #3
0
        public static bool ProcessReport(int generalReportId, bool manual, bool interval, DateTime dtFrom, DateTime dtTo)
        {
            var           result    = false;
            var           reportLog = new ReportExecuteLog();
            GeneralReport report    = null;

            using (var session = GeneralReport.Factory.OpenSession())
                using (var mc = new MySqlConnection(ConnectionHelper.GetConnectionString())) {
                    mc.Open();
                    try {
                        var timeout = ConfigurationManager.AppSettings["MySqlTimeout"];
                        if (!String.IsNullOrEmpty(timeout))
                        {
                            mc.Execute($"set interactive_timeout={timeout};set wait_timeout={timeout};");
                        }
                        using (var trx = session.BeginTransaction()) {
                            reportLog.GeneralReportCode = generalReportId;
                            reportLog.StartTime         = DateTime.Now;
                            session.Save(reportLog);
                            trx.Commit();
                        }

                        report = session.Get <GeneralReport>((uint)generalReportId);
                        if (report == null)
                        {
                            throw new Exception($"Отчет с кодом {generalReportId} не существует.");
                        }
                        if (!report.Enabled && !manual)
                        {
                            throw new ReportException("Невозможно выполнить отчет, т.к. отчет выключен.");
                        }

                        _log.DebugFormat("Запуск отчета {0}", report.Id);
                        report.ProcessReports(reportLog, mc, interval, dtFrom, dtTo);
                        _log.DebugFormat("Отчет {0} выполнился успешно", report.Id);

                        using (var trx = session.BeginTransaction()) {
                            reportLog.EndTime = DateTime.Now;
                            trx.Commit();
                        }
                        result = true;
                    }
                    catch (Exception e) {
                        if (e is ReportException)
                        {
                            _log.Warn($"Ошибка при выполнении отчета {report}", e);
                        }
                        else
                        {
                            _log.Error($"Ошибка при выполнении отчета {report}", e);
                        }

                        try {
                            using (var trx = session.BeginTransaction()) {
                                reportLog.EndError = true;
                                session.Save(reportLog);
                                trx.Commit();
                            }
                        }
                        catch (Exception ex) {
                            _log.Error("Не удалось запротоколировать ошибку", ex);
                        }

                        var reportEx = e as ReportException;
                        if (reportEx != null)
                        {
                            Mailer.MailReportErr(reportEx.ToString(), reportEx.Payer, report.Id, reportEx.SubreportCode, reportEx.ReportCaption);
                            result = true;
                        }
                        else
                        {
                            Mailer.MailGeneralReportErr(report, e);
                        }
                    } finally {
                        //не уверен почему так но восстанавливаем состояние задачи только если отчет не выключен
                        //этого требует тест ProgramTest но логика мне не понятна
                        //подозрительно тк раньше это работало тк переменная была null и блок валился с исключением
                        if (report != null && report.Enabled)
                        {
                            ScheduleHelper.SetTaskAction(report.Id, "/gr:" + report.Id);
                            ScheduleHelper.SetTaskEnableStatus(report.Id, report.Enabled, "GR");
                            var taskService   = ScheduleHelper.GetService();
                            var reportsFolder = ScheduleHelper.GetReportsFolder(taskService);
                            ScheduleHelper.DeleteTask(reportsFolder, report.Id, "temp_");
                        }
                    }
                    return(result);
                }
        }