コード例 #1
0
        //---------------------------------------------------
        public IEnumerable <CAgentFinderFromKey> GetAgentFindersAAppliquer(CTrapInstance trap)
        {
            List <CAgentFinderFromKey> lstFinders = new List <CAgentFinderFromKey>();

            if (trap != null)
            {
                foreach (CAgentFinderFromKey finder in AgentFinders)
                {
                    if (finder.ShouldApply(trap))
                    {
                        //handler = handler.PrepareForAlarmCreation(this);
                        lstFinders.Add(finder);
                    }
                }
            }
            return(lstFinders.ToArray());
        }
コード例 #2
0
        //---------------------------------------------------
        public IEnumerable <CTrapHandler> GetTrapsHandlersAAppliquer(CTrapInstance trap)
        {
            List <CTrapHandler> lstTraps = new List <CTrapHandler>();

            if (trap != null)
            {
                foreach (CTrapHandler handler in Handlers)
                {
                    if (handler.ShouldDeclenche(trap))
                    {
                        //handler = handler.PrepareForAlarmCreation(this);
                        lstTraps.Add(handler);
                    }
                }
            }
            return(lstTraps.ToArray());
        }
コード例 #3
0
ファイル: CFormTrapReceiver.cs プロジェクト: ykebaili/Timos
        public void OnReceiveMessage(MessageReceivedEventArgs e)
        {
            DateTime     dt   = DateTime.Now;
            ListViewItem item = new ListViewItem(e.ToString());

            item.Tag = e.Message;

            if (m_wndListView.Items.Count > 0)
            {
                m_wndListView.Items.Insert(0, item);
            }
            else
            {
                m_wndListView.Items.Add(item);
            }

            CTrapInstance trap = CTrapInstance.FromMessage(
                e.Message,
                CBaseTypesAlarmes.Instance.BaseTraps);

            if (trap != null)
            {
                IEnumerable <CTrapHandler> lstTrapsHandlers = CBaseTypesAlarmes.Instance.BaseTraps.GetTrapsHandlersAAppliquer(trap);

                foreach (CTrapHandler handler in lstTrapsHandlers)
                {
                    handler.CreateAlarmesOnTrap(trap);
                }
                foreach (CAlarmeACreer creation in trap.AlarmesACreer)
                {
                    m_gestionnaireAlarmes.CreateAlarme(creation);
                }

                TimeSpan sp = DateTime.Now - dt;
                System.Console.WriteLine("Durée traitement : " + sp.TotalMilliseconds.ToString());
                RefreshListeAlarmes();
            }
        }
