public void Start(string requestId, bool viewSQL = false) { if (_request == null) { throw new NullReferenceException("The deserialized request is null, please make sure that RequestDocument is called first and that the request document is not null."); } using (QueryComposer.IModelAdapter adapter = GetModelAdapter(true)) { adapter.Initialize(Settings); if (viewSQL && !adapter.CanViewSQL) { throw new Exception("The adapter does not support providing the SQL of the query."); } _currentResponse = adapter.Execute(_request, viewSQL); Guid requestID; if (Guid.TryParse(requestId, out requestID)) { _currentResponse.RequestID = requestID; } string serializedResponse = Newtonsoft.Json.JsonConvert.SerializeObject(_currentResponse, Newtonsoft.Json.Formatting.None); byte[] resultContent = System.Text.Encoding.UTF8.GetBytes(serializedResponse); Guid documentID = Guid.NewGuid(); Document resultDocument = new Document(documentID.ToString("D"), "application/json", "response.json"); resultDocument.Size = resultContent.Length; resultDocument.IsViewable = true; if (viewSQL) { resultDocument.DocumentID = SqlResponseDocumentID.ToString("D"); _SqlResponseDocument = new DocumentEx { ID = SqlResponseDocumentID, Document = resultDocument, Content = resultContent }; } else { _SqlResponseDocument = null; _responseDocuments.Clear(); _responseDocuments.Add(new DocumentEx { ID = documentID, Document = resultDocument, Content = resultContent }); } string message = string.Empty; status.PostProcess = !viewSQL && adapter.CanPostProcess(_currentResponse, out message); status.Message = message; status.Code = (_currentResponse.Errors != null && _currentResponse.Errors.Any()) ? RequestStatus.StatusCode.Error : string.IsNullOrWhiteSpace(status.Message) ? RequestStatus.StatusCode.Complete : RequestStatus.StatusCode.CompleteWithMessage; } }
public void ResponseDocument(string requestId, string documentId, out Stream contentStream, int maxSize) { contentStream = null; Guid id; if (!Guid.TryParse(documentId, out id)) { log.Debug("Unable to set the content stream for response document, unable to parse document id:" + documentId); return; } DocumentEx document = id == SqlResponseDocumentID ? _SqlResponseDocument : _responseDocuments.FirstOrDefault(d => d.ID == id); if (document != null) { if (document.Content != null) { contentStream = new System.IO.MemoryStream(document.Content); } else if (document.FileInfo != null) { contentStream = document.FileInfo.OpenRead(); } if (id == SqlResponseDocumentID) { //clear the document after the content has been returned to allow for the proper documents to be returned on subsequent requests. _SqlResponseDocument = null; } } else { log.Debug("Unable to set content stream based on response document id:" + documentId + ". Document not found."); } }
public void Start(string requestId, bool viewSQL = false) { if (_request == null && !IsDistributedRegressionRequest) { throw new NullReferenceException("The deserialized request is null, please make sure that RequestDocument is called first and that the request document is not null."); } var queryResults = new List <DTO.QueryComposer.QueryComposerResponseQueryResultDTO>(); var queryCanPostProcess = new List <Tuple <Guid, bool, string> >(); _request.SyncHeaders(); foreach (var query in _request.Queries) { using (QueryComposer.IModelAdapter adapter = GetModelAdapter(query)) { adapter.Initialize(Settings, requestId); if (viewSQL && !adapter.CanViewSQL) { queryResults.Add( new DTO.QueryComposer.QueryComposerResponseQueryResultDTO { ID = query.Header.ID, QueryStart = DateTimeOffset.UtcNow, QueryEnd = DateTimeOffset.UtcNow, Errors = new[] { new DTO.QueryComposer.QueryComposerResponseErrorDTO { QueryID = query.Header.ID, Code = "-1", Description = $"The adapter \"{ adapter.GetType().FullName }\" does not support providing the SQL of a query." } } } ); queryCanPostProcess.Add(new Tuple <Guid, bool, string>(query.Header.ID, false, string.Empty)); continue; } if (IsDistributedRegressionRequest) { var drAdapter = adapter as QueryComposer.Adapters.DistributedRegression.DistributedRegressionModelAdapter; var queryResult = new DTO.QueryComposer.QueryComposerResponseQueryResultDTO { ID = query.Header.ID, QueryStart = DateTimeOffset.UtcNow }; try { DocumentEx[] outputDocuments = drAdapter.StartRequest(_drDocuments).ToArray(); if (outputDocuments != null && outputDocuments.Length > 0) { _responseDocuments.AddRange(outputDocuments); } } catch (Exception ex) { queryResult.Errors = new[] { new DTO.QueryComposer.QueryComposerResponseErrorDTO { QueryID = query.Header.ID, Code = "-1", Description = QueryComposer.ExceptionHelpers.UnwindException(ex) } }; } queryResult.QueryEnd = DateTimeOffset.UtcNow; queryResults.Add(queryResult); queryCanPostProcess.Add(new Tuple <Guid, bool, string>(query.Header.ID, false, string.Empty)); continue; } DateTimeOffset queryStart = DateTimeOffset.UtcNow; try { foreach (var result in adapter.Execute(query, viewSQL)) { queryResults.Add(result); if (adapter.CanPostProcess(result, out string postProcessMessage)) { queryCanPostProcess.Add(new Tuple <Guid, bool, string>(query.Header.ID, true, postProcessMessage)); } else { queryCanPostProcess.Add(new Tuple <Guid, bool, string>(query.Header.ID, false, string.Empty)); } } } catch (Exception ex) { queryResults.Add( new DTO.QueryComposer.QueryComposerResponseQueryResultDTO { ID = query.Header.ID, QueryStart = queryStart, QueryEnd = DateTimeOffset.UtcNow, Errors = new[] { new DTO.QueryComposer.QueryComposerResponseErrorDTO { QueryID = query.Header.ID, Code = "-1", Description = QueryComposer.ExceptionHelpers.UnwindException(ex) } } } ); queryCanPostProcess.Add(new Tuple <Guid, bool, string>(query.Header.ID, false, string.Empty)); } } //end of adapter using } //end of processing each query var response = new DTO.QueryComposer.QueryComposerResponseDTO { Header = new DTO.QueryComposer.QueryComposerResponseHeaderDTO { DocumentID = viewSQL ? SqlResponseDocumentID : QueryComposerModelProcessor.NewGuid(), RequestID = _request.Header.ID }, Queries = queryResults }; response.RefreshQueryDates(); response.RefreshErrors(); string serializedResponse = Newtonsoft.Json.JsonConvert.SerializeObject(response, Newtonsoft.Json.Formatting.None); byte[] resultContent = System.Text.Encoding.UTF8.GetBytes(serializedResponse); Document resultDocument = new Document(response.Header.DocumentID.Value.ToString("D"), "application/json", "response.json"); resultDocument.Size = resultContent.Length; resultDocument.IsViewable = true; resultDocument.Kind = "MultiQuery.JSON"; if (viewSQL) { _SqlResponseDocument = new DocumentEx { ID = SqlResponseDocumentID, Document = resultDocument, Content = resultContent }; } else { _SqlResponseDocument = null; _responseDocuments.Clear(); _responseDocuments.Add(new DocumentEx { ID = response.Header.DocumentID.Value, Document = resultDocument, Content = resultContent }); _currentResponse = response; } status.PostProcess = queryCanPostProcess.Any(q => q.Item2 == true); status.Message = queryCanPostProcess.Where(q => !string.IsNullOrEmpty(q.Item3)).Any() ? string.Join("\r\n", queryCanPostProcess.Where(q => !string.IsNullOrEmpty(q.Item3)).Select(q => q.Item3).ToArray()) : string.Empty; status.Code = (response.Errors != null && response.Errors.Any()) ? RequestStatus.StatusCode.Error : (string.IsNullOrEmpty(status.Message) ? RequestStatus.StatusCode.Complete : RequestStatus.StatusCode.CompleteWithMessage); }
public void Start(string requestId, bool viewSQL = false) { if (_request == null && !IsDistributedRegressionRequest) { throw new NullReferenceException("The deserialized request is null, please make sure that RequestDocument is called first and that the request document is not null."); } using (QueryComposer.IModelAdapter adapter = GetModelAdapter(true)) { adapter.Initialize(Settings); if (viewSQL && !adapter.CanViewSQL) { throw new Exception("The adapter does not support providing the SQL of the query."); } if (IsDistributedRegressionRequest) { var drAdapter = adapter as QueryComposer.Adapters.DistributedRegression.DistributedRegressionModelAdapter; //DO DR Stuff here try { DocumentEx[] outputDocuments = drAdapter.StartRequest(_drDocuments).ToArray(); if (outputDocuments != null && outputDocuments.Length > 0) { _responseDocuments.AddRange(outputDocuments); } //Message may become timeout values reached Error string message = string.Empty; status.PostProcess = false; status.Message = message; status.Code = RequestStatus.StatusCode.Complete; } catch (Exception ex) { status.Code = RequestStatus.StatusCode.Error; status.Message = ex.Message; } } else { var _tempResponse = adapter.Execute(_request, viewSQL); Guid requestID; if (Guid.TryParse(requestId, out requestID)) { _tempResponse.RequestID = requestID; } string serializedResponse = Newtonsoft.Json.JsonConvert.SerializeObject(_tempResponse, Newtonsoft.Json.Formatting.None); byte[] resultContent = System.Text.Encoding.UTF8.GetBytes(serializedResponse); Guid documentID = Guid.NewGuid(); Document resultDocument = new Document(documentID.ToString("D"), "application/json", "response.json"); resultDocument.Size = resultContent.Length; resultDocument.IsViewable = true; if (viewSQL) { resultDocument.DocumentID = SqlResponseDocumentID.ToString("D"); _SqlResponseDocument = new DocumentEx { ID = SqlResponseDocumentID, Document = resultDocument, Content = resultContent }; } else { _SqlResponseDocument = null; _responseDocuments.Clear(); _responseDocuments.Add(new DocumentEx { ID = documentID, Document = resultDocument, Content = resultContent }); _currentResponse = _tempResponse; } string message = string.Empty; status.PostProcess = !viewSQL && adapter.CanPostProcess(_tempResponse, out message); status.Message = message; //May have to alter this cause _currentResponse May be empty status.Code = (_tempResponse.Errors != null && _tempResponse.Errors.Any()) ? RequestStatus.StatusCode.Error : string.IsNullOrWhiteSpace(status.Message) ? RequestStatus.StatusCode.Complete : RequestStatus.StatusCode.CompleteWithMessage; } } }
public void Start(string requestId, bool viewSQL = false) { if (_request == null && !IsDistributedRegressionRequest) { throw new NullReferenceException("The deserialized request is null, please make sure that RequestDocument is called first and that the request document is not null."); } using (QueryComposer.IModelAdapter adapter = GetModelAdapter(true)) { adapter.Initialize(Settings, requestId); if (viewSQL && !adapter.CanViewSQL) { throw new Exception("The adapter does not support providing the SQL of the query."); } if (IsDistributedRegressionRequest) { var drAdapter = adapter as QueryComposer.Adapters.DistributedRegression.DistributedRegressionModelAdapter; //DO DR Stuff here try { DocumentEx[] outputDocuments = drAdapter.StartRequest(_drDocuments).ToArray(); if (outputDocuments != null && outputDocuments.Length > 0) { _responseDocuments.AddRange(outputDocuments); } //Message may become timeout values reached Error string message = string.Empty; status.PostProcess = false; status.Message = message; status.Code = RequestStatus.StatusCode.Complete; } catch (Exception ex) { status.Code = RequestStatus.StatusCode.Error; status.Message = ex.Message; } } else { var _tempResponse = adapter.Execute(_request, viewSQL); var outputDocuments = adapter.OutputDocuments(); if (viewSQL) { var resultDocument = outputDocuments.First(); resultDocument.Document.DocumentID = SqlResponseDocumentID.ToString("D"); resultDocument.ID = SqlResponseDocumentID; _SqlResponseDocument = resultDocument; } else { _SqlResponseDocument = null; _responseDocuments.Clear(); _responseDocuments.AddRange(outputDocuments); _currentResponse = _tempResponse; } string message = string.Empty; status.PostProcess = !viewSQL && adapter.CanPostProcess(_tempResponse, out message); status.Message = message; //May have to alter this cause _currentResponse May be empty if (_tempResponse.Errors != null && _tempResponse.Errors.Any()) { status.Code = RequestStatus.StatusCode.Error; status.Message = string.Join(Environment.NewLine, _tempResponse.Errors.Select(err => err.Description)); } else { status.Code = string.IsNullOrWhiteSpace(status.Message) ? RequestStatus.StatusCode.Complete : RequestStatus.StatusCode.CompleteWithMessage; } } } }