Example #1
0
        //----------------------------------------------------------------------------------
        public CResultAErreur GetValue(object objet, string strPropriete)
        {
            CResultAErreur result = CResultAErreur.True;

            result.Data = "";
            CTrapInstance trap = objet as CTrapInstance;

            if (trap == null)
            {
                return(result);
            }
            string strProp = strPropriete.Replace('_', '.');

            foreach (CTrapFieldValueBrute valeur in trap.ValeursVariables)
            {
                if (valeur.OID.StartsWith(strProp))
                {
                    CTrapFieldValueAvecIndex retour = new CTrapFieldValueAvecIndex(
                        valeur.OID.Substring(strProp.Length) + 1, valeur.Value);
                    result.Data = retour;
                    return(result);
                }
            }
            return(result);
        }
Example #2
0
        //----------------------------------------------------------------------------------
        public CResultAErreur SetValue(object objet, string strPropriete, object valeur)
        {
            CResultAErreur result = CResultAErreur.True;
            CTrapInstance  trap   = objet as CTrapInstance;

            if (trap == null)
            {
                return(result);
            }
            trap.SetValeurSupplementaire(strPropriete, valeur == null?"":valeur.ToString());
            return(result);
        }
Example #3
0
        //------------------------------------------------------------------
        public bool ShouldDeclenche(CTrapInstance message)
        {
            if (CommunityRequestedValue != null && CommunityRequestedValue.Length > 0 && message.Community != null && message.Community.Length > 0)
            {
                CSimpleMatch match = CSimpleMatch.FromString(CommunityRequestedValue);
                if (!match.Match(message.Community))
                {
                    return(false);
                }
            }
            if (GenericRequestedValue != null)
            {
                if (GenericRequestedValue.Value == GenericCode.EnterpriseSpecific)
                {
                    if (EntrepriseRequestedValue.Length > 0 && message.Entreprise != null)
                    {
                        CSimpleMatch match = CSimpleMatch.FromString(EntrepriseRequestedValue);
                        if (!match.Match(message.Entreprise))
                        {
                            return(false);
                        }
                    }
                    if (SpecificRequestedValue.Length > 0)
                    {
                        CSimpleMatch match = CSimpleMatch.FromString(SpecificRequestedValue);
                        if (!match.Match(message.SpecificValue.ToString()))
                        {
                            return(false);
                        }
                    }
                }
                else //Code générique
                {
                    if (GenericRequestedValue.Value != message.GenericCode)
                    {
                        return(false);
                    }
                }
            }


            if (FormuleDeclenchement != null && !(FormuleDeclenchement is C2iExpressionVrai))
            {
                CContexteEvaluationExpression ctx = new CContexteEvaluationExpression(message);
                CResultAErreur result             = FormuleDeclenchement.Eval(ctx);
                if (!result || !(result.Data is bool) || !(bool)result.Data)
                {
                    return(false);
                }
            }
            return(true);
        }
Example #4
0
        //----------------------------------------------------------------------------------
        public CResultAErreur GetValue(object objet, string strPropriete)
        {
            CResultAErreur result = CResultAErreur.True;

            result.Data = "";
            CTrapInstance trap = objet as CTrapInstance;

            if (trap == null)
            {
                return(result);
            }
            string strVal = trap.GetValeurSupplementaire(strPropriete);

            result.Data = strVal;
            return(result);
        }
Example #5
0
 /// <summary>
 /// Retourne true si une clé de l'agent correspond au finder
 /// </summary>
 /// <param name="agent"></param>
 /// <returns></returns>
 public bool MatchAgent(CTrapInstance trap, CAgentSnmpPourSupervision agent)
 {
     if (FormuleCleSpecifique != null)
     {
         CContexteEvaluationExpression ctx = new CContexteEvaluationExpression(trap);
         CResultAErreur result             = FormuleCleSpecifique.Eval(ctx);
         if (!result || result.Data == null)
         {
             return(false);
         }
         if (agent.TrapsIpString.Contains("," + result.Data.ToString() + ","))
         {
             return(true);
         }
     }
     return(false);
 }
Example #6
0
        //------------------------------------------------------------------
        public CAgentSnmpPourSupervision[] GetAgentsFromKey(CTrapInstance trap)
        {
            CListeEntitesDeMemoryDb <CAgentSnmpPourSupervision> lstAgents =
                new CListeEntitesDeMemoryDb <CAgentSnmpPourSupervision>(Database);

            if (FormuleCleSpecifique != null)
            {
                CContexteEvaluationExpression ctx = new CContexteEvaluationExpression(trap);
                CResultAErreur result             = FormuleCleSpecifique.Eval(ctx);
                if (result && result.Data != null && result.Data is string)
                {
                    lstAgents.Filtre = new CFiltreMemoryDb(
                        CAgentSnmpPourSupervision.c_champTrapsIp + " like @1",
                        "%," + (string)result.Data + ",%");

                    return(lstAgents.ToArray());
                }
            }

            return(new CAgentSnmpPourSupervision[] { });
        }
