diff options
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.java | 0 | ||||
-rwxr-xr-x[-rw-r--r--] | src/main/java/io/trygvis/esper/testing/core/badge/UnbreakablePoller.java | 0 | ||||
-rwxr-xr-x[-rw-r--r--] | src/main/java/io/trygvis/esper/testing/core/db/BuildDao.java | 9 | ||||
-rwxr-xr-x[-rw-r--r--] | src/main/java/io/trygvis/esper/testing/core/db/FileDao.java | 14 | ||||
-rwxr-xr-x[-rw-r--r--] | src/main/java/io/trygvis/esper/testing/core/db/PersonDao.java | 49 | ||||
-rwxr-xr-x[-rw-r--r--] | src/main/java/io/trygvis/esper/testing/core/db/PersonDto.java | 4 | ||||
-rwxr-xr-x[-rw-r--r--] | src/main/java/io/trygvis/esper/testing/core/jenkins/JenkinsBuildPoller.java | 52 |
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"); } } |