# HG changeset patch # User František Kučera # Date 1234654373 -3600 # Node ID dbb434bd4b992133953d65c5783be49d26eabdb7 # Parent f410145eb6808d3b5f43a86c47f9a2b331388120 Generátor vytváří souhrny pro období od-do (včetně) Funguje, ale kvůli překladům IP adres to trvá příliš dlouho. Bude potřeba nejdříve vytvořit souhrn bez překladů (bude tam null) a v dalším kole provést překlad IP adres → tím zkrátíme první databázovou transakci a ušetříme přibližně třetinu času na překlady (pokud každá IP útočila třikrát) nebo i více, pokud máme více cílů (je dost možné, že IP adresy útočníků budou stejné a nebudeme je muset překládat několikrát) diff -r f410145eb680 -r dbb434bd4b99 java/HrisniciSpameri/src/java/cz/frantovo/hrisniciSpameri/Sprava.java --- a/java/HrisniciSpameri/src/java/cz/frantovo/hrisniciSpameri/Sprava.java Sat Feb 14 23:03:13 2009 +0100 +++ b/java/HrisniciSpameri/src/java/cz/frantovo/hrisniciSpameri/Sprava.java Sun Feb 15 00:32:53 2009 +0100 @@ -18,13 +18,15 @@ private static final long serialVersionUID = -9048188038805055786L; public boolean getGenerujSouhrn() { - Date den = new Date(System.currentTimeMillis()); + Date zacatek = new Date(0); + Date konec = new Date(System.currentTimeMillis()); Collection cile = new CilDAO().getCile(); for (Cil c : cile) { if (c.getId() == 1) { - new GeneratorSouhrnuDAO().generujSouhrn(c, den); + new GeneratorSouhrnuDAO().generujSouhrn(c, zacatek, konec); } } + System.out.println("Od: " + zacatek + " do: " + konec); diff -r f410145eb680 -r dbb434bd4b99 java/HrisniciSpameri/src/java/cz/frantovo/hrisniciSpameri/dao/GeneratorSouhrnuDAO.java --- a/java/HrisniciSpameri/src/java/cz/frantovo/hrisniciSpameri/dao/GeneratorSouhrnuDAO.java Sat Feb 14 23:03:13 2009 +0100 +++ b/java/HrisniciSpameri/src/java/cz/frantovo/hrisniciSpameri/dao/GeneratorSouhrnuDAO.java Sun Feb 15 00:32:53 2009 +0100 @@ -26,10 +26,14 @@ * @param cil cíl, pro který generujeme souhrn * @param den den, pro který souhrn generujeme. */ - public void generujSouhrn(Cil cil, Date den) { + public void generujSouhrn(Cil cil, Date zacatek, Date konec) { Connection dbZdroj = getSpojeni(cil.getDatabaze()); Connection dbSouhrn = getSpojeni(null); + if (konec == null) { + konec = zacatek; + } + if (dbZdroj == null || dbSouhrn == null) { /** TODO: Chyba spojení */ } else { @@ -37,17 +41,16 @@ PreparedStatement psSmazat = null; ResultSet rs = null; try { - log.log(Level.SEVERE, "AUTOCOMIT: " + dbSouhrn.getAutoCommit()); - dbSouhrn.setAutoCommit(false); - /** pokud už něco vygenerovaného pro daný den a cíl máme, smažeme to */ psSmazat = dbSouhrn.prepareStatement(getSQL(SQL.SMAZ_SOUHRNY)); psSmazat.setInt(1, cil.getId()); - psSmazat.setDate(2, den); + psSmazat.setDate(2, zacatek); + psSmazat.setDate(3, konec); psSmazat.executeUpdate(); ps = dbZdroj.prepareStatement(cil.getSelekt()); - ps.setDate(1, den); + ps.setDate(1, zacatek); + ps.setDate(2, konec); rs = ps.executeQuery(); PreparedStatement psSouhrn = dbSouhrn.prepareStatement(getSQL(SQL.VLOZ_SOUHRN)); while (rs.next()) { @@ -56,7 +59,7 @@ * 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.setDate(1, rs.getDate("den")); psSouhrn.setString(2, rs.getString("ip")); psSouhrn.setString(3, prelozIP(rs.getString("ip"))); psSouhrn.setInt(4, rs.getInt("pocet")); @@ -75,17 +78,14 @@ } /** - * Vygeneruje denní souhrny pro všechny cíle. - * @param den den, pro který souhrny generujeme. + * Vygeneruje denní souhrny pro všechny cíle za dané období. + * @param zacatek začátek období – včetně + * @param konec konec období – včetně */ - public void generujSouhrny(Date den) { - if (den == null) { - den = SouhrnDAO.getVychoziDen(); - } - + public void generujSouhrny(Date zacatek, Date konec) { Collection cile = new CilDAO().getCile(); for (Cil c : cile) { - generujSouhrn(c, den); + generujSouhrn(c, zacatek, konec); } } diff -r f410145eb680 -r dbb434bd4b99 java/HrisniciSpameri/src/java/cz/frantovo/hrisniciSpameri/dao/GeneratorSouhrnuDAO.sql.xml --- a/java/HrisniciSpameri/src/java/cz/frantovo/hrisniciSpameri/dao/GeneratorSouhrnuDAO.sql.xml Sat Feb 14 23:03:13 2009 +0100 +++ b/java/HrisniciSpameri/src/java/cz/frantovo/hrisniciSpameri/dao/GeneratorSouhrnuDAO.sql.xml Sun Feb 15 00:32:53 2009 +0100 @@ -12,7 +12,8 @@ = ? + AND den <= ? ]]> @@ -22,11 +23,13 @@ --> = date(?) + AND date(from_unixtime(timestamp)) <= date(?) + GROUP BY hostname, date(from_unixtime(timestamp)) ]]> \ No newline at end of file diff -r f410145eb680 -r dbb434bd4b99 sql/schéma.sql --- a/sql/schéma.sql Sat Feb 14 23:03:13 2009 +0100 +++ b/sql/schéma.sql Sun Feb 15 00:32: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 (sloupeček "ip") a počet pokusů (sloupeček "pocet") 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"), počet pokusů (sloupeček "pocet") o spamování a den pokusu (sloupeček "den"). To vše pro období od do (dva parametry dotazu) včetně. 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 (sloupeček "ip") a počet pokusů (sloupeček "pocet") 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"), počet pokusů (sloupeček "pocet") o spamování a den pokusu (sloupeček "den"). To vše pro období od do (dva parametry dotazu) včetně.'; COMMENT ON COLUMN cil.databaze IS 'Celé JNDI jméno datového zdroje – databáze, na které bude volán selekt.';