Example #7
0
        //------------------------------------------------------------------
        public CResultAErreur FillAlarm(CTrapInstance trap, CLocalAlarme alarme)
        {
            CContexteEvaluationExpression ctx = new CContexteEvaluationExpression(TrapHandler.TypeAgent);
            CDefinitionProprieteDynamiqueVariableFormule def = AssureVariableTrap(FormuleActions);

            if (def != null)
            {
                ctx.SetValeurVariable(def, trap);
            }
            def = AssureVariableAlarme(FormuleActions);
            if (def != null)
            {
                ctx.SetValeurVariable(def, alarme);
            }

            CResultAErreur result = FormuleActions.Eval(ctx);

            if (!result)
            {
                return(result);
            }

            return(result);
        }
Example #8
0
        //-----------------------------------------------
        public static CTrapInstance FromMessage(
            ISnmpMessage message,
            CAgentSnmpPourSupervision agentPourSupervision)
        {
            TrapV1Message        trapV1 = message as TrapV1Message;
            TrapV2Message        trapV2 = message as TrapV2Message;
            InformRequestMessage inform = message as InformRequestMessage;

            if (trapV1 != null)
            {
                CInterrogateurSnmp agent = new CInterrogateurSnmp();
                agent.ConnexionIp        = trapV1.AgentAddress.ToString();
                agent.Connexion.Version  = trapV1.Version;
                agent.ConnexionCommunity = trapV1.Community.ToString();
                agent.ConnexionPort      = 161;
                if (agentPourSupervision != null && agentPourSupervision.TypeAgent != null)
                {
                    agentPourSupervision.TypeAgent.PrepareDynamicSnmpAgent(agent);
                }

                CTrapInstance instance = new CTrapInstance(agent);
                instance.m_strEntreprise = trapV1.Enterprise.ToString();
                instance.m_version       = trapV1.Version;
                instance.m_strAgentIP    = trapV1.AgentAddress.ToString();
                instance.m_strCommunity  = trapV1.Community.ToString();
                instance.GenericCode     = trapV1.Generic;
                instance.SpecificValue   = trapV1.Specific.ToString();
                instance.AgentSnmp       = agentPourSupervision;
                foreach (Variable variable in trapV1.Variables())
                {
                    CTrapFieldValueBrute valeur = new CTrapFieldValueBrute(variable.Id.ToString(), variable.Data.ToString());
                    instance.AddValue(valeur);
                }
                return(instance);
            }
            else if (trapV2 != null)
            {
                CInterrogateurSnmp agent = new CInterrogateurSnmp();
                if (trapV2.SenderIP == null)
                {
                    return(null);
                }
                agent.ConnexionIp       = trapV2.SenderIP.ToString();
                agent.Connexion.Version = trapV2.Version;
                string strCommunauté = "";
                if (trapV2.Parameters != null)
                {
                    if (trapV2.Parameters.UserName != null)
                    {
                        strCommunauté = trapV2.Parameters.UserName.ToString();
                    }
                }
                agent.ConnexionCommunity = strCommunauté;
                agent.ConnexionPort      = 161;
                if (agentPourSupervision != null && agentPourSupervision.TypeAgent != null)
                {
                    agentPourSupervision.TypeAgent.PrepareDynamicSnmpAgent(agent);
                }

                CTrapInstance instance = new CTrapInstance(agent);
                instance.m_strEntreprise = trapV2.Enterprise.ToString();
                instance.m_strAgentIP    = trapV2.SenderIP.ToString();
                instance.m_version       = trapV2.Version;
                instance.m_strCommunity  = strCommunauté;
                if (trapV2.Enterprise.ToString() == ".1.3.6.1.6.3.1.1.5.1")
                {
                    instance.GenericCode = GenericCode.ColdStart;
                }
                else if (trapV2.Enterprise.ToString() == ".1.3.6.1.6.3.1.1.5.2")
                {
                    instance.GenericCode = GenericCode.WarmStart;
                }
                else if (trapV2.Enterprise.ToString() == ".1.3.6.1.6.3.1.1.5.3")
                {
                    instance.GenericCode = GenericCode.LinkDown;
                }
                else if (trapV2.Enterprise.ToString() == ".1.3.6.1.6.3.1.1.5.4")
                {
                    instance.GenericCode = GenericCode.LinkUp;
                }
                else if (trapV2.Enterprise.ToString() == ".1.3.6.1.6.3.1.1.5.5")
                {
                    instance.GenericCode = GenericCode.AuthenticationFailure;
                }
                else if (trapV2.Enterprise.ToString() == ".1.3.6.1.6.3.1.1.5.6")
                {
                    instance.GenericCode = GenericCode.EgpNeighborLoss;
                }
                else
                {
                    instance.GenericCode = GenericCode.EnterpriseSpecific;
                    int nPos = instance.m_strEntreprise.LastIndexOf(".");
                    if (nPos >= 0)
                    {
                        instance.m_strSpecific   = instance.m_strEntreprise.Substring(nPos + 1);
                        instance.m_strEntreprise = instance.m_strEntreprise.Substring(0, nPos);
                    }
                }
                instance.AgentSnmp = agentPourSupervision;
                foreach (Variable variable in trapV2.Variables())
                {
                    CTrapFieldValueBrute valeur = new CTrapFieldValueBrute(variable.Id.ToString(), variable.Data.ToString());
                    instance.AddValue(valeur);
                }
                return(instance);
            }
            return(null);
        }
