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")); }
protected void btnExecute_Click(object sender, EventArgs e) { var runed = false; if (IsValid && (currentTask.State != TaskState.Running)) { ScheduleHelper.SetTaskEnableStatus(_generalReport.Id, true, "GR"); ScheduleHelper.SetTaskAction(_generalReport.Id, string.Format("/gr:{0} /manual:true", _generalReport.Id)); currentTask.Run(); Thread.Sleep(500); btnExecute.Enabled = false; btnExecute.Text = StatusNotRunning; runed = true; } CloseTaskService(); Thread.Sleep(500); if (runed) { Response.Redirect("Schedule.aspx?r=" + _generalReport.Id); } }
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); } }