From 0cbc9933db10938a1e9c7f330188e40caec9550d Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Thu, 20 Dec 2012 22:45:16 +0100 Subject: o Storing jenkins_users. --- .../esper/testing/jenkins/JenkinsBuildDto.java | 10 ++- .../esper/testing/jenkins/JenkinsBuildXml.java | 41 +++++++++--- .../trygvis/esper/testing/jenkins/JenkinsDao.java | 78 ++++++++++++++++------ .../esper/testing/jenkins/JenkinsJobDto.java | 10 ++- .../esper/testing/jenkins/JenkinsServerActor.java | 29 +++++++- .../esper/testing/jenkins/JenkinsServerDto.java | 25 ++----- .../esper/testing/jenkins/JenkinsUserDto.java | 17 +++++ 7 files changed, 141 insertions(+), 69 deletions(-) create mode 100644 src/main/java/io/trygvis/esper/testing/jenkins/JenkinsUserDto.java (limited to 'src/main/java/io/trygvis/esper/testing/jenkins') diff --git a/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsBuildDto.java b/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsBuildDto.java index 28f597d..8076eaa 100644 --- a/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsBuildDto.java +++ b/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsBuildDto.java @@ -1,13 +1,12 @@ package io.trygvis.esper.testing.jenkins; +import io.trygvis.esper.testing.*; import org.joda.time.*; import java.net.*; import java.util.*; -public class JenkinsBuildDto { - public final UUID uuid; - public final DateTime created_date; +public class JenkinsBuildDto extends AbstractDto { public final UUID job; public final String entryId; public final URI url; @@ -16,9 +15,8 @@ public class JenkinsBuildDto { public final int duration; public final DateTime timestamp; - JenkinsBuildDto(UUID uuid, DateTime created_date, UUID job, String entryId, URI url, String result, int number, int duration, DateTime timestamp) { - this.uuid = uuid; - this.created_date = created_date; + JenkinsBuildDto(UUID uuid, DateTime createdDate, UUID job, String entryId, URI url, String result, int number, int duration, DateTime timestamp) { + super(uuid, createdDate); this.job = job; this.entryId = entryId; this.url = url; diff --git a/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsBuildXml.java b/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsBuildXml.java index 169a65c..cb92736 100644 --- a/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsBuildXml.java +++ b/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsBuildXml.java @@ -17,9 +17,7 @@ import fj.data.Option; import io.trygvis.esper.testing.Util; import static fj.data.List.iterableList; -import static fj.data.Option.none; -import static fj.data.Option.some; -import static fj.data.Option.somes; +import static fj.data.Option.*; import static io.trygvis.esper.testing.Util.childText; import static io.trygvis.esper.testing.Util.parseInt; import static io.trygvis.esper.testing.jenkins.JenkinsBuildXml.ChangeSetItemXml.parseChangeSetItem; @@ -109,16 +107,13 @@ public class JenkinsBuildXml { public final String msg; - /** - * Only subversion has this field - */ - public final Option user; + public final Option author; - public ChangeSetItemXml(String commitId, DateTime date, String msg, Option user) { + public ChangeSetItemXml(String commitId, DateTime date, String msg, Option author) { this.commitId = commitId; this.date = date; this.msg = msg; - this.user = user; + this.author = author; } private static final F> parseDate = new F>() { @@ -145,13 +140,37 @@ public class JenkinsBuildXml { Option commitId = childText(item, "commitId"); Option date = childText(item, "date").bind(parseDate); Option msg = childText(item, "msg"); - Option user = childText(item, "user"); if (commitId.isNone() || date.isNone() || msg.isNone()) { return none(); } - return some(new ChangeSetItemXml(commitId.some(), date.some(), msg.some(), user)); + Option author = fromNull(item.getChild("author")).bind(AuthorXml.parseAuthorXml); + + return some(new ChangeSetItemXml(commitId.some(), date.some(), msg.some(), author)); + } + }; + } + + public static class AuthorXml { + public final String absoluteUrl; + public final String fullName; + + public AuthorXml(String absoluteUrl, String fullName) { + this.absoluteUrl = absoluteUrl; + this.fullName = fullName; + } + + public static final F> parseAuthorXml = new F>() { + public Option f(Element element) { + Option absoluteUrl = childText(element, "absoluteUrl"); + Option fullName = childText(element, "fullName"); + + if(absoluteUrl.isNone() || fullName.isNone()) { + return none(); + } + + return some(new AuthorXml(absoluteUrl.some(), fullName.some())); } }; } diff --git a/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsDao.java b/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsDao.java index bf1954e..2cfff80 100644 --- a/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsDao.java +++ b/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsDao.java @@ -1,6 +1,7 @@ package io.trygvis.esper.testing.jenkins; import fj.data.*; +import io.trygvis.esper.testing.sql.*; import org.joda.time.*; import java.net.*; @@ -9,6 +10,7 @@ import java.util.*; import java.util.List; import static fj.data.Option.*; +import static io.trygvis.esper.testing.sql.SqlOption.fromRs; import static java.lang.System.*; public class JenkinsDao { @@ -21,6 +23,8 @@ public class JenkinsDao { public static final String JENKINS_BUILD = "uuid, created_date, job, entry_id, url, result, number, duration, timestamp"; + public static final String JENKINS_USER = "uuid, created_date, server, absolute_url"; + public JenkinsDao(Connection c) { this.c = c; } @@ -60,22 +64,35 @@ public class JenkinsDao { return list; } - private JenkinsBuildDto jenkinsBuild(ResultSet rs) throws SQLException { - int i = 1; - return new JenkinsBuildDto( - UUID.fromString(rs.getString(i++)), - new DateTime(rs.getTimestamp(i++).getTime()), - UUID.fromString(rs.getString(i++)), - rs.getString(i++), - URI.create(rs.getString(i++)), - rs.getString(i++), - rs.getInt(i++), - rs.getInt(i++), - new DateTime(rs.getTimestamp(i).getTime())); - } + public static final SqlF jenkinsBuild = new SqlF() { + public JenkinsBuildDto apply(ResultSet rs) throws SQLException { + int i = 1; + return new JenkinsBuildDto( + UUID.fromString(rs.getString(i++)), + new DateTime(rs.getTimestamp(i++).getTime()), + UUID.fromString(rs.getString(i++)), + rs.getString(i++), + URI.create(rs.getString(i++)), + rs.getString(i++), + rs.getInt(i++), + rs.getInt(i++), + new DateTime(rs.getTimestamp(i).getTime())); + } + }; + + public static final SqlF jenkinsUser = new SqlF() { + public JenkinsUserDto apply(ResultSet rs) throws SQLException { + int i = 1; + return new JenkinsUserDto( + UUID.fromString(rs.getString(i++)), + new DateTime(rs.getTimestamp(i++).getTime()), + UUID.fromString(rs.getString(i++)), + rs.getString(i)); + } + }; public List selectServers(boolean enabledOnly) throws SQLException { - String sql = "SELECT " + JENKINS_SERVER + " FROM jenkins_server "; + String sql = "SELECT " + JENKINS_SERVER + " FROM jenkins_server"; if (enabledOnly) { sql += " WHERE enabled=true"; @@ -137,17 +154,11 @@ public class JenkinsDao { } } - public Option selectBuildByEntryId(String id) throws SQLException { + public SqlOption selectBuildByEntryId(String id) throws SQLException { try (PreparedStatement s = c.prepareStatement("SELECT " + JENKINS_BUILD + " FROM jenkins_build WHERE entry_id=?")) { int i = 1; s.setString(i, id); - ResultSet rs = s.executeQuery(); - - if (!rs.next()) { - return none(); - } - - return some(jenkinsBuild(rs)); + return fromRs(s.executeQuery()).map(jenkinsBuild); } } @@ -169,4 +180,27 @@ public class JenkinsDao { return uuid; } } + + public UUID insertUser(UUID server, String absoluteUrl) throws SQLException { + try (PreparedStatement s = c.prepareStatement("INSERT INTO jenkins_user(" + JENKINS_USER + ") VALUES(?, ?, ?, ?)")) { + UUID uuid = UUID.randomUUID(); + int i = 1; + s.setString(i++, uuid.toString()); + s.setTimestamp(i++, new Timestamp(currentTimeMillis())); + s.setString(i++, server.toString()); + s.setString(i, absoluteUrl); + s.executeUpdate(); + + return uuid; + } + } + + public SqlOption selectUser(UUID server, String absoluteUrl) throws SQLException { + try (PreparedStatement s = c.prepareStatement("SELECT " + JENKINS_USER + " FROM jenkins_user WHERE server=? AND absolute_url=?")) { + int i = 1; + s.setString(i++, server.toString()); + s.setString(i, absoluteUrl); + return fromRs(s.executeQuery()).map(jenkinsUser); + } + } } diff --git a/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsJobDto.java b/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsJobDto.java index 8ee731c..f4ef401 100644 --- a/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsJobDto.java +++ b/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsJobDto.java @@ -1,21 +1,19 @@ package io.trygvis.esper.testing.jenkins; import fj.data.*; +import io.trygvis.esper.testing.*; import org.joda.time.*; import java.net.*; import java.util.*; -public class JenkinsJobDto { - public final UUID uuid; - public final DateTime created_date; +public class JenkinsJobDto extends AbstractDto { public final UUID server; public final URI url; public final Option displayName; - JenkinsJobDto(UUID uuid, DateTime created_date, UUID server, URI url, Option displayName) { - this.uuid = uuid; - this.created_date = created_date; + JenkinsJobDto(UUID uuid, DateTime createdDate, UUID server, URI url, Option displayName) { + super(uuid, createdDate); this.server = server; this.url = url; this.displayName = displayName; diff --git a/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsServerActor.java b/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsServerActor.java index ebc46ce..ad22157 100644 --- a/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsServerActor.java +++ b/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsServerActor.java @@ -2,12 +2,14 @@ package io.trygvis.esper.testing.jenkins; import fj.data.*; import io.trygvis.esper.testing.object.*; +import io.trygvis.esper.testing.sql.*; import org.slf4j.*; import java.net.*; import java.sql.*; import java.util.List; import java.util.*; +import java.util.Set; import static io.trygvis.esper.testing.jenkins.JenkinsClient.*; import static java.lang.System.*; @@ -38,8 +40,10 @@ public class JenkinsServerActor implements TransactionalActor { int i = 0; + Set authorUrls = new TreeSet<>(); + for (JenkinsEntryXml entry : list) { - Option o = dao.selectBuildByEntryId(entry.id); + SqlOption o = dao.selectBuildByEntryId(entry.id); if (o.isSome()) { logger.debug("Old build: " + entry.id); @@ -62,6 +66,25 @@ public class JenkinsServerActor implements TransactionalActor { } String result = build.result.some(); + if(build.changeSet.isSome()) { + JenkinsBuildXml.ChangeSetXml changeSetXml = build.changeSet.some(); + + for (JenkinsBuildXml.ChangeSetItemXml item : changeSetXml.items) { + if(item.author.isNone()) { + continue; + } + + String url = item.author.some().absoluteUrl; + + boolean newUser = authorUrls.add(url); + + if(newUser && dao.selectUser(server.uuid, url).isNone()) { + logger.info("New user: {}", url); + dao.insertUser(server.uuid, url); + } + } + } + URI jobUrl = extrapolateJobUrlFromBuildUrl(build.url.toASCIIString()); Option jobDtoOption = dao.selectJobByUrl(jobUrl); @@ -71,7 +94,7 @@ public class JenkinsServerActor implements TransactionalActor { if (jobDtoOption.isSome()) { job = jobDtoOption.some().uuid; } else { - logger.info("New job: " + jobUrl + ", fetching info"); + logger.info("New job: {}, fetching info", jobUrl); Option jobXmlOption = client.fetchJob(apiXml(jobUrl)); @@ -83,7 +106,7 @@ public class JenkinsServerActor implements TransactionalActor { job = dao.insertJob(server.uuid, xml.url, xml.type, xml.displayName); - logger.info("New job: " + xml.displayName.orSome(xml.url.toASCIIString()) + ", uuid=" + job); + logger.info("New job: {}, uuid={}", xml.displayName.orSome(xml.url.toASCIIString()), job); } i++; diff --git a/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsServerDto.java b/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsServerDto.java index 225b786..6ad8e36 100644 --- a/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsServerDto.java +++ b/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsServerDto.java @@ -1,35 +1,18 @@ package io.trygvis.esper.testing.jenkins; +import io.trygvis.esper.testing.*; import org.joda.time.*; import java.net.*; import java.util.*; -public class JenkinsServerDto { - public final UUID uuid; - public final DateTime created_date; +public class JenkinsServerDto extends AbstractDto { public final URI url; public final boolean enabled; - JenkinsServerDto(UUID uuid, DateTime created_date, URI url, boolean enabled) { - this.uuid = uuid; - this.created_date = created_date; + JenkinsServerDto(UUID uuid, DateTime createdDate, URI url, boolean enabled) { + super(uuid, createdDate); this.url = url; this.enabled = enabled; } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - JenkinsServerDto that = (JenkinsServerDto) o; - - return uuid.equals(that.uuid); - } - - @Override - public int hashCode() { - return uuid.hashCode(); - } } diff --git a/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsUserDto.java b/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsUserDto.java new file mode 100644 index 0000000..d3ea996 --- /dev/null +++ b/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsUserDto.java @@ -0,0 +1,17 @@ +package io.trygvis.esper.testing.jenkins; + +import io.trygvis.esper.testing.*; +import org.joda.time.*; + +import java.util.*; + +public class JenkinsUserDto extends AbstractDto { + public final UUID server; + public final String absoluteUrl; + + public JenkinsUserDto(UUID uuid, DateTime createdDate, UUID server, String absoluteUrl) { + super(uuid, createdDate); + this.server = server; + this.absoluteUrl = absoluteUrl; + } +} -- cgit v1.2.3