Ejemplo n.º 1
0
        public void PostProcess(string requestId)
        {
            if (_currentResponse == null)
            {
                return;
            }

            using (QueryComposer.IModelAdapter adapter = GetModelAdapter(true))
            {
                adapter.Initialize(Settings, requestId);

                adapter.PostProcess(_currentResponse);

                if (_currentResponse.RequestID == Guid.Empty)
                {
                    Guid id;
                    if (Guid.TryParse(requestId, out id))
                    {
                        _currentResponse.RequestID = id;
                    }
                }

                ////replace the current response with the post-processed response.
                _responseDocuments.Clear();
                _responseDocuments.AddRange(adapter.OutputDocuments());

                status.Code    = RequestStatus.StatusCode.Complete;
                status.Message = string.Empty;
            }
        }
Ejemplo n.º 2
0
        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;
            }
        }
Ejemplo n.º 3
0
        void IPatientIdentifierProcessor.GenerateLists(Guid requestID, NetworkConnectionMetadata network, RequestMetadata md, IDictionary <Guid, string> outputPaths, string format)
        {
            using (QueryComposer.IModelAdapter adapter = GetModelAdapter(_request.Queries.First(), true))
            {
                if (Settings.ContainsKey("MSRequestID"))
                {
                    Settings["MSRequestID"] = md.MSRequestID;
                }
                else
                {
                    Settings.Add("MSRequestID", md.MSRequestID);
                }

                adapter.Initialize(Settings, requestID.ToString());
                adapter.GeneratePatientIdentifierLists(_request, outputPaths, format);
            }
        }
Ejemplo n.º 4
0
        public void PostProcess(string requestId)
        {
            if (_currentResponse == null)
            {
                return;
            }

            using (QueryComposer.IModelAdapter adapter = GetModelAdapter(true))
            {
                adapter.Initialize(Settings);

                adapter.PostProcess(_currentResponse);

                if (_currentResponse.RequestID == Guid.Empty)
                {
                    Guid id;
                    if (Guid.TryParse(requestId, out id))
                    {
                        _currentResponse.RequestID = id;
                    }
                }

                //replace the current response with the post-processed response.
                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;
                _responseDocuments.Clear();
                _responseDocuments.Add(new DocumentEx {
                    ID = documentID, Document = resultDocument, Content = resultContent
                });

                status.Code    = RequestStatus.StatusCode.Complete;
                status.Message = string.Empty;
            }
        }
Ejemplo n.º 5
0
        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;
                }
            }
        }
Ejemplo n.º 7
0
        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;
                    }
                }
            }
        }