aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsServer.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/io/trygvis/esper/testing/jenkins/JenkinsServer.java')
-rw-r--r--src/main/java/io/trygvis/esper/testing/jenkins/JenkinsServer.java100
1 files changed, 100 insertions, 0 deletions
diff --git a/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsServer.java b/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsServer.java
new file mode 100644
index 0000000..707a69a
--- /dev/null
+++ b/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsServer.java
@@ -0,0 +1,100 @@
+package io.trygvis.esper.testing.jenkins;
+
+import fj.*;
+import fj.data.*;
+import static fj.data.Option.*;
+import io.trygvis.esper.testing.object.*;
+import org.codehaus.httpcache4j.util.*;
+import org.joda.time.*;
+
+import java.io.*;
+import java.net.*;
+import java.util.*;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.concurrent.*;
+
+public class JenkinsServer implements Closeable {
+
+ private final JenkinsClient client;
+ public final URI uri;
+ private final ObjectManager<URI, JenkinsJob> jobManager;
+
+ private boolean shouldRun = true;
+ private final Thread thread;
+
+ private Option<P2<JenkinsXml, LocalDateTime>> jenkins = none();
+
+ public JenkinsServer(final ScheduledExecutorService executorService, final JenkinsClient client, URI uri) {
+ this.client = client;
+ this.uri = URIBuilder.fromURI(uri).addRawPath("api/xml").toURI();
+
+ jobManager = new ObjectManager<>("JenkinsJob", Collections.<URI>emptySet(), new ObjectFactory<URI, JenkinsJob>() {
+ public JenkinsJob create(URI uri) {
+ return new JenkinsJob(executorService, client, uri);
+ }
+ });
+
+ thread = new Thread(new Runnable() {
+ public void run() {
+ JenkinsServer.this.run();
+ }
+ });
+ thread.setDaemon(true);
+ thread.start();
+ }
+
+ public void close() throws IOException {
+ shouldRun = false;
+ thread.interrupt();
+ while (thread.isAlive()) {
+ try {
+ thread.join();
+ } catch (InterruptedException e) {
+ continue;
+ }
+ }
+ }
+
+ private void run() {
+ while (shouldRun) {
+ try {
+ doWork();
+ } catch (Exception e) {
+ e.printStackTrace(System.out);
+ }
+
+ try {
+ Thread.sleep(10 * 1000);
+ } catch (InterruptedException e) {
+ // ignore
+ }
+ }
+ }
+
+ public Option<P2<JenkinsXml, LocalDateTime>> getJenkins() {
+ return jenkins;
+ }
+
+ public Collection<JenkinsJob> getJobs() {
+ return jobManager.getObjects();
+ }
+
+ private void doWork() {
+ try {
+ JenkinsXml xml = client.fetchJobs(uri);
+
+ List<URI> jobUris = new ArrayList<>(xml.jobs.size());
+ for (JenkinsJobEntryXml job : xml.jobs) {
+ jobUris.add(URI.create(job.url));
+ }
+
+ this.jenkins = some(P.p(xml, new LocalDateTime()));
+
+ jobManager.update(new HashSet<>(jobUris.subList(0, 10)));
+ } catch (Throwable e) {
+ e.printStackTrace(System.out);
+ }
+ }
+}