This commit is contained in:
2021-12-23 19:42:50 +00:00
parent 505898875f
commit 5bb1df0e80
6 changed files with 27 additions and 23 deletions

4
.vscode/launch.json vendored
View File

@@ -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": {

View File

@@ -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.

View File

@@ -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.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.9 KiB

View File

@@ -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'

View File

@@ -187,7 +187,10 @@ namespace AyaNova.Api.Controllers
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"));
}
}