aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/io/trygvis/esper/testing/core
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/io/trygvis/esper/testing/core')
-rwxr-xr-x[-rw-r--r--]src/main/java/io/trygvis/esper/testing/core/TablePoller.java0
-rwxr-xr-x[-rw-r--r--]src/main/java/io/trygvis/esper/testing/core/badge/UnbreakablePoller.java0
-rwxr-xr-x[-rw-r--r--]src/main/java/io/trygvis/esper/testing/core/db/BuildDao.java9
-rwxr-xr-x[-rw-r--r--]src/main/java/io/trygvis/esper/testing/core/db/FileDao.java14
-rwxr-xr-x[-rw-r--r--]src/main/java/io/trygvis/esper/testing/core/db/PersonDao.java49
-rwxr-xr-x[-rw-r--r--]src/main/java/io/trygvis/esper/testing/core/db/PersonDto.java4
-rwxr-xr-x[-rw-r--r--]src/main/java/io/trygvis/esper/testing/core/jenkins/JenkinsBuildPoller.java52
7 files changed, 116 insertions, 12 deletions
diff --git a/src/main/java/io/trygvis/esper/testing/core/TablePoller.java b/src/main/java/io/trygvis/esper/testing/core/TablePoller.java
index 612a087..612a087 100644..100755
--- a/src/main/java/io/trygvis/esper/testing/core/TablePoller.java
+++ b/src/main/java/io/trygvis/esper/testing/core/TablePoller.java
diff --git a/src/main/java/io/trygvis/esper/testing/core/badge/UnbreakablePoller.java b/src/main/java/io/trygvis/esper/testing/core/badge/UnbreakablePoller.java
index 3183304..3183304 100644..100755
--- a/src/main/java/io/trygvis/esper/testing/core/badge/UnbreakablePoller.java
+++ b/src/main/java/io/trygvis/esper/testing/core/badge/UnbreakablePoller.java
diff --git a/src/main/java/io/trygvis/esper/testing/core/db/BuildDao.java b/src/main/java/io/trygvis/esper/testing/core/db/BuildDao.java
index 416faf6..c7923d0 100644..100755
--- a/src/main/java/io/trygvis/esper/testing/core/db/BuildDao.java
+++ b/src/main/java/io/trygvis/esper/testing/core/db/BuildDao.java
@@ -81,6 +81,15 @@ public class BuildDao {
}
}
+ public SqlOption<UUID> findBuildByReference(EntityRef ref) throws SQLException {
+ try (PreparedStatement s = c.prepareStatement("SELECT uuid FROM build WHERE reference_type=? AND reference_uuid=?")) {
+ int i = 1;
+ s.setString(i++, ref.type);
+ s.setString(i, ref.uuid.toString());
+ return fromRs(s.executeQuery()).map(getUuid);
+ }
+ }
+
public List<BuildDto> selectBuildsByPerson(UUID person, PageRequest page) throws SQLException {
try (PreparedStatement s = c.prepareStatement("SELECT " + BUILD + " FROM build b, build_participant bp WHERE bp.person=? AND b.uuid = bp.build ORDER BY created_date LIMIT ? OFFSET ?")) {
int i = 1;
diff --git a/src/main/java/io/trygvis/esper/testing/core/db/FileDao.java b/src/main/java/io/trygvis/esper/testing/core/db/FileDao.java
index c418970..affe1c8 100644..100755
--- a/src/main/java/io/trygvis/esper/testing/core/db/FileDao.java
+++ b/src/main/java/io/trygvis/esper/testing/core/db/FileDao.java
@@ -1,10 +1,13 @@
package io.trygvis.esper.testing.core.db;
+import io.trygvis.esper.testing.util.sql.*;
+
import java.io.*;
import java.net.*;
import java.sql.*;
import java.util.*;
+import static io.trygvis.esper.testing.util.sql.SqlOption.*;
import static java.lang.System.*;
public class FileDao {
@@ -27,4 +30,15 @@ public class FileDao {
return uuid;
}
}
+
+ public SqlOption<InputStream> load(UUID uuid) throws SQLException {
+ try (PreparedStatement s = c.prepareStatement("SELECT data FROM file WHERE uuid=?")) {
+ s.setString(1, uuid.toString());
+ ResultSet rs = s.executeQuery();
+ if(!rs.next()) {
+ return none();
+ }
+ return some(rs.getBinaryStream(1));
+ }
+ }
}
diff --git a/src/main/java/io/trygvis/esper/testing/core/db/PersonDao.java b/src/main/java/io/trygvis/esper/testing/core/db/PersonDao.java
index 62c4f2b..96569dd 100644..100755
--- a/src/main/java/io/trygvis/esper/testing/core/db/PersonDao.java
+++ b/src/main/java/io/trygvis/esper/testing/core/db/PersonDao.java
@@ -14,7 +14,7 @@ import static java.lang.System.*;
public class PersonDao {
private final Connection c;
- public static final String PERSON = "uuid, created_date, name";
+ public static final String PERSON = "uuid, created_date, name, mail";
public static final SqlF<ResultSet, PersonDto> person = new SqlF<ResultSet, PersonDto>() {
public PersonDto apply(ResultSet rs) throws SQLException {
@@ -22,6 +22,7 @@ public class PersonDao {
return new PersonDto(
UUID.fromString(rs.getString(i++)),
new DateTime(rs.getTimestamp(i++).getTime()),
+ rs.getString(i++),
rs.getString(i));
}
};
@@ -63,6 +64,19 @@ public class PersonDao {
// Person
// -----------------------------------------------------------------------
+ public UUID insertPerson(String mail, String name) throws SQLException {
+ try (PreparedStatement s = c.prepareStatement("INSERT INTO person(" + PERSON + ") VALUES(?, ?, ?, ?)")) {
+ UUID uuid = UUID.randomUUID();
+ int i = 1;
+ s.setString(i++, uuid.toString());
+ s.setTimestamp(i++, new Timestamp(currentTimeMillis()));
+ s.setString(i++, name);
+ s.setString(i, mail);
+ s.executeUpdate();
+ return uuid;
+ }
+ }
+
public SqlOption<PersonDto> selectPerson(UUID uuid) throws SQLException {
try (PreparedStatement s = c.prepareStatement("SELECT " + PERSON + " FROM person WHERE uuid=?")) {
int i = 1;
@@ -71,7 +85,15 @@ public class PersonDao {
}
}
- public List<PersonDto> selectPerson(PageRequest pageRequest) throws SQLException {
+ public SqlOption<PersonDto> selectPersonByMail(String mail) throws SQLException {
+ try (PreparedStatement s = c.prepareStatement("SELECT " + PERSON + " FROM person WHERE mail=?")) {
+ int i = 1;
+ s.setString(i, mail);
+ return fromRs(s.executeQuery()).map(person);
+ }
+ }
+
+ public List<PersonDto> selectPersons(PageRequest pageRequest) throws SQLException {
try (PreparedStatement s = c.prepareStatement("SELECT " + PERSON + " FROM person ORDER BY created_date, name LIMIT ? OFFSET ?")) {
int i = 1;
s.setInt(i++, pageRequest.count.orSome(10));
@@ -95,6 +117,29 @@ public class PersonDao {
}
// -----------------------------------------------------------------------
+ // Person Jenkins User
+ // -----------------------------------------------------------------------
+
+ public void insertPersonJenkinsUser(UUID person, UUID jenkinsUser) throws SQLException {
+ try (PreparedStatement s = c.prepareStatement("INSERT INTO person_jenkins_user(person, jenkins_user) VALUES(?, ?)")) {
+ int i = 1;
+ s.setString(i++, person.toString());
+ s.setString(i, jenkinsUser.toString());
+ s.executeUpdate();
+ }
+ }
+
+ public boolean hasPersonJenkinsUser(UUID person, UUID jenkinsUser) throws SQLException {
+ try (PreparedStatement s = c.prepareStatement("SELECT 1 FROM person_jenkins_user WHERE person=? AND jenkins_user=?")) {
+ int i = 1;
+ s.setString(i++, person.toString());
+ s.setString(i, jenkinsUser.toString());
+ ResultSet rs = s.executeQuery();
+ return rs.next();
+ }
+ }
+
+ // -----------------------------------------------------------------------
// Badge
// -----------------------------------------------------------------------
diff --git a/src/main/java/io/trygvis/esper/testing/core/db/PersonDto.java b/src/main/java/io/trygvis/esper/testing/core/db/PersonDto.java
index c643fc7..6dbea74 100644..100755
--- a/src/main/java/io/trygvis/esper/testing/core/db/PersonDto.java
+++ b/src/main/java/io/trygvis/esper/testing/core/db/PersonDto.java
@@ -7,9 +7,11 @@ import java.util.*;
public class PersonDto extends AbstractEntity {
public final String name;
+ public final String mail;
- public PersonDto(UUID uuid, DateTime createdDate, String name) {
+ public PersonDto(UUID uuid, DateTime createdDate, String name, String mail) {
super(uuid, createdDate);
this.name = name;
+ this.mail = mail;
}
}
diff --git a/src/main/java/io/trygvis/esper/testing/core/jenkins/JenkinsBuildPoller.java b/src/main/java/io/trygvis/esper/testing/core/jenkins/JenkinsBuildPoller.java
index bfcd013..3270db1 100644..100755
--- a/src/main/java/io/trygvis/esper/testing/core/jenkins/JenkinsBuildPoller.java
+++ b/src/main/java/io/trygvis/esper/testing/core/jenkins/JenkinsBuildPoller.java
@@ -1,22 +1,28 @@
package io.trygvis.esper.testing.core.jenkins;
import com.jolbox.bonecp.*;
+import fj.data.*;
import io.trygvis.esper.testing.*;
import io.trygvis.esper.testing.core.*;
import io.trygvis.esper.testing.core.db.*;
import io.trygvis.esper.testing.jenkins.*;
+import io.trygvis.esper.testing.jenkins.xml.*;
+import io.trygvis.esper.testing.util.*;
import io.trygvis.esper.testing.util.sql.*;
+import org.joda.time.*;
import org.slf4j.*;
+import java.io.*;
import java.sql.*;
import java.util.*;
import static fj.data.Option.*;
import static io.trygvis.esper.testing.Config.*;
-import static io.trygvis.esper.testing.EntityRef.*;
+import static io.trygvis.esper.testing.EntityRef.jenkinsBuildRef;
public class JenkinsBuildPoller implements TablePoller.NewRowCallback<JenkinsBuildDto> {
- Logger logger = LoggerFactory.getLogger(getClass());
+ private final Logger logger = LoggerFactory.getLogger(getClass());
+ private final XmlParser xmlParser = new XmlParser();
public static void main(String[] args) throws Exception {
String pollerName = "jenkins_build";
@@ -32,17 +38,43 @@ public class JenkinsBuildPoller implements TablePoller.NewRowCallback<JenkinsBui
new TablePoller<>(pollerName, tableName, columnNames, some("array_length(users, 1) > 0"), f, callback).work(dataSource);
}
- public void process(Connection c, JenkinsBuildDto jenkinsBuild) throws SQLException {
+ public void process(Connection c, final JenkinsBuildDto jenkinsBuild) throws SQLException {
Daos daos = new Daos(c);
- BuildDao buildDao = daos.buildDao;
- PersonDao personDao = daos.personDao;
+ final BuildDao buildDao = daos.buildDao;
- UUID uuid = buildDao.insertBuild(jenkinsBuild.timestamp, "SUCCESS".equals(jenkinsBuild.result), jenkinsRef(jenkinsBuild.uuid));
+ SqlOption<InputStream> file = daos.fileDao.load(jenkinsBuild.file);
+
+ if (file.isNone()) {
+ logger.warn("File unavailable: " + jenkinsBuild.file);
+ return;
+ }
+
+ Option<JenkinsBuildXml> o = file.toFj().
+ bind(xmlParser.parseDocument).
+ bind(JenkinsBuildXml.parse);
+
+ if (o.isNone()) {
+ logger.warn("Unable to parse and process xml: " + jenkinsBuild.file);
+ return;
+ }
+
+ final JenkinsBuildXml jenkinsBuildXml = o.some();
+
+ SqlOption<UUID> uuidBuildO = buildDao.findBuildByReference(jenkinsBuild.toRef());
+
+ UUID uuidBuild = uuidBuildO.getOrElse(new SqlP0<UUID>() {
+ public UUID apply() throws SQLException {
+ return buildDao.insertBuild(
+ new DateTime(jenkinsBuildXml.timestamp),
+ "SUCCESS".equals(jenkinsBuildXml.result.orSome("")),
+ jenkinsBuildRef(jenkinsBuild.uuid));
+ }
+ });
int knownPersons = 0, unknownPersons = 0;
for (UUID user : jenkinsBuild.users) {
- SqlOption<PersonDto> personO = personDao.selectPersonByJenkinsUuid(user);
+ SqlOption<PersonDto> personO = daos.personDao.selectPersonByJenkinsUuid(user);
// This happens if no one has claimed the user id.
if (personO.isNone()) {
@@ -54,10 +86,12 @@ public class JenkinsBuildPoller implements TablePoller.NewRowCallback<JenkinsBui
UUID person = personO.get().uuid;
logger.info("Created build participant, person={}", person);
- buildDao.insertBuildParticipant(uuid, person);
+ buildDao.insertBuildParticipant(uuidBuild, person);
}
- logger.info("Created build uuid={}, #participants={}, #knownPersons={}, #unknonwnPersons={}", uuid,
+ logger.info("Created build uuid={}, #participants={}, #knownPersons={}, #unknonwnPersons={}", uuidBuild,
jenkinsBuild.users.length, knownPersons, unknownPersons);
+
+ throw new SQLException("wat");
}
}