]> WPIA git - gigi.git/blobdiff - src/org/cacert/gigi/ping/PingerDaemon.java
ADD: A step towards a more friendly SQL API.
[gigi.git] / src / org / cacert / gigi / ping / PingerDaemon.java
index 91ddfbb0b5a2188a8da3910c03971330b2abcf87..2a3167438851969d613ea8575ebd4d5ae0850c72 100644 (file)
@@ -1,22 +1,24 @@
 package org.cacert.gigi.ping;
 
 import java.security.KeyStore;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
 import java.util.HashMap;
-import org.cacert.gigi.Domain;
-import org.cacert.gigi.User;
+
 import org.cacert.gigi.database.DatabaseConnection;
+import org.cacert.gigi.database.GigiPreparedStatement;
+import org.cacert.gigi.database.GigiResultSet;
+import org.cacert.gigi.dbObjects.Domain;
+import org.cacert.gigi.dbObjects.User;
 import org.cacert.gigi.util.RandomToken;
 
 public class PingerDaemon extends Thread {
 
     HashMap<String, DomainPinger> pingers = new HashMap<>();
 
-    private PreparedStatement searchNeededPings;
+    private GigiPreparedStatement searchNeededPings;
+
+    private GigiPreparedStatement enterPingResult;
 
-    private PreparedStatement enterPingResult;
+    private GigiPreparedStatement updatePingStatus;
 
     private KeyStore truststore;
 
@@ -26,22 +28,16 @@ public class PingerDaemon extends Thread {
 
     @Override
     public void run() {
-        try {
-            searchNeededPings = DatabaseConnection.getInstance().prepare("SELECT pingconfig.*, domains.domain, domains.memid FROM pingconfig LEFT JOIN domainPinglog ON domainPinglog.configId=pingconfig.id INNER JOIN domains ON domains.id=pingconfig.domainid WHERE domainPinglog.configId IS NULL ");
-            enterPingResult = DatabaseConnection.getInstance().prepare("INSERT INTO domainPinglog SET configId=?, state=?, result=?, challenge=?");
-            pingers.put("email", new EmailPinger());
-            pingers.put("ssl", new SSLPinger(truststore));
-            pingers.put("http", new HTTPFetch());
-            pingers.put("dns", new DNSPinger());
-        } catch (SQLException e) {
-            e.printStackTrace();
-        }
+        searchNeededPings = DatabaseConnection.getInstance().prepare("SELECT pingconfig.*, domains.domain, domains.memid FROM pingconfig LEFT JOIN domainPinglog ON domainPinglog.configId=pingconfig.id INNER JOIN domains ON domains.id=pingconfig.domainid WHERE ( pingconfig.reping='y' OR domainPinglog.configId IS NULL) AND domains.deleted IS NULL GROUP BY pingconfig.id");
+        enterPingResult = DatabaseConnection.getInstance().prepare("INSERT INTO domainPinglog SET configId=?, state=?, result=?, challenge=?");
+        updatePingStatus = DatabaseConnection.getInstance().prepare("UPDATE pingconfig SET reping='n' WHERE id=?");
+        pingers.put("email", new EmailPinger());
+        pingers.put("ssl", new SSLPinger(truststore));
+        pingers.put("http", new HTTPFetch());
+        pingers.put("dns", new DNSPinger());
+
         while (true) {
-            try {
-                execute();
-            } catch (SQLException e) {
-                e.printStackTrace();
-            }
+            execute();
             try {
                 Thread.sleep(5000);
             } catch (InterruptedException e) {
@@ -49,9 +45,9 @@ public class PingerDaemon extends Thread {
         }
     }
 
-    private void execute() throws SQLException {
+    private void execute() {
 
-        ResultSet rs = searchNeededPings.executeQuery();
+        GigiResultSet rs = searchNeededPings.executeQuery();
         while (rs.next()) {
             String type = rs.getString("type");
             String config = rs.getString("info");
@@ -62,6 +58,8 @@ public class PingerDaemon extends Thread {
                     token = RandomToken.generateToken(16);
                     config = config + ":" + token;
                 }
+                updatePingStatus.setInt(1, rs.getInt("id"));
+                updatePingStatus.execute();
                 enterPingResult.setInt(1, rs.getInt("id"));
                 String resp = dp.ping(Domain.getById(rs.getInt("domainid")), config, User.getById(rs.getInt("memid")));
                 enterPingResult.setString(2, DomainPinger.PING_STILL_PENDING == resp ? "open" : DomainPinger.PING_SUCCEDED.equals(resp) ? "success" : "failed");
@@ -71,4 +69,5 @@ public class PingerDaemon extends Thread {
             }
         }
     }
+
 }