//---------------------------------------------------------------------------------- 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); }
//---------------------------------------------------------------------------------- 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); }
//------------------------------------------------------------------ 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); }
//---------------------------------------------------------------------------------- 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); }
/// <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); }
//------------------------------------------------------------------ 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[] { }); }
//------------------------------------------------------------------ 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); }
//----------------------------------------------- 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); }
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); } } }