コード例 #4
0
ファイル: CServiceMediation.cs プロジェクト: ykebaili/Timos
        //-----------------------------------------------
        private IEnumerable <CAgentSnmpPourSupervision> GetAgentsForTrap(CTrapInstance trap, string strTrapOriginIP)
        {
            /*Principe de fonctionnement :
             * On tente tout d'abord de trouver les agents qui ont l'ip transmise par le trap.
             * Si on en trouve
             *      On vérifie s'il  y a des finders pour ce trap et cet agent, et si oui,
             *      on vérifie que la clé correspond.
             *      Si elle correspond, on garde l'agent
             *      Sinon, on le supprime de la liste des agents valides
             *  Sinon (on n'a pas trouvé d'agent par l'IP ou bien la liste est vide suite à la passe 1)
             *      Chercher via TOUS les finders de la base des agents qui correspondraient
             */
            List <CAgentSnmpPourSupervision> listeAgentsFromIp = new List <CAgentSnmpPourSupervision>(
                m_configuration.GetAgentsForIp(strTrapOriginIP));

            if (listeAgentsFromIp.Count > 0)
            {
                foreach (CAgentSnmpPourSupervision agent in listeAgentsFromIp.ToArray())
                {
                    IEnumerable <CAgentFinderFromKey> lstFinders = agent.TypeAgent.GetAgentFindersAAppliquer(trap);
                    if (lstFinders.Count() == 0)
                    {
                        continue;//Pas de finder à appliquer, on conserve donc l'agent
                    }
                    bool bOneMatch = false;
                    foreach (CAgentFinderFromKey finder in lstFinders)
                    {
                        if (finder.MatchAgent(trap, agent))
                        {
                            bOneMatch = true;
                            break;
                        }
                    }
                    if (!bOneMatch)//Aucun finder ne colle avec l'agent, il n'est donc pas valide
                    {
                        listeAgentsFromIp.Remove(agent);
                    }
                }
                if (listeAgentsFromIp.Count() > 0)
                {
                    return(listeAgentsFromIp.AsReadOnly());
                }
            }

            HashSet <CAgentSnmpPourSupervision> lstAgents = new HashSet <CAgentSnmpPourSupervision>();
            //On n'a pas trouvé d'agent via l'IP
            CListeEntitesDeMemoryDb <CAgentFinderFromKey> lstFindersFromDb = new CListeEntitesDeMemoryDb <CAgentFinderFromKey>(m_configuration.DataBase);

            foreach (CAgentFinderFromKey finder in lstFindersFromDb)
            {
                if (finder.ShouldApply(trap))
                {
                    foreach (CAgentSnmpPourSupervision agent in finder.GetAgentsFromKey(trap))
                    {
                        if (strTrapOriginIP != null && strTrapOriginIP.Length > 0)
                        {
                            if (finder.AutoUpdateIpOnMediationServices)
                            {
                                agent.Ip = strTrapOriginIP;
                            }
                            if (finder.AutoUpdateIpOnMediationServices || finder.AutoUpdateIpOnTimosDatabase)
                            {
                                UpdateAgentIpFromMediation(agent.Id, strTrapOriginIP, finder.AutoUpdateIpOnTimosDatabase);
                            }
                        }
                        lstAgents.Add(agent);
                    }
                }
            }
            return(lstAgents);
        }
