diff options
Diffstat (limited to 'src/main/java/io/trygvis/esper/testing/gitorious')
-rwxr-xr-x[-rw-r--r--] | src/main/java/io/trygvis/esper/testing/gitorious/GitoriousAtomFeedParser.java | 4 | ||||
-rwxr-xr-x[-rw-r--r--] | src/main/java/io/trygvis/esper/testing/gitorious/GitoriousClient.java | 58 | ||||
-rwxr-xr-x[-rw-r--r--] | src/main/java/io/trygvis/esper/testing/gitorious/GitoriousImporter.java | 77 |
3 files changed, 74 insertions, 65 deletions
diff --git a/src/main/java/io/trygvis/esper/testing/gitorious/GitoriousAtomFeedParser.java b/src/main/java/io/trygvis/esper/testing/gitorious/GitoriousAtomFeedParser.java index 7e0a1b7..b7b21d6 100644..100755 --- a/src/main/java/io/trygvis/esper/testing/gitorious/GitoriousAtomFeedParser.java +++ b/src/main/java/io/trygvis/esper/testing/gitorious/GitoriousAtomFeedParser.java @@ -2,9 +2,9 @@ package io.trygvis.esper.testing.gitorious; import fj.data.*; import org.apache.abdera.*; -import org.apache.abdera.model.*; import org.apache.abdera.model.Document; import org.apache.abdera.model.Element; +import org.apache.abdera.model.*; import org.apache.abdera.parser.*; import org.dom4j.*; import org.dom4j.io.*; @@ -82,7 +82,7 @@ public class GitoriousAtomFeedParser { switch (event) { case "created repository": case "created branch": - // This is similar "pushed", but doesn't contain any info on commit IDs or branches + // This is similar "pushed", but doesn't contain any info on commit IDs or branches case "started development of": return null; case "pushed": diff --git a/src/main/java/io/trygvis/esper/testing/gitorious/GitoriousClient.java b/src/main/java/io/trygvis/esper/testing/gitorious/GitoriousClient.java index 892d8d0..f44635f 100644..100755 --- a/src/main/java/io/trygvis/esper/testing/gitorious/GitoriousClient.java +++ b/src/main/java/io/trygvis/esper/testing/gitorious/GitoriousClient.java @@ -1,9 +1,13 @@ package io.trygvis.esper.testing.gitorious; import static java.lang.System.*; + +import fj.data.Option; +import org.apache.abdera.parser.ParseException; import org.apache.commons.io.*; import static org.apache.commons.lang.StringUtils.*; import static org.codehaus.httpcache4j.HTTPMethod.*; + import org.codehaus.httpcache4j.*; import org.codehaus.httpcache4j.cache.*; import org.dom4j.*; @@ -12,16 +16,18 @@ import org.dom4j.io.*; import javax.xml.stream.*; import java.io.*; import java.net.*; +import java.sql.SQLException; import java.util.*; public class GitoriousClient { public static final STAXEventReader xmlReader = new STAXEventReader(); - private final HTTPCache httpCache; public final String baseUrl; + private final HTTPCache http; private final String projectsUri; + private final GitoriousAtomFeedParser parser = new GitoriousAtomFeedParser(); - public GitoriousClient(HTTPCache httpCache, String baseUrl) throws URISyntaxException { - this.httpCache = httpCache; + public GitoriousClient(HTTPCache http, String baseUrl) throws URISyntaxException { + this.http = http; this.baseUrl = new URI(baseUrl).toASCIIString(); this.projectsUri = baseUrl + "/projects.xml"; } @@ -31,13 +37,23 @@ public class GitoriousClient { int page = 1; Set<GitoriousProjectXml> all = new HashSet<>(); - while (page <= 10) { - System.out.println("Fetching projects XML, page=" + page); + while (true) { + System.out.println("Fetching projects, page=" + page); long start = currentTimeMillis(); - HTTPRequest request = new HTTPRequest(new URI(projectsUri + "?page=" + page), GET); - HTTPResponse response = httpCache.execute(request); + HTTPResponse response = http.execute(new HTTPRequest(new URI(projectsUri + "?page=" + page), GET)); long end = currentTimeMillis(); - System.out.println("Fetched XML in " + (end - start) + "ms."); + System.out.println("Fetched in " + (end - start) + "ms."); + + if (!response.getStatus().equals(Status.OK)) { + System.out.println("Got non-200 status from server: " + response.getStatus()); + break; + } + + MIMEType mimeType = MIMEType.valueOf(trimToEmpty(response.getHeaders().getFirstHeaderValue("Content-Type"))); + if (!mimeType.getPrimaryType().equals("application") || !mimeType.getSubType().equals("xml")) { + System.out.println("Unexpected mime type, probably at the end of the list: " + mimeType); + break; + } byte[] bytes = IOUtils.toByteArray(response.getPayload().getInputStream()); try { @@ -66,6 +82,22 @@ public class GitoriousClient { public URI atomFeed(String projectSlug, String repositoryName) { return URI.create(baseUrl + "/" + projectSlug + "/" + repositoryName + ".atom"); } + + public Iterable<GitoriousEvent> fetchGitoriousEvents(GitoriousRepository repository, Option<Date> lastUpdate) throws SQLException, ParseException { + System.out.println("Fetching " + repository.atomFeed); + + long start = currentTimeMillis(); + HTTPResponse response = http.execute(new HTTPRequest(repository.atomFeed, HTTPMethod.GET)); + long end = currentTimeMillis(); + System.out.println("Fetched in " + (end - start) + "ms"); + + // Use the server's timestamp + Date responseDate = response.getDate().toDate(); + + System.out.println("responseDate = " + responseDate); + + return parser.parseStream(response.getPayload().getInputStream(), lastUpdate, repository.projectSlug, repository.name); + } } class GitoriousProjectXml implements Comparable<GitoriousProjectXml> { @@ -138,10 +170,7 @@ class GitoriousProjectXml implements Comparable<GitoriousProjectXml> { GitoriousProjectXml that = (GitoriousProjectXml) o; - if (!repositories.equals(that.repositories)) return false; - if (!slug.equals(that.slug)) return false; - - return true; + return repositories.equals(that.repositories) && slug.equals(that.slug); } public int hashCode() { @@ -186,10 +215,7 @@ class GitoriousRepositoryXml implements Comparable<GitoriousRepositoryXml> { GitoriousRepositoryXml that = (GitoriousRepositoryXml) o; - if (!name.equals(that.name)) return false; - if (!projectSlug.equals(that.projectSlug)) return false; - - return true; + return name.equals(that.name) && projectSlug.equals(that.projectSlug); } public int hashCode() { diff --git a/src/main/java/io/trygvis/esper/testing/gitorious/GitoriousImporter.java b/src/main/java/io/trygvis/esper/testing/gitorious/GitoriousImporter.java index b4bc683..1e7a7fd 100644..100755 --- a/src/main/java/io/trygvis/esper/testing/gitorious/GitoriousImporter.java +++ b/src/main/java/io/trygvis/esper/testing/gitorious/GitoriousImporter.java @@ -6,9 +6,7 @@ import static fj.data.Option.*; import io.trygvis.esper.testing.*; import static java.lang.System.*; import org.apache.abdera.parser.*; -import org.codehaus.httpcache4j.*; -import org.codehaus.httpcache4j.cache.*; -import org.codehaus.httpcache4j.resolver.*; +import org.apache.commons.httpclient.protocol.*; import java.io.*; import java.net.*; @@ -20,37 +18,34 @@ import java.util.Set; import java.util.concurrent.*; public class GitoriousImporter { - private final GitoriousAtomFeedParser parser; private final BoneCP boneCp; private final GitoriousClient gitoriousClient; - private final HTTPCache httpCache; public static void main(String[] args) throws Exception { - Main.configureLog4j(); - new GitoriousImporter(DbMain.JDBC_URL, "esper", ""); + Config config = Config.loadFromDisk(); + new GitoriousImporter(config, DbMain.JDBC_URL, "esper", "esper"); } - public GitoriousImporter(String jdbcUrl, String jdbcUsername, String jdbcPassword) throws Exception { - parser = new GitoriousAtomFeedParser(); + public GitoriousImporter(Config config, final String jdbcUrl, final String jdbcUsername, final String jdbcPassword) throws Exception { + BoneCPConfig boneCPConfig = new BoneCPConfig(){{ + setJdbcUrl(jdbcUrl); + setUsername(jdbcUsername); + setPassword(jdbcPassword); + setDefaultAutoCommit(false); + setMaxConnectionsPerPartition(10); + }}; - BoneCPConfig config = new BoneCPConfig(); - config.setJdbcUrl(jdbcUrl); - config.setUsername(jdbcUsername); - config.setPassword(jdbcPassword); - config.setDefaultAutoCommit(false); - config.setMaxConnectionsPerPartition(10); + boneCp = new BoneCP(boneCPConfig); - boneCp = new BoneCP(config); - - httpCache = new HTTPCache(new MemoryCacheStorage(), HTTPClientResponseResolver.createMultithreadedInstance()); - - gitoriousClient = new GitoriousClient(httpCache, "http://gitorious.org"); + gitoriousClient = new GitoriousClient(HttpClient.createHttpClient(config), config.gitoriousUrl); final ScheduledThreadPoolExecutor service = new ScheduledThreadPoolExecutor(2); - boolean projectsUpdateEnabled = false; + boolean projectsUpdateEnabled = true; int projectsUpdateDelay = 0 * 1000; int projectsUpdateInterval = 60 * 1000; + + boolean repositoriesUpdateEnabled = false; int repositoriesUpdateDelay = 0; int repositoriesUpdateInterval = 60 * 1000; @@ -66,15 +61,17 @@ public class GitoriousImporter { }, projectsUpdateDelay, projectsUpdateInterval, TimeUnit.MILLISECONDS); } - service.scheduleAtFixedRate(new Runnable() { - public void run() { - try { - updateRepositories(); - } catch (Exception e) { - e.printStackTrace(System.out); + if (repositoriesUpdateEnabled) { + service.scheduleAtFixedRate(new Runnable() { + public void run() { + try { + updateRepositories(); + } catch (Exception e) { + e.printStackTrace(System.out); + } } - } - }, repositoriesUpdateDelay, repositoriesUpdateInterval, TimeUnit.MILLISECONDS); + }, repositoriesUpdateDelay, repositoriesUpdateInterval, TimeUnit.MILLISECONDS); + } } private void discoverProjects() throws Exception { @@ -105,8 +102,7 @@ public class GitoriousImporter { for (GitoriousRepository repository : repoDao.selectForProject(project.slug)) { boolean found = false; - for (Iterator<GitoriousRepositoryXml> it = project.repositories.iterator(); it.hasNext(); ) { - GitoriousRepositoryXml repo = it.next(); + for (GitoriousRepositoryXml repo : project.repositories) { if (repo.projectSlug.equals(repository.projectSlug) && repo.name.equals(repository.name)) { found = true; break; @@ -125,8 +121,7 @@ public class GitoriousImporter { for (String project : projectDao.selectSlugs()) { boolean found = false; - for (Iterator<GitoriousProjectXml> it = projects.iterator(); it.hasNext(); ) { - GitoriousProjectXml p = it.next(); + for (GitoriousProjectXml p : projects) { if (p.slug.equals(project)) { found = true; break; @@ -165,21 +160,9 @@ public class GitoriousImporter { Option<Date> lastUpdate = repository.lastSuccessfulUpdate; - System.out.println("Fetching " + repository.atomFeed); - - long start = currentTimeMillis(); - HTTPResponse response = httpCache.execute(new HTTPRequest(repository.atomFeed, HTTPMethod.GET)); - long end = currentTimeMillis(); - System.out.println("Fetched in " + (end - start) + "ms"); - - // Use the server's timestamp - Date responseDate = response.getDate().toDate(); - - System.out.println("responseDate = " + responseDate); - - List<GitoriousEvent> events; + Iterable<GitoriousEvent> events; try { - events = parser.parseStream(response.getPayload().getInputStream(), lastUpdate, repository.projectSlug, repository.name); + events = gitoriousClient.fetchGitoriousEvents(repository, lastUpdate); } catch (ParseException e) { repositoryDao.updateTimestamp(repository.projectSlug, repository.name, new Timestamp(currentTimeMillis()), Option.<Date>none()); System.out.println("Error parsing " + repository.atomFeed); |