Generátor generuje souhrny i překládá IP adresy na domény
authorFrantišek Kučera <franta-hg@frantovo.cz>
Sat, 14 Feb 2009 19:31:33 +0100
changeset 23b22c06c8a55c
parent 22 571d37e53ecd
child 24 0e73428ba7b1
Generátor generuje souhrny i překládá IP adresy na domény
java/HrisniciSpameri/src/java/cz/frantovo/hrisniciSpameri/DenniSouhrn.java
java/HrisniciSpameri/src/java/cz/frantovo/hrisniciSpameri/GenerovaciServlet.java
java/HrisniciSpameri/src/java/cz/frantovo/hrisniciSpameri/Sprava.java
java/HrisniciSpameri/src/java/cz/frantovo/hrisniciSpameri/dao/GeneratorSouhrnuDAO.java
java/HrisniciSpameri/src/java/cz/frantovo/hrisniciSpameri/dao/GeneratorSouhrnuDAO.sql.xml
java/HrisniciSpameri/src/java/cz/frantovo/hrisniciSpameri/dao/SouhrnDAO.java
java/HrisniciSpameri/web/sprava/index.jspx
     1.1 --- a/java/HrisniciSpameri/src/java/cz/frantovo/hrisniciSpameri/DenniSouhrn.java	Sat Feb 14 14:27:53 2009 +0100
     1.2 +++ b/java/HrisniciSpameri/src/java/cz/frantovo/hrisniciSpameri/DenniSouhrn.java	Sat Feb 14 19:31:33 2009 +0100
     1.3 @@ -3,14 +3,12 @@
     1.4  import cz.frantovo.hrisniciSpameri.dao.CilDAO;
     1.5  import cz.frantovo.hrisniciSpameri.dao.SouhrnDAO;
     1.6  import cz.frantovo.hrisniciSpameri.dto.Cil;
     1.7 -import cz.frantovo.hrisniciSpameri.dto.SitovaAdresa;
     1.8  import cz.frantovo.hrisniciSpameri.dto.Souhrn;
     1.9  import java.io.Serializable;
    1.10  import java.sql.Date;
    1.11  import java.text.DateFormat;
    1.12  import java.text.ParseException;
    1.13  import java.text.SimpleDateFormat;
    1.14 -import java.util.ArrayList;
    1.15  import java.util.Collection;
    1.16  import java.util.logging.Level;
    1.17  import java.util.logging.Logger;
    1.18 @@ -23,7 +21,6 @@
    1.19  
    1.20      private static final long serialVersionUID = 7932392366943861342L;
    1.21      private static final Logger log = Logger.getLogger(DenniSouhrn.class.getName());
    1.22 -    private static final long DEN = 1000 * 60 * 60 * 24;
    1.23      private static String formatDataVzor = "yyyy-MM-dd";
    1.24      public static DateFormat formatData = new SimpleDateFormat(formatDataVzor);
    1.25      private Date den;
    1.26 @@ -82,17 +79,9 @@
    1.27          return cil;
    1.28      }
    1.29  
    1.30 -    /**
    1.31 -     * Ve výchozím stavu zobrazujeme souhrn za předešlý den.
    1.32 -     * @return včerejšek
    1.33 -     */
    1.34 -    private static Date getVychoziDen() {
    1.35 -        return new Date(System.currentTimeMillis() - DEN);
    1.36 -    }
    1.37 -
    1.38      private void nastavVychoziDen() {
    1.39          log.log(Level.FINE, "Nastavuji den na výchozí hodnotu.");
    1.40 -        setDen(getVychoziDen());
    1.41 +        setDen(SouhrnDAO.getVychoziDen());
    1.42      }
    1.43  
    1.44      public Collection<Souhrn> getSouhrn() {
     2.1 --- a/java/HrisniciSpameri/src/java/cz/frantovo/hrisniciSpameri/GenerovaciServlet.java	Sat Feb 14 14:27:53 2009 +0100
     2.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.3 @@ -1,11 +0,0 @@
     2.4 -package cz.frantovo.hrisniciSpameri;
     2.5 -
     2.6 -/**
     2.7 - * Servlet, který vygeneruje denní souhrn.
     2.8 - * Pokud pro daný den už souhr vygenerovaný byl, smaže ho.
     2.9 - * Vše probíhá v jedné transakci.
    2.10 - * @author fiki
    2.11 - */
    2.12 -public class GenerovaciServlet {
    2.13 -
    2.14 -}
     3.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.2 +++ b/java/HrisniciSpameri/src/java/cz/frantovo/hrisniciSpameri/Sprava.java	Sat Feb 14 19:31:33 2009 +0100
     3.3 @@ -0,0 +1,33 @@
     3.4 +package cz.frantovo.hrisniciSpameri;
     3.5 +
     3.6 +import cz.frantovo.hrisniciSpameri.dao.CilDAO;
     3.7 +import cz.frantovo.hrisniciSpameri.dao.GeneratorSouhrnuDAO;
     3.8 +import cz.frantovo.hrisniciSpameri.dto.Cil;
     3.9 +import java.io.Serializable;
    3.10 +import java.util.Collection;
    3.11 +import java.sql.Date;
    3.12 +
    3.13 +/**
    3.14 + * Beana, která vygeneruje denní souhrn.
    3.15 + * Pokud pro daný den už souhr vygenerovaný byl, smaže ho.
    3.16 + * Vše probíhá v jedné transakci.
    3.17 + * @author fiki
    3.18 + */
    3.19 +public class Sprava implements Serializable {
    3.20 +
    3.21 +    private static final long serialVersionUID = -9048188038805055786L;
    3.22 +
    3.23 +    public boolean getGenerujSouhrn() {
    3.24 +        Date den = new Date(System.currentTimeMillis());
    3.25 +        Collection<Cil> cile = new CilDAO().getCile();
    3.26 +        for (Cil c : cile) {
    3.27 +            if (c.getId() == 1) {
    3.28 +                new GeneratorSouhrnuDAO().generujSouhrn(c, den);
    3.29 +            }
    3.30 +        }
    3.31 +
    3.32 +
    3.33 +
    3.34 +        return true;
    3.35 +    }
    3.36 +}
     4.1 --- a/java/HrisniciSpameri/src/java/cz/frantovo/hrisniciSpameri/dao/GeneratorSouhrnuDAO.java	Sat Feb 14 14:27:53 2009 +0100
     4.2 +++ b/java/HrisniciSpameri/src/java/cz/frantovo/hrisniciSpameri/dao/GeneratorSouhrnuDAO.java	Sat Feb 14 19:31:33 2009 +0100
     4.3 @@ -1,6 +1,7 @@
     4.4  package cz.frantovo.hrisniciSpameri.dao;
     4.5  
     4.6  import cz.frantovo.hrisniciSpameri.dto.Cil;
     4.7 +import java.net.InetAddress;
     4.8  import java.sql.Connection;
     4.9  import java.sql.Date;
    4.10  import java.sql.PreparedStatement;
    4.11 @@ -16,7 +17,8 @@
    4.12  
    4.13      private enum SQL {
    4.14  
    4.15 -        VLOZ_SOUHRN
    4.16 +        VLOZ_SOUHRN,
    4.17 +        SMAZ_SOUHRNY
    4.18      }
    4.19  
    4.20      /**
    4.21 @@ -24,7 +26,7 @@
    4.22       * @param cil cíl, pro který generujeme souhrn
    4.23       * @param den den, pro který souhrn generujeme.
    4.24       */
    4.25 -    private void generujSouhrn(Cil cil, Date den) {
    4.26 +    public void generujSouhrn(Cil cil, Date den) {
    4.27          Connection dbZdroj = getSpojeni(cil.getDatabaze());
    4.28          Connection dbSouhrn = getSpojeni(null);
    4.29  
    4.30 @@ -32,8 +34,18 @@
    4.31              /** TODO: Chyba spojení */
    4.32          } else {
    4.33              PreparedStatement ps = null;
    4.34 +            PreparedStatement psSmazat = null;
    4.35              ResultSet rs = null;
    4.36              try {
    4.37 +                log.log(Level.SEVERE, "AUTOCOMIT: " + dbSouhrn.getAutoCommit());
    4.38 +                dbSouhrn.setAutoCommit(false);
    4.39 +
    4.40 +                /** pokud už něco vygenerovaného pro daný den a cíl máme, smažeme to */
    4.41 +                psSmazat = dbSouhrn.prepareStatement(getSQL(SQL.SMAZ_SOUHRNY));
    4.42 +                psSmazat.setInt(1, cil.getId());
    4.43 +                psSmazat.setDate(2, den);
    4.44 +                psSmazat.executeUpdate();
    4.45 +
    4.46                  ps = dbZdroj.prepareStatement(cil.getSelekt());
    4.47                  ps.setDate(1, den);
    4.48                  rs = ps.executeQuery();
    4.49 @@ -46,7 +58,7 @@
    4.50                       */
    4.51                      psSouhrn.setDate(1, den);
    4.52                      psSouhrn.setString(2, rs.getString("ip"));
    4.53 -                    psSouhrn.setString(3, "TODO: přeložit " + rs.getString("ip"));
    4.54 +                    psSouhrn.setString(3, prelozIP(rs.getString("ip")));
    4.55                      psSouhrn.setInt(4, rs.getInt("pocet"));
    4.56                      psSouhrn.setInt(5, cil.getId());
    4.57                      psSouhrn.executeUpdate();
    4.58 @@ -57,7 +69,7 @@
    4.59                  log.log(Level.SEVERE, "Chyba při generování souhrnu.", e);
    4.60              } finally {
    4.61                  zavri(dbZdroj, ps, rs);
    4.62 -                zavri(dbSouhrn, null, null);
    4.63 +                zavri(dbSouhrn, psSmazat, null);
    4.64              }
    4.65          }
    4.66      }
    4.67 @@ -67,9 +79,26 @@
    4.68       * @param den den, pro který souhrny generujeme.
    4.69       */
    4.70      public void generujSouhrny(Date den) {
    4.71 +        if (den == null) {
    4.72 +            den = SouhrnDAO.getVychoziDen();
    4.73 +        }
    4.74 +
    4.75          Collection<Cil> cile = new CilDAO().getCile();
    4.76          for (Cil c : cile) {
    4.77              generujSouhrn(c, den);
    4.78          }
    4.79      }
    4.80 +
    4.81 +    /**
    4.82 +     * Přeloží IP adresu na doménu
    4.83 +     * @param ip IP adresa
    4.84 +     * @return doména
    4.85 +     */
    4.86 +    private static String prelozIP(String ip) {
    4.87 +        try {
    4.88 +            return InetAddress.getByName(ip).getHostName();
    4.89 +        } catch (Exception e) {
    4.90 +            return "Chyba: nepodařilo se přeložit.";
    4.91 +        }
    4.92 +    }
    4.93  }
     5.1 --- a/java/HrisniciSpameri/src/java/cz/frantovo/hrisniciSpameri/dao/GeneratorSouhrnuDAO.sql.xml	Sat Feb 14 14:27:53 2009 +0100
     5.2 +++ b/java/HrisniciSpameri/src/java/cz/frantovo/hrisniciSpameri/dao/GeneratorSouhrnuDAO.sql.xml	Sat Feb 14 19:31:33 2009 +0100
     5.3 @@ -8,4 +8,25 @@
     5.4          VALUES (?,?,?,?,?)
     5.5          ]]>
     5.6      </entry>
     5.7 +    <entry key="SMAZ_SOUHRNY">
     5.8 +        <![CDATA[
     5.9 +        DELETE FROM souhrn
    5.10 +        WHERE   cil = ?
    5.11 +                AND den = ?
    5.12 +        ]]>
    5.13 +    </entry>
    5.14 +    <entry key="UKAZKA_SELEKTU">
    5.15 +        <!--
    5.16 +            Takhle může vypadat selekt pro získání údajů z Drupalu (MySQL).
    5.17 +            Selekt nepíšeme sem, ale do databáze do definici cíle.
    5.18 +        -->
    5.19 +        <![CDATA[
    5.20 +        SELECT  hostname AS ip,
    5.21 +                count(*) AS pocet
    5.22 +        FROM    drupal5_watchdog
    5.23 +        WHERE   type = 'captcha'
    5.24 +                AND date(from_unixtime(timestamp)) = date(?)
    5.25 +        GROUP BY hostname
    5.26 +        ]]>
    5.27 +    </entry>
    5.28  </properties>
    5.29 \ No newline at end of file
     6.1 --- a/java/HrisniciSpameri/src/java/cz/frantovo/hrisniciSpameri/dao/SouhrnDAO.java	Sat Feb 14 14:27:53 2009 +0100
     6.2 +++ b/java/HrisniciSpameri/src/java/cz/frantovo/hrisniciSpameri/dao/SouhrnDAO.java	Sat Feb 14 19:31:33 2009 +0100
     6.3 @@ -25,6 +25,8 @@
     6.4          SOUHRN_ZA_OBDOBI_CIL
     6.5      }
     6.6  
     6.7 +    private static final long DEN = 1000 * 60 * 60 * 24;
     6.8 +
     6.9      /**
    6.10       * Získá z databáze souhrn útoků. Buď pro konkrétní den nebo pro dané období.
    6.11       * @param zacatek začátek období nebo konkrétní den
    6.12 @@ -91,4 +93,12 @@
    6.13  
    6.14          return souhrn;
    6.15      }
    6.16 +
    6.17 +    /**
    6.18 +     * Ve výchozím stavu zobrazujeme souhrn za předešlý den.
    6.19 +     * @return včerejšek
    6.20 +     */
    6.21 +    public static Date getVychoziDen() {
    6.22 +        return new Date(System.currentTimeMillis() - DEN);
    6.23 +    }
    6.24  }
     7.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     7.2 +++ b/java/HrisniciSpameri/web/sprava/index.jspx	Sat Feb 14 19:31:33 2009 +0100
     7.3 @@ -0,0 +1,14 @@
     7.4 +<?xml version="1.0" encoding="UTF-8"?>
     7.5 +<!-- 
     7.6 +    Document   : index
     7.7 +    Created on : 14.2.2009, 18:46:37
     7.8 +    Author     : fiki
     7.9 +-->
    7.10 +<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0"
    7.11 +          xmlns:c="http://java.sun.com/jsp/jstl/core">
    7.12 +
    7.13 +    <jsp:useBean id="sprava" class="cz.frantovo.hrisniciSpameri.Sprava" scope="page"/>
    7.14 +    <c:out value="${sprava.generujSouhrn}"/>
    7.15 +
    7.16 +
    7.17 +</jsp:root>