From 5bb1df0e80ba84ff747d06525e71ad21fb61b625 Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Thu, 23 Dec 2021 19:42:50 +0000 Subject: [PATCH] --- .vscode/launch.json | 4 ++-- docs/8.0/ayanova/docs/ay-report-busy.md | 18 ----------------- docs/8.0/ayanova/docs/ay-report-timeout.md | 19 ++++++++++++++++++ docs/8.0/ayanova/docs/img/ay-report-busy.png | Bin 6063 -> 0 bytes docs/8.0/ayanova/mkdocs.yml | 2 +- .../AyaNova/Controllers/ReportController.cs | 7 +++++-- 6 files changed, 27 insertions(+), 23 deletions(-) delete mode 100644 docs/8.0/ayanova/docs/ay-report-busy.md create mode 100644 docs/8.0/ayanova/docs/ay-report-timeout.md delete mode 100644 docs/8.0/ayanova/docs/img/ay-report-busy.png diff --git a/.vscode/launch.json b/.vscode/launch.json index 3a7a77fc..c75744f1 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -47,9 +47,9 @@ "AYANOVA_DB_CONNECTION": "Server=localhost;Username=postgres;Password=raven;Database=AyaNova;CommandTimeout=120;", "AYANOVA_DATA_PATH": "c:\\temp\\ravendata", "AYANOVA_USE_URLS": "http://*:7575;", - "AYANOVA_SERVER_TEST_MODE": "true", + "AYANOVA_SERVER_TEST_MODE": "false", "AYANOVA_REPORT_RENDERING_TIMEOUT":"1", - "AYANOVA_SERVER_TEST_MODE_SEEDLEVEL": "large", + "AYANOVA_SERVER_TEST_MODE_SEEDLEVEL": "small", "AYANOVA_BACKUP_PG_DUMP_PATH": "C:\\data\\code\\postgres_14\\bin\\" }, "sourceFileMap": { diff --git a/docs/8.0/ayanova/docs/ay-report-busy.md b/docs/8.0/ayanova/docs/ay-report-busy.md deleted file mode 100644 index 96f5592e..00000000 --- a/docs/8.0/ayanova/docs/ay-report-busy.md +++ /dev/null @@ -1,18 +0,0 @@ -# REPORTING MAXIMUM LIMIT WARNING - -Rendering reports is the single most demanding task that the AyaNova server performs involving a significant amount of memory and cpu cycles. In order to not overload the server host computer and ensure availability of the server for all users there is a (configurable) limit to the number of reports that can be processed simultaneously. - -When all available "slots" for processing reports are in use you will see the maximum limit warning message: -![The server is currently at the maximum limit for processing reports, please try again shortly](img/ay-report-busy.png) - -It is normal to see this message from time to time and simply resubmitting the report request again will usually return the report as expected. - -When AyaNova runs out of slots and another user requests a report it will send this warning back to that user and also initiate a process to forcibly remove any in-process reports that have gone over the configured timeout limit for a report to be processed. - -If you see this message on a regular basis or large reports with a lot of pages or heavy graphics do not complete at all, it may indicate the need for your AyaNova server operations manager to adjust the report rendering limit settings. They should consult the Server Operations Configuration settings section of this manual for guidance. - -## How to work around limits for large reports - -A large report with a unusually high number of pages or intensive graphics may be rejected if it's taking too long to render at the server while others are attempting to report at the same time. AyaNova will only enforce the configured time out when a report is taking up a rendering "slot" and preventing others from being able to report. This means that there are no timeout limits as long as no other users are blocked from reporting. - -For this reason it's recommended that long running reports that are getting bumped be instead requested at a time when few if any other users will be requesting reports to avoid potential conflict and having your long running report "bumped" out of the queue. diff --git a/docs/8.0/ayanova/docs/ay-report-timeout.md b/docs/8.0/ayanova/docs/ay-report-timeout.md new file mode 100644 index 00000000..95f62489 --- /dev/null +++ b/docs/8.0/ayanova/docs/ay-report-timeout.md @@ -0,0 +1,19 @@ +# REPORTING TIME OUT WARNING + +Rendering reports is the single most demanding task that the AyaNova server performs involving a significant amount of memory and cpu cycles for the AyaNova server and also the database server. + +In order to not overload the server host computer and ensure availability of the server for all users there is a configuration setting limit: [AYANOVA_REPORT_RENDERING_TIMEOUT](ops-config-report-rendering-timeout.md) to the number of minutes that a report can take to render. + +## What causes a timeout + +The time it takes to render a report can vary depending on the report template design itself and the data that must be gathered to go into it. + +For example, a simple list of Customers and their contact phone numbers can take a lot less time than a work order report that involves a significant amount of data for each individual work order. You may be able to render a thousand Customers in a simple contact list report in the time it takes to render 100 Work orders in a dispatching report (for example, not actual). + +"Deep" objects with a large hiearchy of collections such as Work orders, Quotes and PM reports will take significantly longer to process than relatively "shallow" objects such as Projects. + +## What to do when you get a timeout + +If you unexpectedly see this message you should report it to the person responsible for AyaNova server operations as it may indicate the server is running out of resources or a setting needs to be adjusted. + +You can work around this issue by using filters to limit the number of records that need to be processed. For example instead of reporting on a several year's worth of data, add a filter on your data table to limit individual reports by year and run each separately. diff --git a/docs/8.0/ayanova/docs/img/ay-report-busy.png b/docs/8.0/ayanova/docs/img/ay-report-busy.png deleted file mode 100644 index 452b00be0fe4d00a62312aee87d030fdafea60a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6063 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 adLTGFBXQG8GKQsi0y>%o8U<>0um1(24^0~Y diff --git a/docs/8.0/ayanova/mkdocs.yml b/docs/8.0/ayanova/mkdocs.yml index 33d5d1b8..0767468d 100644 --- a/docs/8.0/ayanova/mkdocs.yml +++ b/docs/8.0/ayanova/mkdocs.yml @@ -103,7 +103,7 @@ nav: - 'Data list columns': 'ay-data-list-column-view.md' - 'Log': 'ay-log.md' - 'Report editor': 'ay-report-edit.md' - - 'Report maximum limit warning': 'ay-report-busy.md' + - 'Report timeout warning': 'ay-report-timeout.md' - Extensions: - 'Tags extension': 'ay-ex-tags.md' - 'Export extension': 'ay-ex-export.md' diff --git a/server/AyaNova/Controllers/ReportController.cs b/server/AyaNova/Controllers/ReportController.cs index a5f0b0ab..302ffad1 100644 --- a/server/AyaNova/Controllers/ReportController.cs +++ b/server/AyaNova/Controllers/ReportController.cs @@ -185,9 +185,12 @@ namespace AyaNova.Api.Controllers return Ok(ApiOkResponse.Response(reportData)); } catch (ReportRenderTimeOutException) - { + { log.LogInformation($"GetReportData timeout data list key: {selectedRequest.DataListKey}, record count:{selectedRequest.SelectedRowIds.LongLength}, user:{UserNameFromContext.Name(HttpContext.Items)} "); - return Ok(ApiOkResponse.Response(new { timeout = true, timeoutconfig = ServerBootConfig.AYANOVA_REPORT_RENDERING_TIMEOUT })); + //note: this route is called by the report designer to get a limited subset of records so we should never see this error but including it for completeness + //report designer should show this as a general error + return BadRequest(new ApiErrorResponse(ApiErrorCode.INVALID_OPERATION, null, "timeout - select fewer records")); + } }