public SearchResult Search(string platform, SearchRequest request, bool doNotExecute) { var dataSource = reportsDataSourceFactory.GetDataSource(platform); var searchResult = sqlQueryExecutor.Search(dataSource, request, doNotExecute); renderFilterService.ApplyAllRenderFilters(dataSource, searchResult); return(searchResult); }
private void ProcessRequestThreadStart(ReportStatus status, SearchRequest request, string filePath) { try { // setup request.PageSize = _defaultPageSize; status.ProgressPercentage = 0; status.StatusMessage = "Processing"; UpdateReportStatus(status); var dataSource = _reportsDataSourceFactory.GetDataSource(status.Platform); var columnDefinitions = dataSource.GetColumnMappings(request.SelectedColumns); var loopTimer = new LoopTimer <ReportStatus>(DateTime.Now, StatusUpdateTimerInterval, x => UpdateReportStatus(x), status); // loop through all pages loading the data var data = LoadAllData(ref status, request, dataSource, loopTimer); // save all the data into a spreadsheet using (var renderer = _spreadsheetWriterFactory.NewWriter()) { status.StatusMessage = "Saving"; UpdateReportStatus(status); renderer.LoopTimer = loopTimer; renderer.ProgressCallback = (i => status.ProgressPercentage = (int)(((double)100 * Configuration.Exports.DataLoadPercent) + ((double)Configuration.Exports.DataSavePercent * i))); renderer.Write(columnDefinitions, data, writeColumnHeaders: true); string fileName = string.Format("report-{0}.xlsx", status.Id); renderer.Save(Path.Combine(filePath, fileName)); } // finish status.ProgressPercentage = 100; status.DateCompleted = DateTime.Now; status.StatusMessage = "Complete"; UpdateReportStatus(status); } catch (Exception ex) { // This runs in a separate thread. We can't throw or the whole process will get killed. try { status.StatusMessage = "Failed"; status.ErrorMessage = ex.Message; status.StackTrace = ex.StackTrace; status.DateCompleted = DateTime.Now; UpdateReportStatus(status); } catch (Exception e) { // TODO: log } } }
public void Validate(string platform, int?organizationId, SearchRequest request) { ValidateDateRange(request.DateStart, request.DateEnd, request.DateRangeType, request.TemporalAggregation); var dataSource = _reportsDataSourceFactory.GetDataSource(platform); var knownColumns = dataSource.GetAllSelectableColumnDefinitions(organizationId); ValidateColumns(platform, request, knownColumns); ValidateQueryColumns(request, knownColumns, dataSource); if (request.SortByColumn == null || request.SortByColumn.ColumnId == 0) { throw new Exception("SortByColumn cannot be null"); } ValidateGroupBy(request, knownColumns); }
public GetSelectableColumnsResponse GetSelectableColumns(string platform, int?organizationId = null, int?userId = null, int?groupBy = null) { var result = new GetSelectableColumnsResponse(); try { using (new RequestTimer(result)) { var dataSource = _reportsDataSourceFactory.GetDataSource(platform); var columns = dataSource.GetAllSelectableColumnDefinitions(organizationId, groupBy); result.Data = columns; } } catch (Exception ex) { result.Error = new ResponseError().Load(ex); _logger.LogException(ex); } return(result); }