Beispiel #1
0
        public async Task Send(CaseMessage message)
        {
            if (message == null)
            {
                this._logger.LogWarning("tried to send a null case message. Did not send to AWS.");
                return;
            }

            var caseMessage   = this._serialiser.Serialise(message);
            var messageBusCts = new CancellationTokenSource();

            try
            {
                this._logger.LogInformation($"Send | about to dispatch case {message.RuleBreachId} (id) to AWS queue");
                await this._awsQueueClient.SendToQueue(
                    this._awsConfiguration.CaseMessageQueueName,
                    caseMessage,
                    messageBusCts.Token);

                this._logger.LogInformation($"Send | now dispatched case with id {message.RuleBreachId}");
            }
            catch (Exception e)
            {
                this._logger.LogError(e, $"Exception sending message '{caseMessage}' to bus on queue {this._awsConfiguration.CaseMessageQueueName}.");
            }
        }
        private void PublishRuleViolation()
        {
            lock (this._lock)
            {
                foreach (var ruleViolation in this._deduplicatedRuleViolations)
                {
                    var caseMessage = new CaseMessage {
                        RuleBreachId = ruleViolation.RuleViolationId
                    };

                    try
                    {
                        this._logger.LogInformation(
                            $"about to send for {ruleViolation.RuleBreach.RuleParameterId} | security {ruleViolation.RuleBreach.Security.Name}");
                        this._queueCasePublisher.Send(caseMessage)
                        .Wait();     // prefer synchronrous send within a foreach loop
                        this._logger.LogInformation(
                            $"sent for {ruleViolation.RuleBreach.RuleParameterId} | security {ruleViolation.RuleBreach.Security.Name}");
                    }
                    catch (Exception e)
                    {
                        this._logger.LogError(e, $"{ruleViolation.RuleBreach.RuleParameterId} encountered an error sending the case message to the bus");
                    }
                }

                this._deduplicatedRuleViolations.Clear();
            }
        }
Beispiel #3
0
        public IActionResult AssignSupport(AssignCaseSupport request)
        {
            Case assignCase = _context
                              .Cases
                              .SingleOrDefault(c => c.Id == request.CaseId && c.SupportId == null);

            if (assignCase != null)
            {
                Client consultant = _context
                                    .Clients.SingleOrDefault(c => c.Id == request.SupportId);

                if (consultant == null)
                {
                    return(BadRequest());
                }

                CaseMessage message = new CaseMessage
                {
                    CaseId   = request.CaseId,
                    ClientId = request.SupportId,
                    Contents = string.Format("Sveiki, šioje byloje dalyvaus konsultantas {0}.", consultant.Username)
                };

                assignCase.CaseMessages.Add(message);
                assignCase.SupportId = request.SupportId;
                _context.SaveChanges();
                return(Ok());
            }

            return(BadRequest());
        }
        public IActionResult CreateCase(CaseExpanded request)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest();
            }

            Case creating = new Case
            {
                Title = request.Title,
                ClientId = Client.Id,
                OrderId = request.OrderId
            };

            CaseMessageData message = request.Messages.FirstOrDefault();
            if (message != null)
            {
                CaseMessage messageTo = new CaseMessage
                {
                    CaseId = creating.Id,
                    Contents = message.Contents,
                    ClientId = Client.Id
                };

                creating.CaseMessages.Add(messageTo);
                if (request.Attachments.Count > 0)
                {
                    CaseAttachmentDTO requestedAttachment = request.Attachments.FirstOrDefault();
                    if (requestedAttachment != null)
                    {
                        messageTo.CaseAttachments.Add(new CaseAttachment
                        {
                            AttachmentUrl = requestedAttachment.AttachmentUrl,
                            CaseMessageId = message.Id
                        });
                    }
                }
            }
            else
            {
                return BadRequest(new
                {
                    message = "Byla privalo turėti žinutę."
                });
            }

            _context.Cases.Add(creating);
            _context.SaveChanges();
            return Ok(new
            {
                message = "Nauja byla sukurta."
            });
        }
