java/HrisniciSpameri/src/java/cz/frantovo/hrisniciSpameri/dao/SouhrnDAO.java
author František Kučera <franta-hg@frantovo.cz>
Sat Feb 14 19:31:33 2009 +0100 (2009-02-14)
changeset 23 b22c06c8a55c
parent 21 2bc6c427894d
child 24 0e73428ba7b1
permissions -rw-r--r--
Generátor generuje souhrny i překládá IP adresy na domény
     1 package cz.frantovo.hrisniciSpameri.dao;
     2 
     3 import cz.frantovo.hrisniciSpameri.dto.Cil;
     4 import cz.frantovo.hrisniciSpameri.dto.SitovaAdresa;
     5 import cz.frantovo.hrisniciSpameri.dto.Souhrn;
     6 import java.sql.Connection;
     7 import java.sql.Date;
     8 import java.sql.PreparedStatement;
     9 import java.sql.ResultSet;
    10 import java.util.ArrayList;
    11 import java.util.Collection;
    12 import java.util.logging.Level;
    13 
    14 /**
    15  *
    16  * @author fiki
    17  */
    18 public class SouhrnDAO extends HrisniciSuperDAO {
    19 
    20     private enum SQL {
    21 
    22         DENNI_SOUHRN,
    23         DENNI_SOUHRN_CIL,
    24         SOUHRN_ZA_OBDOBI,
    25         SOUHRN_ZA_OBDOBI_CIL
    26     }
    27 
    28     private static final long DEN = 1000 * 60 * 60 * 24;
    29 
    30     /**
    31      * Získá z databáze souhrn útoků. Buď pro konkrétní den nebo pro dané období.
    32      * @param zacatek začátek období nebo konkrétní den
    33      * @param konec konec období nebo null (pokud nás zajímá konkrétní den)
    34      * @param cil id cíle nebo nula, pokud chceme všechny cíle
    35      * @return seznam útoků
    36      */
    37     public Collection<Souhrn> getSouhrn(Date zacatek, Date konec, int cil) {
    38         Collection<Souhrn> souhrn = new ArrayList<Souhrn>();
    39 
    40         Connection db = getSpojeni(null);
    41         if (db == null) {
    42             return null;
    43         } else {
    44             PreparedStatement ps = null;
    45             ResultSet rs = null;
    46             try {
    47                 if (konec == null) {
    48                     if (cil == 0) {
    49                         ps = db.prepareStatement(getSQL(SQL.DENNI_SOUHRN));
    50                         ps.setDate(1, zacatek);
    51                     } else {
    52                         ps = db.prepareStatement(getSQL(SQL.DENNI_SOUHRN_CIL));
    53                         ps.setDate(1, zacatek);
    54                         ps.setInt(2, cil);
    55                     }
    56                 } else {
    57                     if (cil == 0) {
    58                         ps = db.prepareStatement(getSQL(SQL.SOUHRN_ZA_OBDOBI));
    59                         ps.setDate(1, zacatek);
    60                         ps.setDate(2, konec);
    61                     } else {
    62                         ps = db.prepareStatement(getSQL(SQL.SOUHRN_ZA_OBDOBI_CIL));
    63                         ps.setDate(1, zacatek);
    64                         ps.setDate(2, konec);
    65                         ps.setInt(3, cil);
    66                     }
    67                 }
    68 
    69 
    70                 rs = ps.executeQuery();
    71                 while (rs.next()) {
    72                     Souhrn s = new Souhrn();
    73                     s.setAdresa(new SitovaAdresa(rs.getString("ip"), rs.getString("domena")));
    74                     s.setDen(rs.getDate("den"));
    75                     s.setPocet(rs.getInt("pocet"));
    76 
    77                     Cil c = new Cil();
    78                     c.setId(rs.getInt("id"));
    79                     c.setNazev(rs.getString("nazev"));
    80                     c.setUrl(rs.getString("url"));
    81                     c.setSelekt(rs.getString("selekt"));
    82                     c.setDatabaze(rs.getString("databaze"));
    83                     s.setCil(c);
    84 
    85                     souhrn.add(s);
    86                 }
    87             } catch (Exception e) {
    88                 log.log(Level.SEVERE, "Chyba při získávání souhrnu z databáze", e);
    89             } finally {
    90                 zavri(db, ps, rs);
    91             }
    92         }
    93 
    94         return souhrn;
    95     }
    96 
    97     /**
    98      * Ve výchozím stavu zobrazujeme souhrn za předešlý den.
    99      * @return včerejšek
   100      */
   101     public static Date getVychoziDen() {
   102         return new Date(System.currentTimeMillis() - DEN);
   103     }
   104 }