Commit bffceee2 authored by Brian Long's avatar Brian Long
Browse files

added index endpoint

parent 294b6842
Loading
Loading
Loading
Loading
+24 −0
Original line number Diff line number Diff line
package com.inteligr8.alfresco.asie.rest;

import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.inteligr8.alfresco.asie.service.IndexService;
import com.inteligr8.alfresco.asie.spi.ActionCallback;

@Component(value = "webscript.com.inteligr8.alfresco.asie.indexAcsNode.post")
public class IndexAcsNodeWebScript extends AbstractAcsNodeActionWebScript {
	
	@Autowired
	private IndexService indexSerivce;
	
	@Override
	protected void executeAction(long nodeDbId, ActionCallback callback, long fullQueueTimeout, TimeUnit fullQueueUnit,
			long execTimeout, TimeUnit execUnit) throws TimeoutException, InterruptedException {
		this.indexSerivce.index(nodeDbId, callback, 10L, TimeUnit.SECONDS, 30L, TimeUnit.SECONDS);
    }
    
}
+43 −0
Original line number Diff line number Diff line
package com.inteligr8.alfresco.asie.service;

import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

import org.springframework.stereotype.Component;

import com.inteligr8.alfresco.asie.api.CoreAdminApi;
import com.inteligr8.alfresco.asie.model.ActionCoreResponse;
import com.inteligr8.alfresco.asie.model.core.IndexRequest;
import com.inteligr8.alfresco.asie.spi.ActionCallback;
import com.inteligr8.solr.model.Action;

@Component
public class IndexService extends AbstractNodeActionService {
	
	@Override
	protected String getActionName() {
		return "index";
	}
	
	@Override
	protected String getThreadNamePrefix() {
		return "solr-index";
	}
	
	@Override
	protected ActionCoreResponse<Action> execute(CoreAdminApi api, String core, long nodeDbId) {
		IndexRequest apiRequest = new IndexRequest().withCore(core).withNodeId(nodeDbId);
		return api.index(apiRequest);
	}
	
	public Future<Void> index(long nodeDbId, ActionCallback callback) throws InterruptedException {
		return super.action(nodeDbId, callback);
	}
	
	public void index(long nodeDbId, ActionCallback callback, long fullQueueTimeout, TimeUnit fullQueueUnit,
			long execTimeout, TimeUnit execUnit) throws TimeoutException, InterruptedException {
		super.action(nodeDbId, callback, fullQueueTimeout, fullQueueUnit, execTimeout, execUnit);
	}

}
+12 −0
Original line number Diff line number Diff line
package com.inteligr8.alfresco.asie.spi;

import com.inteligr8.alfresco.asie.model.ShardInstance;

public interface IndexCallback extends ActionCallback {
	
	@Override
	default void unknownResult(ShardInstance instance) {
		throw new IllegalStateException();
	}

}
+63 −0
Original line number Diff line number Diff line
<webscript xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		xsi:noNamespaceSchemaLocation="https://bitbucket.org/!api/2.0/snippets/inteligr8/AzMgbp/80fdd26a6b3769a63cdc6b54bf1f39e378545cf7/files/snippet.txt">
	
	<!-- Naming & Organization -->
	<shortname>Index ACS Node in ASIE Indexes</shortname>
	<family>Inteligr8 ASIE</family>
	<description><![CDATA[
		<p>Index the specified ACS node in the ASIE indexes.
			This call will attempt to index the ACS node on all applicable Solr nodes.
			The index operation could be synchronous or asynchronous and could fail on any Solr node.
			If any Solr node failed synchronously in the execution, then expect a status code of 500.
			The response body will still be identical to the 200/202 status codes.
			If any Solr node is executing the index asynchronously and there are no synchronous failures, then expect a status code of 202.</p>
		<p>The following path parameters are supported:</p>
		<dl>
			<dt>nodeId</dt>
			<dd>An ACS node ID.</dd>
		</dl>
		<p>The following response body should be expected in most cases (200, 202, and 500 status codes):</p>
		<pre>
			{
				"nodeDbId": number,
				"success": [
					"solrHostSync:8983/solr",
					...
				],
				"scheduled": [
					"solrHostAsync:8983/solr",
					...
				],
				"error": [
					"solrHostThatFailed:8983/solr": {
						"message": "string"
					},
					...
				]
			}
		</pre> 
		<p>The following status codes should be expected:</p>
		<dl>
			<dt>200</dt>
			<dd>OK</dd>
			<dt>202</dt>
			<dd>Accepted</dd>
			<dt>400</dt>
			<dd>The path or query parameters are invalid</dd>
		</dl>
	]]></description>
	
	<!-- Endpoint Configuration -->
	<url>/inteligr8/asie/acs/node/{nodeId}/index</url>
	<format default="json">any</format>
	
	<!-- Security -->
	<authentication>user</authentication>
	
	<!-- Functionality -->
	<cache>
		<never>false</never>
		<public>false</public>
	</cache>
	
</webscript> 
 No newline at end of file