Beispiel #5
0
        public IActionResult WriteCaseMessage(int caseId, CaseMessageData request)
        {
            Case writingTo = _context.Cases
                             .SingleOrDefault(c => c.Id == caseId && c.Status != 1);

            if (writingTo == null)
            {
                return(BadRequest(new
                {
                    message = "Tokia byla nerasta."
                }));
            }

            if (string.IsNullOrEmpty(request.Contents))
            {
                return(BadRequest(new
                {
                    message = "Paliktas tuščias žinutės laukas."
                }));
            }

            CaseMessage message = new CaseMessage
            {
                Contents = request.Contents,
                CaseId   = writingTo.Id,
                ClientId = Client.Id
            };

            if (request.Attachments.Count > 0)
            {
                foreach (var attachment in request.Attachments)
                {
                    message.CaseAttachments.Add(new CaseAttachment()
                    {
                        CaseMessageId = message.Id,
                        AttachmentUrl = attachment.AttachmentUrl
                    });
                }
            }

            writingTo.UpdatedAt = DateTime.Now;
            writingTo.CaseMessages.Add(message);
            _context.SaveChanges();
            return(Ok(new
            {
                message = "Nauja žinutė pridėta."
            }));
        }
Beispiel #6
0
        private void Tab1RequestCaseButton_Click(object sender, RoutedEventArgs e)
        {
            String caseId = String.Empty;

            try
            {
                caseId = Tab1CaseListBox.SelectedItem.ToString();
            }
            catch
            {
            }

            CaseMessage message = new CaseMessage();

            message.CaseId        = caseId;
            message.WorkstationId = m_AWSId;

            //make case directory
            if (!Directory.Exists("C:\\Reena"))
            {
                Directory.CreateDirectory("C:\\Reena");
            }

            String DirName = "C:\\Reena\\" + caseId;

            if (!Directory.Exists(DirName))
            {
                Directory.CreateDirectory(DirName);
            }

            try
            {
                //get case xml file
                CaseRequestMessageResponse response = m_AWSCommEndPoint1.RequestCase(message);

                FileStream casexml = new FileStream(DirName + "\\case.xml", FileMode.Create);
                response.file.CopyTo(casexml);
                casexml.Close();
                response.file.Close();
                //GetCaseFiles(DirName, caseid);
                m_ActiveCase = caseId;
            }
            catch (FaultException exp)
            {
                Tab1LogListBox.Items.Add(exp.Message);
            }
        }
Beispiel #7
0
        public virtual CaseRequestMessageResponse RequestCase(CaseMessage message)
        {
            CaseRequestMessageResponse response = new CaseRequestMessageResponse();

            response.caseType        = Interfaces.CaseType.ArchiveCase;
            response.IsResultEnabled = bool.Parse(ConfigurationManager.AppSettings["EnableArchiveDecision"]);

            try
            {
                // search for case.xml file using the CaseList
                string     caseDirectory = m_CaseList.GetCaseDirectory(message.CaseId);
                FileStream fs            = File.OpenRead(caseDirectory + "\\case.xml");
                response.file = new MemoryStream();
                CaseTranslator.TranslateToCase2_0(fs, ref response.file, caseDirectory);
                if (File.Exists(caseDirectory + "\\AnalysisHistory.xml"))
                {
                    response.AdditionalFiles.Add(FileType.None, "AnalysisHistory.xml");
                }

                AssignId(message.CaseId, message.WorkstationId);
            }
            catch (Exception exp)
            {
                if (logger != null)
                {
                    logger.PrintInfoLine("RequestCase exp: " + exp.Message);
                }

                throw new FaultException(new FaultReason(exp.Message));
            }

            OperationContext clientContext = OperationContext.Current;

            clientContext.OperationCompleted += new EventHandler(delegate(object sender, EventArgs e)
            {
                if (response.file != null)
                {
                    response.file.Dispose();
                }
            });

            return(response);
        }
