package eu.dnetlib.efg.stress.test; import java.io.IOException; import java.net.URL; import java.net.URLEncoder; import java.util.concurrent.Callable; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.methods.GetMethod; import eu.dnetlib.efg.stress.vocabulary.QueryGenerator; import eu.dnetlib.miscutils.datetime.DateUtils; public class HttpStresser implements Callable { private static String RSID_REGEX = "rs-[a-z0-9|-]*"; //TODO: fix this regex, it DOESN'T WORK //private static String RESULTSET_REGEX = "http://.*:.*resultSet"; private HttpClient client; private QueryGenerator queryGenerator; private String indexUrl = "http://146.48.122.85:3000/efg-is/services/IndexService"; private String resultsetUrl = "http://146.48.122.85:3000/efg-is/services/resultSet"; public HttpStresser(final HttpClient client, final QueryGenerator queryGenerator) { this.client = client; this.queryGenerator = queryGenerator; } @Override public Double call() throws Exception { long start = DateUtils.now(); testLookup(queryGenerator.nextRandomQuery(5)); // testLookup("__all all and itemtype=video"); // testLookup("__all all and itemtype=image"); // testLookup("__all all and itemtype=sound"); // testLookup("__all all and itemtype=text"); // testLookup("itemType=\"image\" AND provider=\"Cinecittà Luce S.p.A.\" sortBy dateofcollection/sort.descending"); // testBrowse("__all all AND itemtype=*&groupby=provider,decade,language,itemtype"); long end = DateUtils.now(); return (end - start)/1000.0; } private void testLookup(String query) { try { String url = indexUrl + "/indexLookup?id=all&query=" + URLEncoder.encode(query, "UTF-8") + "&mdformat=oai_efg&layout=index"; GetMethod doGet = doGet(url); if (doGet.getStatusCode() != 200) System.out.println(url); String epr = doGet.getResponseBodyAsString(); consumeResults(epr); //System.out.print("OK "); } catch (Exception e) { System.out.println("ERR: " + e.getMessage()); } } private void testBrowse(String query) throws Exception { try { String url = indexUrl + "/getBrowsingStatistics?query=" + URLEncoder.encode(query, "UTF-8") + "&index=all&mdformat=oai_efg&layout=index"; String epr = doGet(url).getResponseBodyAsString(); consumeResults(epr); //System.out.print("OK "); } catch (Exception e) { //System.out.print("ERR "); } } private void consumeResults(final String epr) throws HttpException, IOException { String rsId = getRsId(epr); String resultsetUrl = getResultSetUrl(epr); String url = resultsetUrl + "/getResult?rsId=" + rsId + "&fromPosition=1&toPosition=10&requestMode=WAITING"; GetMethod doGet = doGet(url); String res = doGet.getResponseBodyAsString(); if (doGet.getStatusCode() != 200) System.out.println(url); url = resultsetUrl + "/getNumberOfElements?rsId=" + rsId; res = doGet(url).getResponseBodyAsString(); } private GetMethod doGet(String url) throws HttpException, IOException { URL _url = new URL(url); GetMethod get = new GetMethod(_url.toExternalForm()); client.executeMethod(get); return get; } private String getResultSetUrl(final String epr) { return resultsetUrl; /* String tmp = new String(epr); Pattern p = Pattern.compile(RESULTSET_REGEX); Matcher m = p.matcher(tmp); m.find(); String url = m.group(); return url; */ } private String getRsId(final String epr) { String tmp = new String(epr); Pattern p = Pattern.compile(RSID_REGEX); Matcher m = p.matcher(tmp); m.find(); return m.group(); } }