1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
|
PROCEDURE "CALCUL_ALERTES"
IS
CURSOR P_CUR
IS
SELECT DL.NOM_DOMAINE,
R.NOM_PRODUCTEUR,
R.NOM_FLUX,
E.NOM_CONSOMMATEUR,
R.NB_FLUX_A_SURVEILLER,
R.SEUIL_HORAIRE1,
R.SEUIL_HORAIRE2,
R.SEUIL_HORAIRE3
FROM T_PLANS_DE_ROUTAGES R,
T_DL_APPLI_FLUX DL,
T_DYNAMIQUE_ENDPOINTS E,
T_POST_TRAITEMENTS T
WHERE DL.NOM_APPLICATION = R.NOM_PRODUCTEUR
AND DL.NOM_FLUX = R.NOM_FLUX
AND E.POST_TRAITEMENT_ID = T.POST_TRAITEMENT_ID
AND T.PLAN_DE_ROUTAGE_ID = R.PLAN_DE_ROUTAGE_ID;
R_ALERTES P_CUR%ROWTYPE;
DATESYSTEM DATE;
COMPTEUR_ENTREE NUMBER;
COMPTEUR_SORTIE NUMBER;
SANTE_FLUX CHAR;
SANTE_TRANSMISSION CHAR;
NB_FLUX1 NUMBER;
NB_FLUX2 NUMBER;
NB_FLUX3 NUMBER;
DUREE_SURVEILLANCE NUMBER;
BEGIN
DBMS_OUTPUT.PUT_LINE(' -------- DEBUT DE PROC STOCK CALCUL_ALERTES -------- ');
DATESYSTEM:=SYSDATE;
--DABORD ON VIDE LA TABLE
EXECUTE IMMEDIATE('TRUNCATE TABLE T_ALERTES');
OPEN P_CUR;
LOOP
BEGIN
FETCH P_CUR INTO R_ALERTES;
--SI ON EST A LA FIN EN EXIT
EXIT WHEN P_CUR%NOTFOUND;
--CALCULE NOMBRE FLUX SELON SEUIL 1,2 et 3
SELECT COUNT(TT.NOM_FLUX) INTO NB_FLUX1 FROM T_TRACES TT WHERE TT.NOM_FLUX = R_ALERTES.NOM_FLUX AND TT.CONSOMATEUR = R_ALERTES.NOM_PRODUCTEUR AND TT.DATE_CREATION BETWEEN DATESYSTEM - (R_ALERTES.SEUIL_HORAIRE1)/24 AND DATESYSTEM GROUP BY NOM_FLUX;
SELECT COUNT(TT.NOM_FLUX) INTO NB_FLUX2 FROM T_TRACES TT WHERE TT.NOM_FLUX = R_ALERTES.NOM_FLUX AND TT.CONSOMATEUR = R_ALERTES.NOM_PRODUCTEUR AND TT.DATE_CREATION BETWEEN DATESYSTEM - (R_ALERTES.SEUIL_HORAIRE2)/24 AND DATESYSTEM GROUP BY NOM_FLUX;
SELECT COUNT(TT.NOM_FLUX) INTO NB_FLUX3 FROM T_TRACES TT WHERE TT.NOM_FLUX = R_ALERTES.NOM_FLUX AND TT.CONSOMATEUR = R_ALERTES.NOM_PRODUCTEUR AND TT.DATE_CREATION BETWEEN DATESYSTEM - (R_ALERTES.SEUIL_HORAIRE3)/24 AND DATESYSTEM GROUP BY NOM_FLUX;
--GESTION DES EXCEPTIONS
EXCEPTION
WHEN NO_DATA_FOUND THEN NULL;
END;
--CALCULE SANTE_FLUX
IF R_ALERTES.NB_FLUX_A_SURVEILLER < 0 THEN
SANTE_FLUX := 'G';
ELSE
IF NB_FLUX1 > R_ALERTES.NB_FLUX_A_SURVEILLER THEN
SANTE_FLUX := 'V';
DUREE_SURVEILLANCE:=R_ALERTES.SEUIL_HORAIRE1;
ELSE
IF NB_FLUX3 <= R_ALERTES.NB_FLUX_A_SURVEILLER THEN
SANTE_FLUX := 'R';
DUREE_SURVEILLANCE:=R_ALERTES.SEUIL_HORAIRE3;
ELSE
IF NB_FLUX2 <= R_ALERTES.NB_FLUX_A_SURVEILLER THEN
SANTE_FLUX := 'O';
DUREE_SURVEILLANCE:=R_ALERTES.SEUIL_HORAIRE2;
ELSE
SANTE_FLUX := 'J';
DUREE_SURVEILLANCE:=R_ALERTES.SEUIL_HORAIRE1;
END IF;
END IF;
END IF;
END IF;
--CALCULE COMPTEUR_ENTREE
SELECT COUNT(T.NOM_FLUX)
INTO COMPTEUR_ENTREE
FROM T_TRACES T
WHERE T.NOM_FLUX = R_ALERTES.NOM_FLUX
AND T.PRODUCTEUR = R_ALERTES.NOM_PRODUCTEUR
AND T.CONSOMATEUR IS NULL
AND T.DATE_CREATION BETWEEN DATESYSTEM - (DUREE_SURVEILLANCE)/24 AND DATESYSTEM
GROUP BY T.NOM_FLUX, T.PRODUCTEUR;
--CALCULE COMPTEUR_SORTIE
SELECT COUNT(T.NOM_FLUX)
INTO COMPTEUR_SORTIE
FROM T_TRACES T
WHERE T.NOM_FLUX = R_ALERTES.NOM_FLUX
AND T.PRODUCTEUR = R_ALERTES.NOM_PRODUCTEUR
AND T.STATUS = 'OK'
AND T.CONSOMATEUR IS NOT NULL
AND T.DATE_CREATION BETWEEN DATESYSTEM - (DUREE_SURVEILLANCE)/24 AND DATESYSTEM
GROUP BY T.NOM_FLUX, T.PRODUCTEUR;
RAISE NO_DATA_FOUND;
-- CLACULE SANTE_TRANSMISSION
IF COMPTEUR_ENTREE = COMPTEUR_SORTIE THEN
SANTE_TRANSMISSION:='V';
ELSE
SANTE_TRANSMISSION:='R';
END IF;
--INSERT DONNEES
insert into T_alertes
(nom_domaine,
nom_producteur,
nom_flux,
date_derniere_verif,
nom_consomateur,
duree_surveillance,
compteur_entree,
compteur_sortie,
sante_flux,
sante_transmission)
values
(R_ALERTES.NOM_DOMAINE,
R_ALERTES.NOM_PRODUCTEUR,
R_ALERTES.NOM_FLUX,
DATESYSTEM,
R_ALERTES.NOM_CONSOMMATEUR,
DUREE_SURVEILLANCE,
COMPTEUR_ENTREE,
COMPTEUR_SORTIE,
SANTE_FLUX,
SANTE_TRANSMISSION);
COMMIT;
END LOOP;
CLOSE P_CUR;
DBMS_OUTPUT.PUT_LINE(' -------- FIN DE PROC STOCK CALCUL_ALERTES -------- ');
END "CALCUL_ALERTES"; |
Partager