From 34f5ac99c81dfe39f986e8133fb7fff22c0d30bc Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Mon, 10 Dec 2012 14:27:04 +0100 Subject: o Adding Maven module as a build type. --- .../esper/testing/jenkins/JenkinsServerActor.java | 115 +++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100755 src/main/java/io/trygvis/esper/testing/jenkins/JenkinsServerActor.java (limited to 'src/main/java/io/trygvis/esper/testing/jenkins/JenkinsServerActor.java') diff --git a/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsServerActor.java b/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsServerActor.java new file mode 100755 index 0000000..fa30f14 --- /dev/null +++ b/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsServerActor.java @@ -0,0 +1,115 @@ +package io.trygvis.esper.testing.jenkins; + +import fj.data.*; +import io.trygvis.esper.testing.object.*; +import org.slf4j.*; + +import java.net.*; +import java.sql.*; +import java.util.List; +import java.util.*; + +import static io.trygvis.esper.testing.jenkins.JenkinsClient.*; +import static java.lang.System.*; + +public class JenkinsServerActor implements TransactionalActor { + private static final Logger logger = LoggerFactory.getLogger(JenkinsServerActor.class); + private final JenkinsClient client; + public final JenkinsServerDto server; + + public JenkinsServerActor(JenkinsClient client, JenkinsServerDto server) { + this.client = client; + this.server = server; + } + + public void act(Connection c) throws Exception { + long start = currentTimeMillis(); + + JenkinsDao dao = new JenkinsDao(c); + Option> option = client.fetchRss(URI.create(server.url.toASCIIString() + "/rssAll")); + + if (option.isNone()) { + return; + } + + List list = option.some(); + + logger.info("Got " + list.size() + " entries."); + + int i = 0; + + for (JenkinsEntryXml entry : list) { + Option o = dao.selectBuildByEntryId(entry.id); + + if (o.isSome()) { + logger.debug("Old build: " + entry.id); + continue; + } + + logger.info("New build: " + entry.id + ", fetching info"); + + Option buildXmlOption = client.fetchBuild(apiXml(entry.url)); + + if (buildXmlOption.isNone()) { + continue; + } + + JenkinsBuildXml build = buildXmlOption.some(); + + URI jobUrl = createJobUrl(build.url.toASCIIString()); + + Option jobDtoOption = dao.selectJobByUrl(jobUrl); + + UUID job; + + if (jobDtoOption.isSome()) { + job = jobDtoOption.some().uuid; + } else { + logger.info("New job: " + jobUrl + ", fetching info"); + + Option jobXmlOption = client.fetchJob(apiXml(jobUrl)); + + if (jobXmlOption.isNone()) { + continue; + } + + JenkinsJobXml xml = jobXmlOption.some(); + + job = dao.insertJob(server.uuid, xml.url, xml.type, xml.displayName); + + logger.info("New job: " + xml.displayName.orSome(xml.url.toASCIIString()) + ", uuid=" + job); + } + + i++; + + UUID uuid = dao.insertBuild( + job, + entry.id, + build.url, + build.result, + build.number, + build.duration, + build.timestamp); + + logger.info("Build inserted: " + uuid + ", item #" + i + "/" + list.size()); + } + + long end = currentTimeMillis(); + + logger.info("Inserted " + i + " of " + list.size() + " builds in " + (end - start) + "ms."); + } + + /** + * This sucks, a build should really include the URL to the job. + */ + public static URI createJobUrl(String u) { + if (!u.matches(".*/[0-9]*/")) { + throw new RuntimeException("Not a valid build url: " + u); + } + + u = u.substring(0, u.lastIndexOf("/")); + u = u.substring(0, u.lastIndexOf("/") + 1); + + return URI.create(u); + } +} -- cgit v1.2.3