Example #9
0
        public void CreateAlarmesOnTrap(CTrapInstance trap, CFuturocomTrace trace)
        {
            trap.CurrentTrapHandler = this;
            CDefinitionProprieteDynamiqueVariableFormule def = AssureVariableTrap(FormulePreTraitementTrap);
            CContexteEvaluationExpression ctx = new CContexteEvaluationExpression(TypeAgent);

            if (def != null)
            {
                ctx.SetValeurVariable(def, trap);
            }
            CResultAErreur result = CResultAErreur.True;

            trap.EntiteAssociee = null;
            if (FormuleIndexEntite != null && TypeEntiteAssocie != null)
            {
                CContexteEvaluationExpression ctxSurThis = new CContexteEvaluationExpression(trap);
                result = FormuleIndexEntite.Eval(ctxSurThis);
                if (result && result.Data != null)
                {
                    CListeEntitesDeMemoryDb <CEntiteSnmpPourSupervision> lst = trap.AgentSnmp.Entites;
                    lst.Filtre = new CFiltreMemoryDb(CEntiteSnmpPourSupervision.c_champIndex + "=@1 and " +
                                                     CTypeEntiteSnmpPourSupervision.c_champId + "=@2",
                                                     result.Data.ToString(),
                                                     TypeEntiteAssocie.Id);
                    if (lst.Count() > 0)
                    {
                        trap.EntiteAssociee = lst.ElementAt(0);
                        if (trace != null)
                        {
                            trace.Write(
                                "Trap associated to entity " + trap.EntiteAssociee.Libelle + " (" + trap.EntiteAssociee.TypeEntite.Libelle + ")",
                                ALTRACE.DEBUG);
                        }
                    }
                    else
                    {
                        if (trace != null)
                        {
                            trace.Write(
                                "Associated entity is null (" + TypeEntiteAssocie.Libelle + " " + result.Data.ToString() + ")",
                                ALTRACE.DEBUG);
                        }
                    }
                }
                else
                {
                    if (trace != null)
                    {
                        if (!result)
                        {
                            trace.Write(
                                "Error in associed entity index formula : " + result.Erreur.ToString(),
                                ALTRACE.DEBUG);
                        }
                        else
                        {
                            trace.Write(
                                "Error in associed entity index formula : the formula returned a null result",
                                ALTRACE.DEBUG);
                        }
                    }
                }
            }
            bool bEvalPretraite = true;

            if (FormulePreTraitementTrap is C2iExpressionGraphique &&
                FormulePreTraitementTrap.Parametres.Count == 0)
            {
                bEvalPretraite = false;
            }
            if (bEvalPretraite)
            {
                result = FormulePreTraitementTrap.Eval(ctx);
                if (!result && trace != null)
                {
                    trace.Write(
                        "Error in Pretreatment formula " + result.Erreur.ToString(),
                        ALTRACE.DEBUG);
                }
            }



            foreach (CCreateurAlarme createur in CreateursAlarmes)
            {
                if (trace != null)
                {
                    trace.Write(
                        "Try creator " + createur.Libelle + " (" + createur.Code + ")",
                        ALTRACE.DEBUG);
                }
                bool bCreer = createur.FormuleCondition.GetType() == typeof(C2iExpressionVrai);
                if (!bCreer)
                {
                    ctx    = new CContexteEvaluationExpression(trap);
                    result = createur.FormuleCondition.Eval(ctx);
                    if (result && result.Data is bool && (bool)result.Data)
                    {
                        bCreer = true;
                    }
                    else if (trace != null)
                    {
                        if (!result)
                        {
                            trace.Write(
                                "Creator " + createur.Libelle + " condition error : " + result.Erreur.ToString(),
                                ALTRACE.DEBUG);
                        }
                        else
                        {
                            trace.Write(
                                "Create " + createur.Libelle + " condition returned false",
                                ALTRACE.DEBUG);
                        }
                    }
                }
                if (bCreer)
                {
                    if (trace != null)
                    {
                        trace.Write(
                            "Creator " + createur.Libelle + " condition returned true",
                            ALTRACE.DEBUG);
                    }
                    trap.AddAlarm(createur.Code, 0, trace);
                }
            }
        }