Example #1
0
        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
                }
            }
        }
Example #3
0
        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);
        }
Example #4
0
        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);
        }