Beispiel #8
0
        private void SubmitBtn_Click(object sender, EventArgs e)
        {
            try
            {
                CnC_DatabaseDataContext DataBase = new CnC_DatabaseDataContext();

                CaseMessage InsertData = new CaseMessage();
                var         Count      = (from rows in DataBase.CaseMessages
                                          select rows).AsEnumerable().LastOrDefault();
                InsertData.Field    = Field.Text;
                InsertData.ID       = Count.ID + 1;
                InsertData.Operator = Operator.Text;
                InsertData.UserID   = UserID.Text;
                InsertData.Message  = TheText.Text;
                InsertData.Value    = Value.Text;
                DataBase.CaseMessages.InsertOnSubmit(InsertData);
                DataBase.SubmitChanges();
                MessageBox.Show("Succesfull");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }
Beispiel #9
0
        public override CaseRequestMessageResponse RequestCase(CaseMessage message)
        {
            try
            {
                lock (m_CaseListLock)
                {
                    //if caseId is empty then auto select a case for this workstation
                    if (String.IsNullOrWhiteSpace(message.CaseId))
                    {
                        //for load balancing figure out whether this workstation should get the requested case
                        string workstation = GetNextLoadBalanceWorkstationId(message.WorkstationId);

                        //string[] caseIdList = null;// string.Empty;//GetAssignedCaseID(workstation);

                        //if (caseIdList == null || caseIdList.Length == 0)
                        //{

                        //select next available case from the case list that matches the workstation mode(Analyst or ManualCodig)
                        message.CaseId = GetUnassignedCaseId(message.WorkstationMode);
                        //}
                        //else
                        //{
                        //    message.CaseId = caseIdList[0];
                        //}

                        //case id is empty there are currently no live cases
                        if (String.IsNullOrWhiteSpace(message.CaseId))
                        {
                            throw new FaultException(new FaultReason(ErrorMessages.NO_LIVE_CASE));
                        }
                        else if (workstation != message.WorkstationId)
                        {
                            throw new FaultException(new FaultReason(ErrorMessages.LOAD_BALANCE_DELAY_CASE_REQUEST));
                        }
                    }

                    if (IsCaseAvailable(message.CaseId, message.WorkstationId))
                    {
                        CaseRequestMessageResponse response = base.RequestCase(message);

                        string ftiFile = string.Empty;

                        if (m_TIPManagerComm != null)
                        {
                            ftiFile = m_TIPManagerComm.RequestFTIFile(message.WorkstationId);
                        }

                        if (!String.IsNullOrWhiteSpace(ftiFile))
                        {
                            response.AdditionalFiles.Add(FileType.FTIFile, ftiFile);
                            response.caseType = L3.Cargo.Communications.Interfaces.CaseType.FTICase;
                            ClearAssignment(message.CaseId);
                        }
                        else
                        {
                            string caseArea = string.Empty;

                            if (caseList.IsCTI(message.CaseId))
                            {
                                m_TIPManagerComm.AssignCTICase(message.CaseId, message.WorkstationId);
                                response.caseType = L3.Cargo.Communications.Interfaces.CaseType.CTICase;
                                caseArea          = l3.cargo.corba.WorkstationArea.AWS.ToString();
                            }
                            else
                            {
                                caseArea          = m_CargoHostEndPoint.GetCase(message.CaseId).getCurrentArea();
                                response.caseType = L3.Cargo.Communications.Interfaces.CaseType.LiveCase;
                            }

                            lock (_updateCaseAssignmentLock)
                            {
                                base.AssignId(message.CaseId, message.WorkstationId);
                                CaseListUpdateEvent(message.CaseId, message.WorkstationId, caseArea, true);
                                //Set this workstation has currently requested case and increment number of cases requested
                                IncrementLoadBalanceNumRequestedCases(message.WorkstationId, true);
                            }
                        }

                        return(response);
                    }
                    else
                    {
                        throw new FaultException(new FaultReason(ErrorMessages.CASE_CURRENTLY_IN_USE));
                    }
                }
            }
            catch (Exception ex)
            {
                throw new FaultException(new FaultReason(ex.Message));
            }
        }
Beispiel #10
0
        public CaseObject RequestCase(string sourceAlias, string caseId, bool isEditable)
        {
            CaseMessage caseMessage = new CaseMessage(caseId, m_WorkstationId);

            caseMessage.IsCaseEditable  = isEditable;
            caseMessage.WorkstationMode = _workstationMode;
            CaseRequestMessageResponse response = new CaseRequestMessageResponse();

            CaseSource <WSCommEndpoint>             WSCommSource = FindSource <WSCommEndpoint>(sourceAlias);
            CaseSource <CaseRequestManagerEndpoint> ACSSource    = FindSource <CaseRequestManagerEndpoint>(sourceAlias);

            if (default(CaseSource <WSCommEndpoint>) != WSCommSource)
            {
                try
                {
                    response = WSCommSource.EndPoint.RequestCase(caseMessage);
                }
                catch (FaultException ex)
                {
                    throw;
                }
                catch (Exception ex)
                {
                    WSCommSource.EndPoint.Abort();
                    if (m_SysConfigMgrAccess.Contains(WSCommSource.Alias))
                    {
                        m_SysConfigMgrAccess.Delete(WSCommSource.Alias);
                    }
                    m_WSCommSources.RemoveSource(WSCommSource);

                    throw;
                }
            }
            else if (default(CaseSource <CaseRequestManagerEndpoint>) != ACSSource)
            {
                try
                {
                    response = ACSSource.EndPoint.RequestCase(caseMessage);
                }
                catch (FaultException ex)
                {
                    throw;
                }
                catch (Exception ex)
                {
                    ACSSource.EndPoint.Abort();
                    if (m_SysConfigMgrAccess.Contains(ACSSource.Alias))
                    {
                        m_SysConfigMgrAccess.Delete(ACSSource.Alias);
                    }
                    m_ACSSources.RemoveSource(ACSSource);
                    throw;
                }
            }
            else
            {
                throw new Exception(ErrorMessages.SOURCE_NOT_AVAILABLE);
            }

            CaseObject tmpCaseObj = CaseTranslator.Translate(response.file);

            if (response.AdditionalFiles != null)
            {
                foreach (KeyValuePair <FileType, String> file in response.AdditionalFiles)
                {
                    DataAttachment attach = new DataAttachment();
                    attach.attachmentId = file.Value;
                    switch (file.Key)
                    {
                    case FileType.AnalysisHistory:
                        attach.attachmentType = AttachmentType.AnalysisHistory;
                        break;

                    case FileType.FTIFile:
                        attach.attachmentType = AttachmentType.FTIImage;
                        break;

                    default:
                        attach.attachmentType = AttachmentType.Unknown;
                        break;
                    }
                    tmpCaseObj.attachments.Add(attach);
                }
            }

            tmpCaseObj.caseType = (L3.Cargo.Common.CaseType)response.caseType;

            //Case is editable if it is a primary case and case source specidies result (Decision) is enabled.
            tmpCaseObj.IsCaseEditable = (isEditable && response.IsResultEnabled);

            return(tmpCaseObj);
        }
        protected async Task Send(IRuleBreach ruleBreach, string description)
        {
            if (ruleBreach?.Trades?.Get() == null)
            {
                this.Logger.LogInformation($"{this._messageSenderName} had null trades. Returning.");
                return;
            }

            this.Logger.LogInformation(
                $"received message to send for {this._messageSenderName} | security {ruleBreach.Security.Name}");

            // Save the rule breach
            if (string.IsNullOrWhiteSpace(ruleBreach.CaseTitle))
            {
                ruleBreach.CaseTitle = this._caseTitle;
            }

            if (string.IsNullOrWhiteSpace(ruleBreach.Description))
            {
                ruleBreach.Description = description;
            }

            var ruleBreachItem = this._ruleBreachToRuleBreachMapper.RuleBreachItem(ruleBreach);
            var ruleBreachId   = await this._ruleBreachRepository.Create(ruleBreachItem);

            if (ruleBreachId == null)
            {
                this.Logger.LogError(
                    $"{this._messageSenderName} encountered an error saving the case message. Will not transmit to bus");
                return;
            }

            // Save the rule breach orders
            var ruleBreachOrderItems =
                this._ruleBreachToRuleBreachOrdersMapper.ProjectToOrders(ruleBreach, ruleBreachId?.ToString());

            await this._ruleBreachOrdersRepository.Create(ruleBreachOrderItems);

            // Check for duplicates
            if (ruleBreach.IsBackTestRun)
            {
                var hasBackTestDuplicates = await this._ruleBreachRepository.HasDuplicateBackTest(
                    ruleBreachId?.ToString(),
                    ruleBreach.CorrelationId);

                if (hasBackTestDuplicates)
                {
                    this.Logger.LogInformation(
                        $"was going to send for {this._messageSenderName} | security {ruleBreach.Security.Name} | rule breach {ruleBreachId} but detected duplicate back test case creation");

                    return;
                }
            }

            var hasDuplicates = await this._ruleBreachRepository.HasDuplicate(ruleBreachId?.ToString());

            if (hasDuplicates && !ruleBreach.IsBackTestRun)
            {
                this.Logger.LogInformation(
                    $"was going to send for {this._messageSenderName} | security {ruleBreach.Security.Name} | rule breach {ruleBreachId} but detected duplicate case creation");
                return;
            }

            if (ruleBreach.RuleParameters.TunedParameters != null)
            {
                this.Logger.LogInformation(
                    $"was going to send for {this._messageSenderName} | security {ruleBreach.Security.Name} | rule breach {ruleBreachId} but detected run was a tuning run");
                return;
            }

            var caseMessage = new CaseMessage {
                RuleBreachId = ruleBreachId.GetValueOrDefault(0)
            };

            try
            {
                this.Logger.LogInformation(
                    $"about to send for {this._messageSenderName} | security {ruleBreach.Security.Name}");
                await this._queueCasePublisher.Send(caseMessage);

                this.Logger.LogInformation($"sent for {this._messageSenderName} | security {ruleBreach.Security.Name}");
            }
            catch (Exception e)
            {
                this.Logger.LogError(
                    $"{this._messageSenderName} encountered an error sending the case message to the bus {e}");
            }
        }
Beispiel #12
0
        public override CaseRequestMessageResponse RequestCase(CaseMessage message)
        {
            try
            {
                Boolean caseAvailable = false;
                String  caseArea      = String.Empty;

                if (!String.IsNullOrWhiteSpace(message.CaseId))
                {
                    lock (m_CaseListLock)
                    {
                        try
                        {
                            if (EnableArchiveDecision && message.IsCaseEditable)
                            {
                                caseAvailable = base.IsCaseAvailable(message.CaseId, message.WorkstationId);

                                if (caseAvailable)
                                {
                                    base.AssignId(message.CaseId, message.WorkstationId);
                                }
                            }
                            else
                            {
                                caseAvailable = true;
                            }
                        }
                        catch (Exception ex)
                        {
                            throw ex;
                        }
                    }

                    if (caseAvailable)
                    {
                        if (EnableArchiveDecision && message.IsCaseEditable)
                        {
                            CaseListUpdateEvent(message.CaseId, message.WorkstationId.ToString(), true);
                        }

                        try
                        {
                            return(base.RequestCase(message));
                        }
                        catch (Exception ex)
                        {
                            throw new FaultException(new FaultReason(ex.Message));
                        }
                    }
                    else
                    {
                        throw new FaultException(new FaultReason(ErrorMessages.CASE_CURRENTLY_IN_USE));
                    }
                }

                throw new FaultException(new FaultReason(ErrorMessages.CASE_ID_INVALID));
            }
            catch (Exception ex)
            {
                //throw ex;
                throw new FaultException(new FaultReason(ex.Message));
            }
        }
Beispiel #13
0
 public CaseRequestMessageResponse RequestCase(CaseMessage message)
 {
     return(base.Channel.RequestCase(message));
 }