Changeset 6131 for SRUAggregator
- Timestamp:
- 04/07/15 20:38:40 (9 years ago)
- Location:
- SRUAggregator/trunk
- Files:
-
- 1 added
- 16 edited
Legend:
- Unmodified
- Added
- Removed
-
SRUAggregator/trunk/aggregator.yml
r6129 r6131 12 12 # - http://dspin.dwds.de:8088/ddc-sru/dta/ 13 13 14 AGGREGATOR_FILE_PATH: /data/fcsAggregator/fcsAggregatorCorpora.json15 AGGREGATOR_FILE_PATH_BACKUP: /data/fcsAggregator/fcsAggregatorCorpora.backup.json16 #AGGREGATOR_FILE_PATH: /Users/edima/fcsAggregatorCorpora.json17 #AGGREGATOR_FILE_PATH_BACKUP: /Users/edima/fcsAggregatorCorpora.backup.json18 SCAN_MAX_DEPTH: 3# recommended 314 # AGGREGATOR_FILE_PATH: /data/fcsAggregator/fcsAggregatorCorpora.json 15 # AGGREGATOR_FILE_PATH_BACKUP: /data/fcsAggregator/fcsAggregatorCorpora.backup.json 16 AGGREGATOR_FILE_PATH: /Users/edima/fcsAggregatorCorpora.json 17 AGGREGATOR_FILE_PATH_BACKUP: /Users/edima/fcsAggregatorCorpora.backup.json 18 SCAN_MAX_DEPTH: 1 # recommended 3 19 19 SCAN_TASK_INITIAL_DELAY: 0 20 20 SCAN_TASK_INTERVAL: 12 … … 23 23 SCAN_MAX_CONCURRENT_REQUESTS_PER_ENDPOINT: 4 # @depth2: 1=361s; 2=225s; 4=207s 24 24 SEARCH_MAX_CONCURRENT_REQUESTS_PER_ENDPOINT: 4 25 SEARCH_MAX_CONCURRENT_REQUESTS_PER_SLOW_ENDPOINT: 2 26 slowEndpoints: 27 - http://cqlservlet.mpi.nl/ 25 28 26 29 ENDPOINTS_SCAN_TIMEOUT_MS: 60000 … … 41 44 # use the simple server factory, run on a single port 42 45 server: 43 applicationContextPath: /Aggregator -testing46 applicationContextPath: /Aggregator 44 47 type: simple 45 48 connector: -
SRUAggregator/trunk/pom.xml
r6130 r6131 8 8 <groupId>eu.clarin.sru.fcs</groupId> 9 9 <artifactId>aggregator</artifactId> 10 <version>2.0.0-beta-3 2</version>10 <version>2.0.0-beta-33</version> 11 11 <name>FCS Aggregator</name> 12 12 -
SRUAggregator/trunk/src/main/java/eu/clarin/sru/fcs/aggregator/app/Aggregator.java
r6123 r6131 8 8 import com.optimaize.langdetect.profiles.LanguageProfileReader; 9 9 import com.optimaize.langdetect.text.*; 10 import eu.clarin.sru.client.SRUThreadedClient; 10 11 import eu.clarin.sru.fcs.aggregator.search.Search; 11 12 import eu.clarin.sru.fcs.aggregator.scan.ScanCrawlTask; … … 14 15 import eu.clarin.sru.client.fcs.ClarinFCSClientBuilder; 15 16 import eu.clarin.sru.client.fcs.ClarinFCSEndpointDescriptionParser; 17 import eu.clarin.sru.fcs.aggregator.client.MaxConcurrentRequestsCallback; 16 18 import eu.clarin.sru.fcs.aggregator.client.ThrottledClient; 17 19 import eu.clarin.sru.fcs.aggregator.scan.Corpus; … … 25 27 import java.io.File; 26 28 import java.io.IOException; 29 import java.net.URI; 27 30 import java.util.ArrayList; 28 31 import java.util.Collections; … … 65 68 * @author edima 66 69 * 67 * TODO: improve help page text68 *69 70 * TODO: update comments everywhere 70 71 * … … 102 103 private TextObjectFactory textObjectFactory; 103 104 104 private ThrottledClient sruScanClient = null; 105 private ThrottledClient sruSearchClient = null; 105 private ThrottledClient sruClient = null; 106 public MaxConcurrentRequestsCallback maxScanConcurrentRequestsCallback; 107 public MaxConcurrentRequestsCallback maxSearchConcurrentRequestsCallback; 106 108 private Map<Long, Search> activeSearches = Collections.synchronizedMap(new HashMap<Long, Search>()); 107 109 … … 173 175 public void init() throws IOException { 174 176 log.info("Aggregator initialization started."); 175 sruScanClient = new ThrottledClient( 176 new ClarinFCSClientBuilder() 177 178 SRUThreadedClient sruScanClient 179 = new ClarinFCSClientBuilder() 177 180 .setConnectTimeout(params.ENDPOINTS_SCAN_TIMEOUT_MS) 178 181 .setSocketTimeout(params.ENDPOINTS_SCAN_TIMEOUT_MS) … … 181 184 new ClarinFCSEndpointDescriptionParser()) 182 185 .enableLegacySupport() 183 .buildThreadedClient(), 184 params.SCAN_MAX_CONCURRENT_REQUESTS_PER_ENDPOINT 185 ); 186 sruSearchClient = new ThrottledClient( 187 new ClarinFCSClientBuilder() 186 .buildThreadedClient(); 187 188 SRUThreadedClient sruSearchClient 189 = new ClarinFCSClientBuilder() 188 190 .setConnectTimeout(params.ENDPOINTS_SEARCH_TIMEOUT_MS) 189 191 .setSocketTimeout(params.ENDPOINTS_SEARCH_TIMEOUT_MS) 190 192 .addDefaultDataViewParsers() 193 .registerExtraResponseDataParser( 194 new ClarinFCSEndpointDescriptionParser()) 191 195 .enableLegacySupport() 192 .buildThreadedClient(), 193 params.SEARCH_MAX_CONCURRENT_REQUESTS_PER_ENDPOINT 196 .buildThreadedClient(); 197 198 maxScanConcurrentRequestsCallback = new MaxConcurrentRequestsCallback() { 199 @Override 200 public int getMaxConcurrentRequest(URI baseURI) { 201 return params.SCAN_MAX_CONCURRENT_REQUESTS_PER_ENDPOINT; 202 } 203 }; 204 205 maxSearchConcurrentRequestsCallback = new MaxConcurrentRequestsCallback() { 206 @Override 207 public int getMaxConcurrentRequest(URI baseURI) { 208 return params.slowEndpoints.contains(baseURI) 209 ? params.SEARCH_MAX_CONCURRENT_REQUESTS_PER_SLOW_ENDPOINT 210 : params.SEARCH_MAX_CONCURRENT_REQUESTS_PER_ENDPOINT; 211 } 212 }; 213 214 sruClient = new ThrottledClient( 215 sruScanClient, maxScanConcurrentRequestsCallback, 216 sruSearchClient, maxSearchConcurrentRequestsCallback 194 217 ); 195 218 … … 221 244 initLanguageDetector(); 222 245 223 ScanCrawlTask task = new ScanCrawlTask(sru ScanClient,246 ScanCrawlTask task = new ScanCrawlTask(sruClient, 224 247 params.CENTER_REGISTRY_URL, params.SCAN_MAX_DEPTH, 225 248 params.additionalCQLEndpoints, … … 237 260 search.shutdown(); 238 261 } 239 shutdownAndAwaitTermination(config.aggregatorParams, sruScanClient, scheduler); 240 shutdownAndAwaitTermination(config.aggregatorParams, sruSearchClient, scheduler); 262 shutdownAndAwaitTermination(config.aggregatorParams, sruClient, scheduler); 241 263 log.info("Aggregator shutdown complete."); 242 264 } … … 253 275 return null; 254 276 } else { 255 Search sr = new Search(sruSearchClient, version, searchStatsAtom.get(), 277 Search sr = new Search(sruClient, 278 version, searchStatsAtom.get(), 256 279 corpora, searchString, searchLang, maxRecords); 257 280 if (activeSearches.size() > SEARCHES_SIZE_GC_THRESHOLD) { -
SRUAggregator/trunk/src/main/java/eu/clarin/sru/fcs/aggregator/app/AggregatorConfiguration.java
r6065 r6131 4 4 import com.fasterxml.jackson.annotation.JsonProperty; 5 5 import io.dropwizard.Configuration; 6 import java.net.URI; 6 7 import java.net.URL; 7 8 import java.util.List; … … 19 20 @JsonProperty 20 21 List<URL> additionalCQLEndpoints; 22 23 @JsonProperty 24 List<URI> slowEndpoints; 21 25 22 26 @NotEmpty … … 51 55 @Range 52 56 int SEARCH_MAX_CONCURRENT_REQUESTS_PER_ENDPOINT; 57 58 @JsonProperty 59 @Range 60 int SEARCH_MAX_CONCURRENT_REQUESTS_PER_SLOW_ENDPOINT; 53 61 54 62 @JsonProperty … … 112 120 113 121 @JsonIgnore 122 public int getSEARCH_MAX_CONCURRENT_REQUESTS_PER_SLOW_ENDPOINT() { 123 return SEARCH_MAX_CONCURRENT_REQUESTS_PER_SLOW_ENDPOINT; 124 } 125 126 @JsonIgnore 114 127 public WeblichtConfig getWeblichtConfig() { 115 128 return weblichtConfig; -
SRUAggregator/trunk/src/main/java/eu/clarin/sru/fcs/aggregator/app/ErrorHandler.java
r6123 r6131 1 1 package eu.clarin.sru.fcs.aggregator.app; 2 2 3 import com.fasterxml.jackson.databind.ObjectMapper;4 3 import java.io.IOException; 5 4 import javax.servlet.RequestDispatcher; … … 19 18 private static final org.slf4j.Logger log = LoggerFactory.getLogger(Aggregator.class); 20 19 21 private final String redirectRoute = "/index.html"; 20 public static final String PARAM_QUERY = "query"; 21 public static final String PARAM_MODE = "mode"; 22 public static final String PARAM_AGGREGATION_CONTEXT = "x-aggregation-context"; 23 24 public static final String redirectRoute = "/index.html"; 25 22 26 23 27 @Override … … 27 31 forward(redirectRoute, baseRequest, response); 28 32 } else if (request.getMethod().equals("POST") 29 && response.getStatus() == HttpServletResponse.SC_METHOD_NOT_ALLOWED 30 && request.getParameterValues("x-aggregation-context") != null) {31 32 // this request must come from VLO33 String[] queryValues = request.getParameterValues("query");34 if (queryValues != null && queryValues.length > 0) {35 baseRequest.getSession().setAttribute("query", queryValues[0]);33 && response.getStatus() == HttpServletResponse.SC_METHOD_NOT_ALLOWED) { 34 // an external search request, coming from clarin.eu or VLO 35 { 36 String[] queryValues = request.getParameterValues(PARAM_QUERY); 37 if (queryValues != null && queryValues.length > 0) { 38 baseRequest.getSession().setAttribute(PARAM_QUERY, queryValues[0]); 39 } 36 40 } 37 41 38 String[] contextValues = request.getParameterValues("x-aggregation-context"); 39 if (contextValues != null && contextValues.length > 0) { 40 baseRequest.getSession().setAttribute("x-aggregation-context", contextValues[0]); 42 { 43 String[] modeValues = request.getParameterValues(PARAM_MODE); 44 if (modeValues != null && modeValues.length > 0) { 45 baseRequest.getSession().setAttribute(PARAM_MODE, modeValues[0]); 46 } 47 } 48 49 { 50 String[] contextValues = request.getParameterValues(PARAM_AGGREGATION_CONTEXT); 51 if (contextValues != null && contextValues.length > 0) { 52 baseRequest.getSession().setAttribute(PARAM_AGGREGATION_CONTEXT, contextValues[0]); 53 } 41 54 } 42 55 -
SRUAggregator/trunk/src/main/java/eu/clarin/sru/fcs/aggregator/client/GenericClient.java
r5957 r6131 7 7 import java.util.Map; 8 8 import java.util.Queue; 9 import org.slf4j.LoggerFactory; 9 10 10 11 /** … … 14 15 class GenericClient { 15 16 17 private static final org.slf4j.Logger log = LoggerFactory.getLogger(GenericClient.class); 18 16 19 private final SRUThreadedClient sruClient; 17 public final int maxConcurrentRequests;20 final MaxConcurrentRequestsCallback maxConcurrentRequestsCallback; 18 21 19 22 // queue of operations waiting for execution 20 23 static class ExecQueue { 21 24 int maxConcurrentRequests = 0; 22 25 int nowExecuting = 0; 23 26 Queue<Operation> queue = new ArrayDeque<>(); … … 26 29 private final Object lock = new Object(); 27 30 28 GenericClient(SRUThreadedClient sruClient, int maxConcurrentRequests) {31 GenericClient(SRUThreadedClient sruClient, MaxConcurrentRequestsCallback maxConcurrentRequestsCallback) { 29 32 this.sruClient = sruClient; 30 this.maxConcurrentRequests = maxConcurrentRequests;33 this.maxConcurrentRequestsCallback = maxConcurrentRequestsCallback; 31 34 } 32 35 … … 37 40 if (eq == null) { 38 41 eq = new ExecQueue(); 42 try { 43 eq.maxConcurrentRequests = maxConcurrentRequestsCallback.getMaxConcurrentRequest(endpoint); 44 log.info("CONCURRENCY LEVEL " + eq.maxConcurrentRequests 45 + " for operation: " + op.getClass().getSimpleName() 46 + " for endpoint: " + endpoint); 47 } catch (Exception xc) { 48 // ignore 49 } finally { 50 if (eq.maxConcurrentRequests <= 0) { 51 eq.maxConcurrentRequests = 1; 52 } 53 } 39 54 endpointMap.put(endpoint, eq); 40 55 } … … 53 68 return; 54 69 } 55 if (eq.nowExecuting >= maxConcurrentRequests) {70 if (eq.nowExecuting >= eq.maxConcurrentRequests) { 56 71 return; 57 72 } -
SRUAggregator/trunk/src/main/java/eu/clarin/sru/fcs/aggregator/client/ThrottledClient.java
r5957 r6131 9 9 import eu.clarin.sru.client.SRUSearchRetrieveResponse; 10 10 import eu.clarin.sru.client.SRUThreadedClient; 11 import java.net.URI; 12 import java.net.URISyntaxException; 13 import java.util.logging.Level; 14 import java.util.logging.Logger; 15 import org.slf4j.LoggerFactory; 11 16 12 17 /** … … 14 19 */ 15 20 public class ThrottledClient { 21 private static final org.slf4j.Logger log = LoggerFactory.getLogger(GenericClient.class); 16 22 17 23 public interface Stats { … … 43 49 } 44 50 45 GenericClient client; 51 GenericClient scanClient; 52 GenericClient searchClient; 46 53 47 public ThrottledClient(SRUThreadedClient sruClient, int maxConcurrentRequests) { 48 this.client = new GenericClient(sruClient, maxConcurrentRequests); 54 public ThrottledClient( 55 SRUThreadedClient sruScanClient, MaxConcurrentRequestsCallback scanConcurrentCallback, 56 SRUThreadedClient sruSearchClient, MaxConcurrentRequestsCallback searchConcurrentCallback) { 57 this.scanClient = new GenericClient(sruScanClient, scanConcurrentCallback); 58 this.searchClient = new GenericClient(sruSearchClient, searchConcurrentCallback); 49 59 } 50 60 51 61 public void explain(SRUExplainRequest request, ExplainCallback callback) { 52 client.execute(request.getBaseURI(), new ExplainOperation(request, callback));62 scanClient.execute(request.getBaseURI(), new ExplainOperation(request, callback)); 53 63 } 54 64 55 65 public void scan(SRUScanRequest request, ScanCallback callback) { 56 client.execute(request.getBaseURI(), new ScanOperation(request, callback));66 scanClient.execute(request.getBaseURI(), new ScanOperation(request, callback)); 57 67 } 58 68 59 69 public void searchRetrieve(SRUSearchRetrieveRequest request, SearchCallback callback) { 60 client.execute(request.getBaseURI(), new SearchOperation(request, callback));70 searchClient.execute(request.getBaseURI(), new SearchOperation(request, callback)); 61 71 } 62 72 63 73 public void shutdown() { 64 client.shutdown(); 74 scanClient.shutdown(); 75 searchClient.shutdown(); 65 76 } 66 77 67 78 public void shutdownNow() { 68 client.shutdownNow(); 79 scanClient.shutdownNow(); 80 searchClient.shutdownNow(); 69 81 } 82 83 public int getMaxConcurrentRequests(boolean isSearch, String url) { 84 try { 85 URI uri = new URI(url); 86 return isSearch 87 ? searchClient.maxConcurrentRequestsCallback.getMaxConcurrentRequest(uri) 88 : scanClient.maxConcurrentRequestsCallback.getMaxConcurrentRequest(uri); 89 } catch (URISyntaxException ex) { 90 return -1; 91 } 92 } 93 70 94 } -
SRUAggregator/trunk/src/main/java/eu/clarin/sru/fcs/aggregator/rest/RestService.java
r6123 r6131 9 9 import eu.clarin.sru.fcs.aggregator.app.AggregatorConfiguration; 10 10 import eu.clarin.sru.fcs.aggregator.app.AggregatorConfiguration.Params.WeblichtConfig; 11 import static eu.clarin.sru.fcs.aggregator.app.ErrorHandler.PARAM_AGGREGATION_CONTEXT; 12 import static eu.clarin.sru.fcs.aggregator.app.ErrorHandler.PARAM_MODE; 13 import static eu.clarin.sru.fcs.aggregator.app.ErrorHandler.PARAM_QUERY; 11 14 import eu.clarin.sru.fcs.aggregator.scan.Corpora; 12 15 import eu.clarin.sru.fcs.aggregator.scan.Corpus; … … 81 84 @GET 82 85 @Path("init") 83 public Response getInit(@Context HttpServletRequest request) throws IOException {86 public Response getInit(@Context final HttpServletRequest request) throws IOException { 84 87 log.info("get initial data"); 85 88 final Corpora corpora = Aggregator.getInstance().getCorpora(); 86 final Object contextString = request.getSession().getAttribute("x-aggregation-context");87 final Object query = request.getSession().getAttribute("query");88 final Object mode = request.getSession().getAttribute("mode");89 final Object query = request.getSession().getAttribute(PARAM_QUERY); 90 final Object mode = request.getSession().getAttribute(PARAM_MODE); 91 final Object contextString = request.getSession().getAttribute(PARAM_AGGREGATION_CONTEXT); 89 92 Object j = new HashMap<String, Object>() { 90 93 { 91 94 if (query != null) { 92 put("query", query); 95 put(PARAM_QUERY, query); 96 request.getSession().setAttribute(PARAM_QUERY, null); 97 } 98 if (mode != null) { 99 put(PARAM_MODE, mode); 100 request.getSession().setAttribute(PARAM_MODE, null); 93 101 } 94 102 if (contextString instanceof String) { 95 103 Object context = new ObjectMapper().readValue((String) contextString, Object.class); 96 put("x-aggregation-context", context); // preselected corpora 104 put(PARAM_AGGREGATION_CONTEXT, context); // preselected corpora 105 request.getSession().setAttribute(PARAM_AGGREGATION_CONTEXT, null); 97 106 } 98 107 put("corpora", corpora.getCorpora()); … … 288 297 put("Last Scan", new HashMap<String, Object>() { 289 298 { 290 put("maxConcurrentScanRequestsPerEndpoint",291 Aggregator.getInstance().getParams().getSCAN_MAX_CONCURRENT_REQUESTS_PER_ENDPOINT());292 299 put("timeout", params.getENDPOINTS_SCAN_TIMEOUT_MS() / 1000.); 293 300 put("isScan", true); … … 298 305 put("Recent Searches", new HashMap<String, Object>() { 299 306 { 300 put("maxConcurrentSearchRequestsPerEndpoint",301 Aggregator.getInstance().getParams().getSEARCH_MAX_CONCURRENT_REQUESTS_PER_ENDPOINT());302 307 put("timeout", params.getENDPOINTS_SEARCH_TIMEOUT_MS() / 1000.); 303 308 put("isScan", false); -
SRUAggregator/trunk/src/main/java/eu/clarin/sru/fcs/aggregator/scan/ScanCrawler.java
r6092 r6131 10 10 import eu.clarin.sru.client.SRUScanResponse; 11 11 import eu.clarin.sru.client.SRUTerm; 12 import eu.clarin.sru.client.SRUVersion;13 12 import eu.clarin.sru.client.fcs.ClarinFCSEndpointDescription; 14 13 import eu.clarin.sru.client.fcs.ClarinFCSEndpointDescription.ResourceInfo; … … 95 94 SRUExplainRequest explainRequest = null; 96 95 try { 96 statistics.initEndpoint(institution, endpoint, sruClient.getMaxConcurrentRequests(false, endpoint.getUrl())); 97 97 explainRequest = new SRUExplainRequest(endpoint.getUrl()); 98 98 explainRequest.setExtraRequestData(SRUCQL.EXPLAIN_ASK_FOR_RESOURCES_PARAM, "true"); -
SRUAggregator/trunk/src/main/java/eu/clarin/sru/fcs/aggregator/scan/Statistics.java
r6043 r6131 28 28 List<Long> executionTimes = Collections.synchronizedList(new ArrayList<Long>()); 29 29 30 @JsonProperty 31 int maxConcurrentRequests; 32 30 33 public static class DiagPair { 31 34 … … 122 125 public Map<String, Map<String, EndpointStats>> getInstitutions() { 123 126 return institutions; 127 } 128 129 public void initEndpoint(Institution institution, Endpoint endpoint, int maxConcurrentRequests) { 130 EndpointStats stats = getEndpointStats(institution, endpoint); 131 synchronized (stats.lock) { 132 stats.maxConcurrentRequests = maxConcurrentRequests; 133 } 124 134 } 125 135 -
SRUAggregator/trunk/src/main/java/eu/clarin/sru/fcs/aggregator/search/Search.java
r6092 r6131 42 42 private final Statistics statistics; 43 43 44 public Search(ThrottledClient searchClient, SRUVersion version, 44 public Search(ThrottledClient searchClient, 45 SRUVersion version, 45 46 Statistics statistics, List<Corpus> corpora, String searchString, 46 47 String searchLanguage, int maxRecords … … 90 91 corpus.getHandle()); 91 92 } 93 94 statistics.initEndpoint(corpus.getInstitution(), corpus.getEndpoint(), 95 searchClient.getMaxConcurrentRequests(true, corpus.getEndpoint().getUrl())); 92 96 result.setInProgress(true); 93 97 -
SRUAggregator/trunk/src/main/resources/assets/js/main.js
r6129 r6131 3 3 "use strict"; 4 4 5 var VERSION = window.MyAggregator.VERSION = "VERSION 2.0.0-beta-3 2";5 var VERSION = window.MyAggregator.VERSION = "VERSION 2.0.0-beta-33"; 6 6 var URLROOT = window.MyAggregator.URLROOT = 7 7 window.location.pathname.substring(0, window.location.pathname.indexOf("/",2)) || … … 73 73 74 74 renderAggregator: function() { 75 return React.createElement(AggregatorPage, {ajax: this.ajax });75 return React.createElement(AggregatorPage, {ajax: this.ajax, error: this.error}); 76 76 }, 77 77 … … 291 291 : React.createElement("span", {style: {color:'#3c763d'}}, React.createElement("i", {className: "glyphicon glyphicon-thumbs-up"}), " "), 292 292 293 " "+endpoint[0], ":" 294 ), 295 React.createElement("li", null, 296 React.createElement("span", null, stat.numberOfRequests), " request(s)," + ' ' + 297 "average:", this.renderWaitTimeSecs(stat.avgExecutionTime), "," + ' ' + 298 "max: ", this.renderWaitTimeSecs(stat.maxExecutionTime) 293 " "+endpoint[0] 299 294 ) 295 ), 296 React.createElement("div", {style: {marginLeft:40}}, 297 isScan ? 298 React.createElement("div", null, "Max concurrent scan requests:", " ", " ", stat.maxConcurrentRequests, " ") : 299 React.createElement("div", null, "Max concurrent search requests:", " ", " ", stat.maxConcurrentRequests, " ") 300 301 ), 302 React.createElement("div", {style: {marginLeft:40}}, 303 React.createElement("span", null, stat.numberOfRequests), " request(s)," + ' ' + 304 "average:", this.renderWaitTimeSecs(stat.avgExecutionTime), "," + ' ' + 305 "max: ", this.renderWaitTimeSecs(stat.maxExecutionTime) 300 306 ), 301 307 isScan ? this.renderCollections(stat.rootCollections) : false, … … 324 330 React.createElement("div", null, 325 331 React.createElement("div", null, "Start date: ", new Date(stats.date).toLocaleString()), 326 stats.isScan ?327 React.createElement("div", null, "Max concurrent scan requests per endpoint:", " ",328 React.createElement("kbd", null, stats.maxConcurrentScanRequestsPerEndpoint)329 )330 :331 React.createElement("div", null, "Max concurrent search requests per endpoint:", " ",332 React.createElement("kbd", null, stats.maxConcurrentSearchRequestsPerEndpoint)333 ),334 335 332 React.createElement("div", null, "Timeout: ", " ", React.createElement("kbd", null, stats.timeout, " seconds")) 336 333 ), -
SRUAggregator/trunk/src/main/resources/assets/js/main.jsx
r6129 r6131 3 3 "use strict"; 4 4 5 var VERSION = window.MyAggregator.VERSION = "VERSION 2.0.0-beta-3 2";5 var VERSION = window.MyAggregator.VERSION = "VERSION 2.0.0-beta-33"; 6 6 var URLROOT = window.MyAggregator.URLROOT = 7 7 window.location.pathname.substring(0, window.location.pathname.indexOf("/",2)) || … … 73 73 74 74 renderAggregator: function() { 75 return <AggregatorPage ajax={this.ajax} />;75 return <AggregatorPage ajax={this.ajax} error={this.error} />; 76 76 }, 77 77 … … 291 291 : <span style={{color:'#3c763d'}}><i className="glyphicon glyphicon-thumbs-up"></i> </span> 292 292 } 293 { " "+endpoint[0] }: 294 </li> 295 <li> 296 <span>{stat.numberOfRequests}</span> request(s), 297 average:{this.renderWaitTimeSecs(stat.avgExecutionTime)}, 298 max: {this.renderWaitTimeSecs(stat.maxExecutionTime)} 293 { " "+endpoint[0] } 299 294 </li> 300 295 </ul> 296 <div style={{marginLeft:40}}> 297 { isScan ? 298 <div>Max concurrent scan requests:{" "} {stat.maxConcurrentRequests} </div> : 299 <div>Max concurrent search requests:{" "} {stat.maxConcurrentRequests} </div> 300 } 301 </div> 302 <div style={{marginLeft:40}}> 303 <span>{stat.numberOfRequests}</span> request(s), 304 average:{this.renderWaitTimeSecs(stat.avgExecutionTime)}, 305 max: {this.renderWaitTimeSecs(stat.maxExecutionTime)} 306 </div> 301 307 { isScan ? this.renderCollections(stat.rootCollections) : false } 302 308 { (errors && errors.length) ? … … 324 330 <div> 325 331 <div>Start date: {new Date(stats.date).toLocaleString()}</div> 326 { stats.isScan ?327 <div>Max concurrent scan requests per endpoint:{" "}328 <kbd>{stats.maxConcurrentScanRequestsPerEndpoint}</kbd>329 </div>330 :331 <div>Max concurrent search requests per endpoint:{" "}332 <kbd>{stats.maxConcurrentSearchRequestsPerEndpoint}</kbd>333 </div>334 }335 332 <div>Timeout: {" "}<kbd>{stats.timeout} seconds</kbd></div> 336 333 </div> -
SRUAggregator/trunk/src/main/resources/assets/js/search.js
r6123 r6131 214 214 propTypes: { 215 215 ajax: PT.func.isRequired, 216 error: PT.func.isRequired, 216 217 embedded: PT.bool, 217 218 }, … … 257 258 console.log("x-aggregation-context: ", json["x-aggregation-context"]); 258 259 corpora.setAggregationContext(json["x-aggregation-context"]); 260 if (!corpora.getSelectedIds().length) { 261 this.props.error("Cannot find the required collection, will search all collections instead"); 262 corpora.recurse(function(corpus) { corpus.selected = true; }); 263 } 259 264 corpora.update(); 260 265 } … … 280 285 } 281 286 var selectedIds = this.state.corpora.getSelectedIds(); 287 if (!selectedIds.length) { 288 this.props.error("Please select a collection to search into"); 289 return; 290 } 291 282 292 // console.log("searching in the following corpora:", selectedIds); 283 293 this.props.ajax({ -
SRUAggregator/trunk/src/main/resources/assets/js/search.jsx
r6123 r6131 214 214 propTypes: { 215 215 ajax: PT.func.isRequired, 216 error: PT.func.isRequired, 216 217 embedded: PT.bool, 217 218 }, … … 257 258 console.log("x-aggregation-context: ", json["x-aggregation-context"]); 258 259 corpora.setAggregationContext(json["x-aggregation-context"]); 260 if (!corpora.getSelectedIds().length) { 261 this.props.error("Cannot find the required collection, will search all collections instead"); 262 corpora.recurse(function(corpus) { corpus.selected = true; }); 263 } 259 264 corpora.update(); 260 265 } … … 280 285 } 281 286 var selectedIds = this.state.corpora.getSelectedIds(); 287 if (!selectedIds.length) { 288 this.props.error("Please select a collection to search into"); 289 return; 290 } 291 282 292 // console.log("searching in the following corpora:", selectedIds); 283 293 this.props.ajax({ -
SRUAggregator/trunk/src/test/java/eu/clarin/sru/fcs/aggregator/app/ScanCrawlerTest.java
r5971 r6131 1 1 package eu.clarin.sru.fcs.aggregator.app; 2 2 3 import eu.clarin.sru.client.SRUThreadedClient; 3 4 import eu.clarin.sru.client.fcs.ClarinFCSClientBuilder; 5 import eu.clarin.sru.fcs.aggregator.client.MaxConcurrentRequestsCallback; 4 6 import eu.clarin.sru.fcs.aggregator.scan.Corpora; 5 7 import eu.clarin.sru.fcs.aggregator.scan.EndpointUrlFilterAllow; 6 8 import eu.clarin.sru.fcs.aggregator.scan.ScanCrawler; 7 9 import eu.clarin.sru.fcs.aggregator.client.ThrottledClient; 8 import eu.clarin.sru.fcs.aggregator.scan.CenterRegistry;9 10 import eu.clarin.sru.fcs.aggregator.scan.CenterRegistryLive; 10 11 import eu.clarin.sru.fcs.aggregator.scan.Corpus; 12 import java.net.URI; 11 13 import java.util.HashSet; 12 14 import java.util.Set; … … 26 28 @Test 27 29 public void testCrawlForMpiAndTue() throws NamingException { 28 30 SRUThreadedClient sruThreadedClient = new ClarinFCSClientBuilder() 31 .addDefaultDataViewParsers() 32 .buildThreadedClient(); 33 MaxConcurrentRequestsCallback callback = new MaxConcurrentRequestsCallback() { 34 @Override 35 public int getMaxConcurrentRequest(URI baseURI) { 36 return 2; 37 } 38 }; 29 39 ThrottledClient sruClient = new ThrottledClient( 30 new ClarinFCSClientBuilder()31 .addDefaultDataViewParsers()32 .buildThreadedClient(), 2);40 sruThreadedClient, callback, 41 sruThreadedClient, callback 42 ); 33 43 34 44 try {
Note: See TracChangeset
for help on using the changeset viewer.