# HG changeset patch # User František Kučera # Date 1234618073 -3600 # Node ID 571d37e53ecdd2d1c09b70d4a86d34f5f0149a31 # Parent 2bc6c427894d44e707a179e7aa935e2de2e11cb6 Základ generátoru souhrnů diff -r 2bc6c427894d -r 571d37e53ecd java/HrisniciSpameri/src/java/cz/frantovo/hrisniciSpameri/dao/GeneratorSouhrnuDAO.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/java/HrisniciSpameri/src/java/cz/frantovo/hrisniciSpameri/dao/GeneratorSouhrnuDAO.java Sat Feb 14 14:27:53 2009 +0100 @@ -0,0 +1,75 @@ +package cz.frantovo.hrisniciSpameri.dao; + +import cz.frantovo.hrisniciSpameri.dto.Cil; +import java.sql.Connection; +import java.sql.Date; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.util.Collection; +import java.util.logging.Level; + +/** + * + * @author fiki + */ +public class GeneratorSouhrnuDAO extends HrisniciSuperDAO { + + private enum SQL { + + VLOZ_SOUHRN + } + + /** + * Vygeneruje souhrn pro daný cíl a datum a uloží ho do databáze + * @param cil cíl, pro který generujeme souhrn + * @param den den, pro který souhrn generujeme. + */ + private void generujSouhrn(Cil cil, Date den) { + Connection dbZdroj = getSpojeni(cil.getDatabaze()); + Connection dbSouhrn = getSpojeni(null); + + if (dbZdroj == null || dbSouhrn == null) { + /** TODO: Chyba spojení */ + } else { + PreparedStatement ps = null; + ResultSet rs = null; + try { + ps = dbZdroj.prepareStatement(cil.getSelekt()); + ps.setDate(1, den); + rs = ps.executeQuery(); + PreparedStatement psSouhrn = dbSouhrn.prepareStatement(getSQL(SQL.VLOZ_SOUHRN)); + while (rs.next()) { + /** + * Souhrn bychom mohli vkládat pomocí SouhrnDAO, + * ale z výkonnostních důvodů to budeme dělat tady + * (jedno spojení a jeden předpřipravený příkaz). + */ + psSouhrn.setDate(1, den); + psSouhrn.setString(2, rs.getString("ip")); + psSouhrn.setString(3, "TODO: přeložit " + rs.getString("ip")); + psSouhrn.setInt(4, rs.getInt("pocet")); + psSouhrn.setInt(5, cil.getId()); + psSouhrn.executeUpdate(); + } + zavri(null, psSouhrn, null); + dbSouhrn.commit(); + } catch (Exception e) { + log.log(Level.SEVERE, "Chyba při generování souhrnu.", e); + } finally { + zavri(dbZdroj, ps, rs); + zavri(dbSouhrn, null, null); + } + } + } + + /** + * Vygeneruje denní souhrny pro všechny cíle. + * @param den den, pro který souhrny generujeme. + */ + public void generujSouhrny(Date den) { + Collection cile = new CilDAO().getCile(); + for (Cil c : cile) { + generujSouhrn(c, den); + } + } +} diff -r 2bc6c427894d -r 571d37e53ecd java/HrisniciSpameri/src/java/cz/frantovo/hrisniciSpameri/dao/GeneratorSouhrnuDAO.sql.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/java/HrisniciSpameri/src/java/cz/frantovo/hrisniciSpameri/dao/GeneratorSouhrnuDAO.sql.xml Sat Feb 14 14:27:53 2009 +0100 @@ -0,0 +1,11 @@ + + + + + + + \ No newline at end of file diff -r 2bc6c427894d -r 571d37e53ecd sql/schéma.sql --- a/sql/schéma.sql Sat Feb 14 13:32:38 2009 +0100 +++ b/sql/schéma.sql Sat Feb 14 14:27:53 2009 +0100 @@ -7,7 +7,7 @@ id bigint NOT NULL, nazev character varying NOT NULL, url character varying, -- Odkaz na daný cíl – pokud je to např. webová stránka - selekt character varying NOT NULL, -- SQL dotaz, kterým získáme ze zdrojové databáze: IP adresu a počet pokusů o spamování pro daný den (parametr dotazu) + selekt character varying NOT NULL, -- SQL dotaz, kterým získáme ze zdrojové databáze: IP adresu (sloupeček "ip") a počet pokusů (sloupeček "pocet") o spamování pro daný den (parametr dotazu) databaze character varying NOT NULL, -- Celé JNDI jméno datového zdroje – databáze, na které bude volán selekt. CONSTRAINT cil_pk PRIMARY KEY (id) ) @@ -15,7 +15,7 @@ ALTER TABLE cil OWNER TO hrisnicispameri; COMMENT ON TABLE cil IS 'Definice cílu (oběti) spamování.'; COMMENT ON COLUMN cil.url IS 'Odkaz na daný cíl – pokud je to např. webová stránka'; -COMMENT ON COLUMN cil.selekt IS 'SQL dotaz, kterým získáme ze zdrojové databáze: IP adresu a počet pokusů o spamování pro daný den (parametr dotazu)'; +COMMENT ON COLUMN cil.selekt IS 'SQL dotaz, kterým získáme ze zdrojové databáze: IP adresu (sloupeček "ip") a počet pokusů (sloupeček "pocet") o spamování pro daný den (parametr dotazu)'; COMMENT ON COLUMN cil.databaze IS 'Celé JNDI jméno datového zdroje – databáze, na které bude volán selekt.';