From 498fd62e043e31bf5beddfff0e9b5f7f889b884c Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Tue, 22 Jan 2013 22:29:13 +0100 Subject: JenkinsServerActor: o Adding a check to see if we're missing builds based on the previous build number. --- .../esper/testing/jenkins/JenkinsJobDto.java | 4 ++ .../esper/testing/jenkins/JenkinsServerActor.java | 50 +++++++++++++++++++--- .../esper/testing/util/sql/PageRequest.java | 9 +++- 3 files changed, 56 insertions(+), 7 deletions(-) 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 2092d89..af3f9ed 100755 --- a/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsJobDto.java +++ b/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsJobDto.java @@ -22,4 +22,8 @@ public class JenkinsJobDto extends AbstractEntity { this.jobType = jobType; this.displayName = displayName; } + + public String displayName() { + return displayName.orSome(""); + } } 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 66fd5ff..f573b23 100755 --- a/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsServerActor.java +++ b/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsServerActor.java @@ -4,6 +4,7 @@ import fj.*; import fj.data.*; import io.trygvis.esper.testing.core.db.*; import io.trygvis.esper.testing.jenkins.xml.*; +import io.trygvis.esper.testing.util.*; import io.trygvis.esper.testing.util.object.*; import io.trygvis.esper.testing.util.sql.*; import org.slf4j.*; @@ -21,6 +22,7 @@ import static java.lang.System.*; public class JenkinsServerActor implements TransactionalActor { private static final Logger logger = LoggerFactory.getLogger(JenkinsServerActor.class); + private static final XmlParser xmlParser = new XmlParser(); private final JenkinsClient client; public final JenkinsServerDto server; @@ -121,10 +123,12 @@ public class JenkinsServerActor implements TransactionalActor { SqlOption jobDtoOption = dao.selectJobByUrl(jobUrl); - UUID job; + JenkinsJobDto job; if (jobDtoOption.isSome()) { - job = jobDtoOption.get().uuid; + job = jobDtoOption.get(); + + logger.info("New build for job '{}'/{}", job.displayName(), job.uuid); } else { logger.info("New job: {}, fetching info", jobUrl); @@ -140,21 +144,25 @@ public class JenkinsServerActor implements TransactionalActor { JenkinsJobXml xml = jobXmlOption.some()._1(); - job = dao.insertJob(server.uuid, jobXmlFile, xml.url, xml.type, xml.displayName); + UUID uuid = dao.insertJob(server.uuid, jobXmlFile, xml.url, xml.type, xml.displayName); + + job = dao.selectJob(uuid).get(); - logger.info("New job: {}, uuid={}", xml.displayName.orSome(xml.url.toASCIIString()), job); + logger.info("New job: '{}'/{}", xml.displayName.orSome(xml.url.toASCIIString()), uuid); } i++; + checkForMissingBuilds(dao, fileDao, build, job); + UUID uuid = dao.insertBuild( - job, + job.uuid, buildXmlFile, entry.id, build.url, users.toArray(new UUID[users.size()])); - logger.info("Build inserted: {}, #users={} item #{}/{}", uuid, users.size(), i, list.size()); + logger.info("Build inserted: {}, name={}, number={}, #users={} item #{}/{}", uuid, job.displayName(), build.number, users.size(), i, list.size()); } long end = currentTimeMillis(); @@ -162,6 +170,36 @@ public class JenkinsServerActor implements TransactionalActor { logger.info("Inserted " + i + " of " + list.size() + " builds in " + (end - start) + "ms."); } + private void checkForMissingBuilds(JenkinsDao dao, FileDao fileDao, JenkinsBuildXml build, JenkinsJobDto job) throws SQLException { + if (build.number <= 1) { + return; + } + + List builds = dao.selectBuildByJob(job.uuid, PageRequest.one()); + + if (builds.isEmpty()) { + return; + } + + JenkinsBuildDto previousJob = builds.get(0); + + Option previousXmlO = fileDao.load(previousJob.file).toFj(). + bind(xmlParser.parseDocument). + bind(JenkinsBuildXml.parse); + + if (previousXmlO.isNone()) { + logger.warn("Unable to load/parse XML file from previous build, file={}", previousJob.file); + return; + } + + JenkinsBuildXml previousBuildXml = previousXmlO.some(); + + if (build.number != previousBuildXml.number + 1) { + logger.warn("MISSED BUILD. The build number for job={} ({}) was {}, but the previous build was {}", + job.displayName(), job.uuid, build.number, previousBuildXml.number); + } + } + /** * This sucks, a build should really include the URL to the job. */ diff --git a/src/main/java/io/trygvis/esper/testing/util/sql/PageRequest.java b/src/main/java/io/trygvis/esper/testing/util/sql/PageRequest.java index 7773e50..deeedcc 100755 --- a/src/main/java/io/trygvis/esper/testing/util/sql/PageRequest.java +++ b/src/main/java/io/trygvis/esper/testing/util/sql/PageRequest.java @@ -1,8 +1,11 @@ package io.trygvis.esper.testing.util.sql; -import fj.data.Option; +import fj.data.*; import java.util.*; +import java.util.List; + +import static fj.data.Option.*; public class PageRequest { public final Option startIndex; @@ -19,4 +22,8 @@ public class PageRequest { public String toString() { return "PageRequest{startIndex=" + startIndex + ", count=" + count + '}'; } + + public static PageRequest one(String... orderBy) { + return new PageRequest(some(0), some(1), Arrays.asList(orderBy)); + } } -- cgit v1.2.3