//---------------------------------------------------------------------------------------------------- public IDonneeSynchronisationMediation GetUpdatesForProxy(int nIdProxy, int nIdLastSyncSession) { using (CSessionClient session = CSessionClient.CreateInstance()) { CResultAErreur result = session.OpenSession(new CAuthentificationSessionProcess()); if (!result) { return(null); } using (CContexteDonneesSynchro ctx = new CContexteDonneesSynchro(session.IdSession, true)) { CSc2iDataServer connexionManager = CSc2iDataServer.GetInstance(); IDatabaseConnexionSynchronisable cnxSync = connexionManager.GetDatabaseConnexion(session.IdSession, typeof(CTypeAgentSnmpServeur)) as IDatabaseConnexionSynchronisable; if (cnxSync == null) { return(null); } cnxSync.IncrementeSyncSession(); int nIdSyncMax = cnxSync.IdSyncSession - 1; CFiltresSynchronisation filtres = new CFiltresSynchronisation(); filtres.AddFiltreForTable(CTypeAlarme.c_nomTable, null, false); filtres.AddFiltreForTable(CSeveriteAlarme.c_nomTable, null, false); filtres.AddFiltreForTable(CTypeAgentSnmp.c_nomTable, null, false); filtres.AddFiltreForTable(CAgentSnmp.c_nomTable, new CFiltreData(CSnmpProxyInDb.c_champId + "=@1", nIdProxy) , false); filtres.AddFiltreForTable(CTypeEntiteSnmp.c_nomTable, null, false); filtres.AddFiltreForTable(CEntiteSnmp.c_nomTable, new CFiltreDataAvance( CEntiteSnmp.c_nomTable, CAgentSnmp.c_nomTable + "." + CSnmpProxyInDb.c_champId + "=@1", nIdProxy), false); filtres.AddFiltreForTable(CRelationTypeEntiteSnmp_ChampCustom.c_nomTable, null, false); filtres.AddFiltreForTable(CRelationEntiteSnmp_ChampCustom.c_nomTable, new CFiltreDataAvance(CRelationEntiteSnmp_ChampCustom.c_nomTable, CEntiteSnmp.c_nomTable + "." + CAgentSnmp.c_nomTable + "." + CSnmpProxyInDb.c_champId + "=@1", nIdProxy), false); // Prend uniquement les Filtrages d'alarme compris entre les dates de validité et marqués Enabled filtres.AddFiltreForTable(CParametrageFiltrageAlarmes.c_nomTable, new CFiltreData( CParametrageFiltrageAlarmes.c_champIsActif + " = @1 AND " + CParametrageFiltrageAlarmes.c_champDateDebutValidite + " <= @2 AND " + CParametrageFiltrageAlarmes.c_champDateFinValidite + " > @2", true, DateTime.Now.Date), false); filtres.AddFiltreForTable(CCategorieMasquageAlarme.c_nomTable, null, false); DateTime dt = DateTime.Now; // Créer le MemoryDB bool bHasData = false; result = ctx.FillWithModifsFromVersion(nIdLastSyncSession, nIdSyncMax, ref bHasData, filtres, true); if (!result) { return(null); } TimeSpan sp = DateTime.Now - dt; Console.WriteLine("Lecture modifs médiation : " + sp.TotalMilliseconds); dt = DateTime.Now; CDonneesSynchronisationMediation donneesSynchro = new CDonneesSynchronisationMediation( CMemoryDbPourSupervision.GetMemoryDb(ctx), nIdSyncMax); CListeObjetsDonnees lstObjets = new CListeObjetsDonnees(ctx, typeof(CSeveriteAlarme)); lstObjets.InterditLectureInDB = true; foreach (CSeveriteAlarme severite in lstObjets) { severite.GetTypeForSupervision(donneesSynchro.Database); } lstObjets = new CListeObjetsDonnees(ctx, typeof(CTypeAlarme)); lstObjets.InterditLectureInDB = true; foreach (CTypeAlarme type in lstObjets) { type.GetTypeForSupervision(donneesSynchro.Database, true); } lstObjets = new CListeObjetsDonnees(ctx, typeof(CTypeAgentSnmp)); lstObjets.InterditLectureInDB = true; lstObjets.ReadDependances("TypesEntites"); foreach (CTypeAgentSnmp type in lstObjets) { type.GetTypeAgentPourSupervision(donneesSynchro.Database); } lstObjets = new CListeObjetsDonnees(ctx, typeof(CAgentSnmp)); lstObjets.InterditLectureInDB = true; lstObjets.ReadDependances("EntitesSnmp", "EntitesSnmp.RelationsChampsCustom", "EntitesSnmp.SiteSupervise", "EntitesSnmp.EquipementLogiqueSupervise", "EntitesSnmp.EquipementLogiqueSupervise.Site", "EntitesSnmp.LienReseauSupervise"); foreach (CAgentSnmp agent in lstObjets) { agent.GetAgentPourSupervision(donneesSynchro.Database, true); } lstObjets = new CListeObjetsDonnees(ctx, typeof(CParametrageFiltrageAlarmes)); lstObjets.InterditLectureInDB = true; foreach (CParametrageFiltrageAlarmes parametreFiltre in lstObjets) { parametreFiltre.GetLocalParametrageForSupervision(donneesSynchro.Database); } lstObjets = new CListeObjetsDonnees(ctx, typeof(CCategorieMasquageAlarme)); lstObjets.InterditLectureInDB = true; foreach (CCategorieMasquageAlarme categorie in lstObjets) { categorie.GetLocalCategorieForSupervision(donneesSynchro.Database); } //S'assure que les entités des valeurs de champ entité sont chargés lstObjets = new CListeObjetsDonnees(ctx, typeof(CRelationEntiteSnmp_ChampCustom)); lstObjets.InterditLectureInDB = true; foreach (CRelationEntiteSnmp_ChampCustom rel in lstObjets) { if (rel != null && rel.ElementAChamps != null) { ((CObjetDonnee)rel.ElementAChamps).AssureData(); } } lstObjets = new CListeObjetsDonnees(ctx, typeof(CEntiteSnmp)); lstObjets.InterditLectureInDB = true; foreach (CEntiteSnmp entite in lstObjets) { CTypeEntiteSnmp typeEntite = entite.TypeEntiteSnmp; futurocom.snmp.entitesnmp.CTypeEntiteSnmpPourSupervision te = typeEntite.GetTypeEntitePourSupervision(donneesSynchro.Database, true); entite.GetEntitePourSupervision(te); } sp = DateTime.Now - dt; Console.WriteLine("Intégration modifs médiation : " + sp.TotalMilliseconds); return(donneesSynchro); } } }
//////////////////////////////////////////////////////////////////////// /// <summary> /// Retourne les filtres finaux pour toutes les tables //Le data du result contient les filtresdata finaux /// </summary> /// <param name="nIdSession"></param> /// <param name="nIdUtilisateur">Id de l'utilisateur</param> /// <param name="listeUsersGroupe">Id des utilisateurs associés à celui ci</param> /// <returns></returns> public CResultAErreur GetFiltresFinaux(int nIdSession, CGroupeUtilisateursSynchronisation groupe) { CResultAErreur result = CResultAErreur.True; try { using (CContexteDonnee contexte = new CContexteDonnee(nIdSession, true, false)) { CFiltresDynamiquesForTables filtresForTables = CalculeFiltresForTables(); CFiltresSynchronisation filtres = new CFiltresSynchronisation(); foreach (string strNomTable in CContexteDonnee.MappeurTableToClass.GetListeTables()) { bool bShouldImporte = false; CFiltreDynamique filtreDynamique = filtresForTables.GetFiltreDynamiqueForTable(strNomTable, ref bShouldImporte); if (!bShouldImporte) { filtres.AddFiltreForTable(strNomTable, new CFiltreDataImpossible(), true); } else { if (filtreDynamique == null) { filtres.AddFiltreForTable(strNomTable, null, true); } else { //Trouve la variable contenant le groupe CVariableDynamique variable = null; foreach (CVariableDynamique v in filtreDynamique.ListeVariables) { if (v.Nom == CFiltreSynchronisation.c_nomVariableListeUtilisateurs) { variable = v; } } filtreDynamique.SetValeurChamp(variable, groupe.ListeIdsUtilisateurs); filtreDynamique.ContexteDonnee = contexte; CResultAErreur resultTmp = filtreDynamique.GetFiltreData(); CFiltreData filtreData = null; if (!result) { result.Erreur.EmpileErreurs(resultTmp.Erreur); result.EmpileErreur(I.T("Error in table @1|189", strNomTable)); } else { filtreData = (CFiltreData)resultTmp.Data; filtres.AddFiltreForTable(strNomTable, filtreData, true); } } } } result.Data = filtres; } } catch (Exception e) { result.EmpileErreur(new CErreurException(e)); } return(result); }