java/HrisniciSpameri/src/java/cz/frantovo/hrisniciSpameri/dao/SouhrnDAO.java
author František Kučera <franta-hg@frantovo.cz>
Sun Mar 01 13:04:10 2009 +0100 (2009-03-01)
changeset 40 fd29fd5a8e29
parent 30 0ffc8c1b2b9c
child 49 491d1055972e
permissions -rw-r--r--
Graf zobrazuje skutečná data – Počty útoků za den
     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.Soucet;
     6 import cz.frantovo.hrisniciSpameri.dto.Souhrn;
     7 import java.sql.Connection;
     8 import java.sql.Date;
     9 import java.sql.PreparedStatement;
    10 import java.sql.ResultSet;
    11 import java.util.ArrayList;
    12 import java.util.Collection;
    13 import java.util.HashMap;
    14 import java.util.logging.Level;
    15 
    16 /**
    17  *
    18  * @author fiki
    19  */
    20 public class SouhrnDAO extends HrisniciSuperDAO {
    21 
    22     private enum SQL {
    23 
    24         DENNI_SOUHRN,
    25         DENNI_SOUHRN_CIL,
    26         DENNI_SOUCTY,
    27         DENNI_SOUCTY_CIL
    28     }
    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                     konec = zacatek;
    49                 }
    50 
    51                 if (cil == 0) {
    52                     ps = db.prepareStatement(getSQL(SQL.DENNI_SOUHRN));
    53                     ps.setDate(1, zacatek);
    54                     ps.setDate(2, konec);
    55                 } else {
    56                     ps = db.prepareStatement(getSQL(SQL.DENNI_SOUHRN_CIL));
    57                     ps.setDate(1, zacatek);
    58                     ps.setDate(2, konec);
    59                     ps.setInt(3, cil);
    60                 }
    61                 rs = ps.executeQuery();
    62                 while (rs.next()) {
    63                     Souhrn s = new Souhrn();
    64                     s.setAdresa(new SitovaAdresa(rs.getString("ip"), rs.getString("domena")));
    65                     s.setDen(rs.getDate("den"));
    66                     s.setPocet(rs.getInt("pocet"));
    67 
    68                     Cil c = new Cil();
    69                     c.setId(rs.getInt("id"));
    70                     c.setNazev(rs.getString("nazev"));
    71                     c.setUrl(rs.getString("url"));
    72                     c.setSelekt(rs.getString("selekt"));
    73                     c.setDatabaze(rs.getString("databaze"));
    74                     s.setCil(c);
    75 
    76                     souhrn.add(s);
    77                 }
    78             } catch (Exception e) {
    79                 log.log(Level.SEVERE, "Chyba při získávání souhrnu z databáze", e);
    80             } finally {
    81                 zavri(db, ps, rs);
    82             }
    83         }
    84 
    85         return souhrn;
    86     }
    87 
    88     /**
    89      * @param zacatek začátek období nebo konkrétní den
    90      * @param konec konec období nebo null (pokud nás zajímá konkrétní den – což nás tady většinou nezajímá)
    91      * @param cil id cíle nebo nula, pokud chceme všechny cíle
    92      * @return součty útoků za jednotlivé dny, seskupené podle cílů
    93      */
    94     public HashMap<Cil, Collection<Soucet>> getSoucty(Date zacatek, Date konec, int cil) {
    95         HashMap<Cil, Collection<Soucet>> soucty = new HashMap<Cil, Collection<Soucet>>();
    96 
    97         Connection db = getSpojeni(null);
    98         if (db == null) {
    99             return null;
   100         } else {
   101             PreparedStatement ps = null;
   102             ResultSet rs = null;
   103             try {
   104                 if (konec == null) {
   105                     konec = zacatek;
   106                 }
   107 
   108                 if (cil == 0) {
   109                     ps = db.prepareStatement(getSQL(SQL.DENNI_SOUCTY));
   110                     ps.setDate(1, zacatek);
   111                     ps.setDate(2, konec);
   112                 } else {
   113                     ps = db.prepareStatement(getSQL(SQL.DENNI_SOUCTY_CIL));
   114                     ps.setDate(1, zacatek);
   115                     ps.setDate(2, konec);
   116                     ps.setInt(3, cil);
   117                 }
   118                 rs = ps.executeQuery();
   119                 while (rs.next()) {
   120                     Soucet s = new Soucet();
   121                     s.setDen(rs.getDate("den"));
   122                     s.setPocet(rs.getInt("pocet"));
   123 
   124                     Cil c = new Cil();
   125                     c.setId(rs.getInt("id"));
   126                     c.setNazev(rs.getString("nazev"));
   127                     c.setUrl(rs.getString("url"));
   128                     c.setSelekt(rs.getString("selekt"));
   129                     c.setDatabaze(rs.getString("databaze"));
   130                     s.setCil(c);
   131 
   132                     if (soucty.get(c) == null) {
   133                         soucty.put(c, new ArrayList<Soucet>());
   134                     }
   135 
   136                     soucty.get(c).add(s);
   137                 }
   138             } catch (Exception e) {
   139                 log.log(Level.SEVERE, "Chyba při získávání součtů z databáze", e);
   140             } finally {
   141                 zavri(db, ps, rs);
   142             }
   143         }
   144         return soucty;
   145     }
   146 }