package qa.qcri.aidr.collector.api;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.List;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.apache.log4j.Logger;
import org.glassfish.jersey.jackson.JacksonFeature;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import qa.qcri.aidr.collector.beans.CollectionTask;
import qa.qcri.aidr.collector.beans.ResponseWrapper;
import qa.qcri.aidr.collector.utils.CollectorConfigurationProperty;
import qa.qcri.aidr.collector.utils.CollectorConfigurator;
import qa.qcri.aidr.collector.utils.CollectorErrorLog;
import qa.qcri.aidr.collector.utils.GenericCache;
public abstract class BaseController<T extends CollectionTask> {
protected static Logger logger = Logger.getLogger(BaseController.class);
protected static CollectorConfigurator configProperties = CollectorConfigurator.getInstance();
/*@RequestMapping("/status")
public Response getStatus(@RequestParam("id") String id) {
ResponseWrapper response = new ResponseWrapper();
if (StringUtils.isEmpty(id)) {
response.setMessage("Invalid key. No running collector found for the given id.");
response.setStatusCode(configProperties.getProperty(CollectorConfigurationProperty.STATUS_CODE_COLLECTION_NOTFOUND));
return Response.ok(response).build();
}
CollectionTask task = GenericCache.getInstance().getConfig(id);
if (task != null) {
return Response.ok(task).build();
}
CollectionTask failedTask = GenericCache.getInstance().getFailedCollectionTask(id);
if (failedTask != null) {
return Response.ok(failedTask).build();
}
response.setMessage("Invalid key. No running collector found for the given id.");
response.setStatusCode(configProperties.getProperty(CollectorConfigurationProperty.STATUS_CODE_COLLECTION_NOTFOUND));
return Response.ok(response).build();
}
*/
@RequestMapping("/stop")
public Response stopTask(@RequestParam("id") String collectionCode) {
Response stopTaskResponse = stopCollection(collectionCode);
if(stopTaskResponse == null) {
ResponseWrapper response = new ResponseWrapper();
response.setMessage("Invalid key. No running collector found for the given id.");
response.setStatusCode(configProperties.getProperty(CollectorConfigurationProperty.STATUS_CODE_COLLECTION_NOTFOUND));
stopTaskResponse = Response.ok(response).build();
}
return stopTaskResponse;
}
@RequestMapping("/status/all")
public List<CollectionTask> getStatusAll() {
List<CollectionTask> allTasks = GenericCache.getInstance().getAllConfigs();
return allTasks;
}
protected abstract Response stopCollection(String code);
protected void startPersister(String collectionCode, boolean saveMediaEnabled) {
Client client = ClientBuilder.newBuilder().register(JacksonFeature.class).build();
try {
WebTarget webResource = client.target(configProperties.getProperty(CollectorConfigurationProperty.PERSISTER_REST_URI)
+ "collectionPersister/start?channel_provider="
+ URLEncoder.encode(configProperties.getProperty(CollectorConfigurationProperty.TAGGER_CHANNEL), "UTF-8")
+ "&collection_code=" + URLEncoder.encode(collectionCode, "UTF-8")
+ "&saveMediaEnabled=" + saveMediaEnabled);
Response clientResponse = webResource.request(MediaType.APPLICATION_JSON).get();
String jsonResponse = clientResponse.readEntity(String.class);
logger.info(collectionCode + ": Collector persister response = " + jsonResponse);
} catch (RuntimeException e) {
logger.error(collectionCode + ": Could not start persister. Is persister running?", e);
CollectorErrorLog.sendErrorMail(collectionCode, "Unable to start persister. Is persister running");
} catch (UnsupportedEncodingException e) {
logger.error(collectionCode + ": Unsupported Encoding scheme used");
}
}
public void stopPersister(String collectionCode) {
Client client = ClientBuilder.newBuilder().register(JacksonFeature.class).build();
try {
WebTarget webResource = client.target(configProperties.getProperty(CollectorConfigurationProperty.PERSISTER_REST_URI)
+ "collectionPersister/stop?collection_code=" + URLEncoder.encode(collectionCode, "UTF-8"));
Response clientResponse = webResource.request(MediaType.APPLICATION_JSON).get();
String jsonResponse = clientResponse.readEntity(String.class);
logger.info(collectionCode + ": Collector persister response = " + jsonResponse);
} catch (RuntimeException e) {
logger.error(collectionCode + ": Could not stop persister. Is persister running?", e);
} catch (UnsupportedEncodingException e) {
logger.error(collectionCode + ": Unsupported Encoding scheme used");
}
}
}