From 3b83c29f11e95144f02849134200c2e3939f2cbc Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Thu, 23 Dec 2021 19:08:13 +0000 Subject: [PATCH] --- .../AyaNova/Controllers/ExportController.cs | 58 +++++++++++-------- 1 file changed, 33 insertions(+), 25 deletions(-) diff --git a/server/AyaNova/Controllers/ExportController.cs b/server/AyaNova/Controllers/ExportController.cs index 10be3f9a..757c8136 100644 --- a/server/AyaNova/Controllers/ExportController.cs +++ b/server/AyaNova/Controllers/ExportController.cs @@ -15,6 +15,7 @@ using Newtonsoft.Json.Linq; using System.IO; using System.IO.Compression; using ChoETL; +using System; namespace AyaNova.Api.Controllers { @@ -99,36 +100,43 @@ namespace AyaNova.Api.Controllers string outputZipFullpath = System.IO.Path.Combine(FileUtil.TemporaryFilesFolder, baseFileName + ".zip"); log.LogDebug($"Calling render export data to file {outputZipFullpath}"); - switch (format) + try { - case "csv": - using (var w = new ChoCSVWriter(outputSourceFullPath).WithFirstLineHeader()) - { - var dat = await ((IExportAbleObject)biz).GetExportData(selectedRequest); - w.Write(ToDynamicList(dat)); - } - break; - case "json": - using (StreamWriter file = System.IO.File.CreateText(outputSourceFullPath)) - using (JsonTextWriter writer = new JsonTextWriter(file)) - { - var dat = await ((IExportAbleObject)biz).GetExportData(selectedRequest); - dat.WriteTo(writer); - } - break; - } + switch (format) + { + case "csv": + using (var w = new ChoCSVWriter(outputSourceFullPath).WithFirstLineHeader()) + { + var dat = await ((IExportAbleObject)biz).GetExportData(selectedRequest, DateTime.UtcNow.AddMinutes(ServerBootConfig.AYANOVA_REPORT_RENDERING_TIMEOUT)); + w.Write(ToDynamicList(dat)); + } + break; + case "json": + using (StreamWriter file = System.IO.File.CreateText(outputSourceFullPath)) + using (JsonTextWriter writer = new JsonTextWriter(file)) + { + var dat = await ((IExportAbleObject)biz).GetExportData(selectedRequest, DateTime.UtcNow.AddMinutes(ServerBootConfig.AYANOVA_REPORT_RENDERING_TIMEOUT)); + dat.WriteTo(writer); + } + break; + } - //zip it - using (FileStream fs = new FileStream(outputZipFullpath, FileMode.Create)) - using (ZipArchive arch = new ZipArchive(fs, ZipArchiveMode.Create)) + //zip it + using (FileStream fs = new FileStream(outputZipFullpath, FileMode.Create)) + using (ZipArchive arch = new ZipArchive(fs, ZipArchiveMode.Create)) + { + arch.CreateEntryFromFile(outputSourceFullPath, outputSourceFileName); + } + + log.LogDebug($"Completed, returning results"); + return Ok(ApiOkResponse.Response(baseFileName + ".zip")); + } + catch (ReportRenderTimeOutException) { - arch.CreateEntryFromFile(outputSourceFullPath, outputSourceFileName); + log.LogInformation($"RenderExport timeout data list key: {selectedRequest.DataListKey}, record count:{selectedRequest.SelectedRowIds.LongLength}, user:{UserNameFromContext.Name(HttpContext.Items)} "); + return BadRequest(new ApiErrorResponse(ApiErrorCode.INVALID_OPERATION, null, "timeout - select fewer records")); } - log.LogDebug($"Completed, returning results"); - return Ok(ApiOkResponse.Response(baseFileName + ".zip")); - - } public static IList ToDynamicList(JArray data)