in sample-extension-plugin/src/main/java/org/opensearch/jobscheduler/sampleextension/SampleExtensionRestHandler.java [61:128]
protected RestChannelConsumer prepareRequest(RestRequest request, NodeClient client) throws IOException {
if (request.method().equals(RestRequest.Method.POST)) {
// compose SampleJobParameter object from request
String id = request.param("id");
String indexName = request.param("index");
String jobName = request.param("job_name");
String interval = request.param("interval");
String lockDurationSecondsString = request.param("lock_duration_seconds");
Long lockDurationSeconds = lockDurationSecondsString != null ? Long.parseLong(lockDurationSecondsString) : null;
String jitterString = request.param("jitter");
Double jitter = jitterString != null ? Double.parseDouble(jitterString) : null;
if(id == null || indexName ==null) {
throw new IllegalArgumentException("Must specify id and index parameter");
}
SampleJobParameter jobParameter = new SampleJobParameter(id, jobName, indexName,
new IntervalSchedule(Instant.now(), Integer.parseInt(interval), ChronoUnit.MINUTES), lockDurationSeconds, jitter);
IndexRequest indexRequest = new IndexRequest()
.index(SampleExtensionPlugin.JOB_INDEX_NAME)
.id(id)
.source(jobParameter.toXContent(JsonXContent.contentBuilder(), null));
return restChannel -> {
// index the job parameter
client.index(indexRequest, new ActionListener<IndexResponse>() {
@Override
public void onResponse(IndexResponse indexResponse) {
try {
RestResponse restResponse = new BytesRestResponse(RestStatus.OK,
indexResponse.toXContent(JsonXContent.contentBuilder(), null));
restChannel.sendResponse(restResponse);
} catch(IOException e) {
restChannel.sendResponse(new BytesRestResponse(RestStatus.INTERNAL_SERVER_ERROR, e.getMessage()));
}
}
@Override
public void onFailure(Exception e) {
restChannel.sendResponse(new BytesRestResponse(RestStatus.INTERNAL_SERVER_ERROR, e.getMessage()));
}
});
};
} else if (request.method().equals(RestRequest.Method.DELETE)) {
// delete job parameter doc from index
String id = request.param("id");
DeleteRequest deleteRequest = new DeleteRequest()
.index(SampleExtensionPlugin.JOB_INDEX_NAME)
.id(id);
return restChannel -> {
client.delete(deleteRequest, new ActionListener<DeleteResponse>() {
@Override
public void onResponse(DeleteResponse deleteResponse) {
restChannel.sendResponse(new BytesRestResponse(RestStatus.OK, "Job deleted."));
}
@Override
public void onFailure(Exception e) {
restChannel.sendResponse(new BytesRestResponse(RestStatus.INTERNAL_SERVER_ERROR, e.getMessage()));
}
});
};
} else {
return restChannel -> {
restChannel.sendResponse(new BytesRestResponse(RestStatus.METHOD_NOT_ALLOWED, request.method() + " is not allowed."));
};
}
}