protected HttpResponseMessage StartJob(Action <ISession, Config.Config, RequestLog> cmd) { var existsJob = new RequestLog(CurrentUser, Request, GetType().Name); existsJob.StartJob(Session, (x, y) => cmd(x, Config, y)); return(existsJob.ToResult(Request, Config)); }
public void Process_request() { var job = new RequestLog(user, new Version()); job.StartJob(session, (_, ___) => {}); scheduler.Run(); session.Refresh(job); Assert.That(job.Error, Is.Null); Assert.That(job.IsCompleted, Is.True); Assert.That(job.IsFaulted, Is.False); }
public void Log_broken_job() { var job = new RequestLog(user, new Version()); job.StartJob(session, (jobSession, requestJob) => { throw new Exception("Тестовое исключение"); }); scheduler.Run(); session.Refresh(job); Assert.That(job.Error, Is.Not.Null); Assert.That(job.IsCompleted, Is.True); Assert.That(job.IsFaulted, Is.True); }
public HttpResponseMessage Get(bool reset = false, string data = null, DateTime?lastSync = null, //перечень активных адресов доставки через запятую //для экспорта неподтвержденных заявок string addressIds = null, uint?id = null) { if (id != null) { return(Session.Load <RequestLog>(id.Value).ToResult(Request, Config)); } var updateType = data ?? GetType().Name; RequestLog existsJob = null; //если это новый запрос то пытаемся найти уже подготовленные данные которые не протухли или в процессе //что бы избежать дополнительной нагрузки на сервер if (reset) { if (Config.UpdateLifeTime > TimeSpan.Zero) { var version = RequestLog.GetVersion(Request); //если есть не загруженные данные отдаем их //каждая версия хранит подготовленные данные в своей директории //по этому передавать неподтвержденные данные есть смысл только в рамках версии existsJob = Session.Query <RequestLog>() .Where(j => j.UpdateType == updateType && !j.IsConfirmed && !j.IsFaulted && j.User == CurrentUser && j.Version == version) .OrderByDescending(j => j.CreatedOn) .Take(1) .ToArray() .FirstOrDefault(x => x.GetIsStale(Config.UpdateLifeTime) == false); } } else { existsJob = TryFindJob(updateType); } if (existsJob == null) { existsJob = new RequestLog(CurrentUser, Request, updateType, lastSync); existsJob.StartJob(Session, (session, job) => { using (var exporter = new Exporter(session, Config, job)) { exporter.Addresses = addressIds?.Split(',') .Select(x => session.Load <Address>(Convert.ToUInt32(x))) .ToArray() ?? new Address[0]; if (data.Match("Waybills")) { exporter.ExportDocs(); } else { //если есть обновление исполняемых файлов то готовить данные нет смысла //тк схема данных могла измениться и клиент все равно будет загружать кумулятивное //после обновления бинарных файлов if (data.Match("NoBin") || !exporter.ExportBin()) { exporter.ExportDb(); } } //все данные выгружены завершаем транзакцию session.Transaction.Commit(); exporter.Compress(job.OutputFile(Config)); } }); } return(existsJob.ToResult(Request, Config)); }