コード例 #5
0
ファイル: CServiceMediation.cs プロジェクト: ykebaili/Timos
        //-----------------------------------------------
        private void TraiteMessagesATraiter()
        {
            if (m_nWaitingCounter > 5)
            {
                return;
            }
            m_nWaitingCounter++;
            lock (typeof(CLockerTraiteMessage))
            {
                m_nWaitingCounter--;
                List <ISnmpMessage> lstMessages = new List <ISnmpMessage>();
                lock (m_listeMessagesATraiter)
                {
                    lstMessages.AddRange(m_listeMessagesATraiter);
                    m_listeMessagesATraiter.Clear();
                }



                foreach (ISnmpMessage message in lstMessages)
                {
                    m_nNbMessages++;
                    DateTime      dtChrono   = DateTime.Now;
                    string        strIpAgent = "";
                    TrapV1Message trapV1     = message as TrapV1Message;
                    TrapV2Message trapV2     = message as TrapV2Message;
                    if (trapV1 != null)
                    {
                        m_gestionnaireAlarmes.Trace.Write(
                            "Trap received : " + trapV1.GetTraceInfo(),
                            ALTRACE.TRACE, ALTRACE.DEBUG);
                        strIpAgent = trapV1.AgentAddress.ToString();
                        StringBuilder bl = new StringBuilder();
                        foreach (Variable valeur in trapV1.Variables())
                        {
                            bl.Append(valeur.Id.ToString());
                            bl.Append("=");
                            bl.Append(valeur.Data.ToString());
                            bl.Append("\r\n");
                        }
                        m_gestionnaireAlarmes.Trace.Write(
                            "Trap fields : \r\n" + bl.ToString(),
                            ALTRACE.TRACE, ALTRACE.DEBUG);
                    }
                    else if (trapV2 != null)
                    {
                        m_gestionnaireAlarmes.Trace.Write(
                            "Trap received : " + trapV2.GetTraceInfo(),
                            ALTRACE.TRACE, ALTRACE.DEBUG);
                        if (trapV2.SenderIP != null)
                        {
                            strIpAgent = trapV2.SenderIP.ToString();
                        }
                        StringBuilder bl = new StringBuilder();
                        foreach (Variable valeur in trapV2.Variables())
                        {
                            bl.Append(valeur.Id.ToString());
                            bl.Append("=");
                            bl.Append(valeur.Data.ToString());
                            bl.Append("\r\n");
                        }
                        m_gestionnaireAlarmes.Trace.Write(
                            "Trap fields : \r\n" + bl.ToString(),
                            ALTRACE.TRACE, ALTRACE.DEBUG);
                    }
                    try
                    {
                        CTrapInstance trapTmp = CTrapInstance.FromMessage(message, null);
                        if (trapTmp == null)
                        {
                            m_gestionnaireAlarmes.Trace.Write(
                                "Can not interpret message " + message.ToString(), ALTRACE.TRACE, ALTRACE.DEBUG);
                            continue;
                        }
                        IEnumerable <CAgentSnmpPourSupervision> lstAgents = GetAgentsForTrap(trapTmp, strIpAgent);


                        bool bHasAgent = false;

                        foreach (CAgentSnmpPourSupervision agent in lstAgents)
                        {
                            m_gestionnaireAlarmes.Trace.Write(
                                "Trap managed by agent " + agent.Id,
                                ALTRACE.DEBUG);
                            CTypeAgentPourSupervision typeAgent = agent.TypeAgent;
                            if (typeAgent != null)
                            {
                                CTrapInstance trap = CTrapInstance.FromMessage(
                                    message,
                                    agent);
                                if (trap != null)
                                {
                                    IEnumerable <CTrapHandler> lstTrapsHandlers = typeAgent.GetTrapsHandlersAAppliquer(trap);
                                    foreach (CTrapHandler handler in lstTrapsHandlers)
                                    {
                                        m_gestionnaireAlarmes.Trace.Write("Apply trap handler " + handler.Libelle,
                                                                          ALTRACE.DEBUG);
                                        handler.CreateAlarmesOnTrap(trap, m_gestionnaireAlarmes.Trace);
                                    }
                                    if (lstTrapsHandlers.Count() == 0)
                                    {
                                        m_gestionnaireAlarmes.Trace.Write(
                                            "No trap handler for this trap",
                                            ALTRACE.DEBUG);
                                    }

                                    foreach (CAlarmeACreer creation in trap.AlarmesACreer)
                                    {
                                        m_gestionnaireAlarmes.CreateAlarme(creation, EModeRemonteeAlarmes.InscrireARemonterMaisNePasLeFaire);
                                    }

                                    if (trap.AlarmesACreer.Count() == 0)
                                    {
                                        m_gestionnaireAlarmes.Trace.Write("No alarm creator for this trap",
                                                                          ALTRACE.DEBUG);
                                    }
                                }
                            }
                        }
                        if (!bHasAgent)
                        {
                            m_gestionnaireAlarmes.Trace.Write(
                                "No agent for this trap",
                                ALTRACE.DEBUG);
                        }
                    }

                    catch (Exception ex)
                    {
                        m_gestionnaireAlarmes.Trace.Write(
                            "Exception : " + ex.Message,
                            ALTRACE.DEBUG);
                        lock (m_listeMessagesATraiter)
                        {
                            m_listeMessagesATraiter.InsertRange(0, lstMessages);
                        }
                        break;
                    }
                    TimeSpan sp = DateTime.Now - dtChrono;
                    if (m_nNbMessages % 100 == 0)
                    {
                        Console.WriteLine("Traite alrm (" + m_nNbMessages + "): " + sp.TotalMilliseconds);
                    }
                }
            }
            m_gestionnaireAlarmes.SendAlarmes();
        }