mirror of
https://github.com/apache/zeppelin
synced 2026-05-24 09:38:26 +00:00
[ZEPPELIN-699] Add new synchronous paragraph run REST API
This commit is contained in:
parent
8064c54917
commit
8367acfc05
1 changed files with 67 additions and 0 deletions
|
|
@ -609,6 +609,58 @@ public class NotebookRestApi {
|
|||
return new JsonResponse<>(Status.OK).build();
|
||||
}
|
||||
|
||||
/**
|
||||
* Run synchronously a paragraph REST API
|
||||
*
|
||||
* @param noteId - noteId
|
||||
* @param paragraphId - paragraphId
|
||||
* @param message - JSON with params if user wants to update dynamic form's value
|
||||
* null, empty string, empty json if user doesn't want to update
|
||||
*
|
||||
* @return JSON with status.OK
|
||||
* @throws IOException, IllegalArgumentException
|
||||
*/
|
||||
@POST
|
||||
@Path("run/{notebookId}/{paragraphId}")
|
||||
@ZeppelinApi
|
||||
public Response runParagraphSynchronously(@PathParam("notebookId") String noteId,
|
||||
@PathParam("paragraphId") String paragraphId,
|
||||
String message) throws
|
||||
IOException, IllegalArgumentException {
|
||||
LOG.info("run paragraph synchronously {} {} {}", noteId, paragraphId, message);
|
||||
|
||||
Note note = notebook.getNote(noteId);
|
||||
if (note == null) {
|
||||
return new JsonResponse<>(Status.NOT_FOUND, "note not found.").build();
|
||||
}
|
||||
|
||||
Paragraph paragraph = note.getParagraph(paragraphId);
|
||||
if (paragraph == null) {
|
||||
return new JsonResponse<>(Status.NOT_FOUND, "paragraph not found.").build();
|
||||
}
|
||||
|
||||
// handle params if presented
|
||||
handleParagraphParams(message, note, paragraph);
|
||||
|
||||
if (paragraph.getNoteReplLoader() == null) {
|
||||
paragraph.setNoteReplLoader(note.getNoteReplLoader());
|
||||
}
|
||||
|
||||
if (paragraph.getListener() == null) {
|
||||
paragraph.setListener(note.getJobListenerFactory().getParagraphJobListener(note));
|
||||
}
|
||||
|
||||
paragraph.run();
|
||||
|
||||
final InterpreterResult result = paragraph.getResult();
|
||||
|
||||
if (result.code() == InterpreterResult.Code.SUCCESS) {
|
||||
return new JsonResponse<>(Status.OK, result).build();
|
||||
} else {
|
||||
return new JsonResponse<>(Status.INTERNAL_SERVER_ERROR, result).build();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Stop(delete) paragraph job REST API
|
||||
*
|
||||
|
|
@ -800,4 +852,19 @@ public class NotebookRestApi {
|
|||
return new JsonResponse<>(Status.OK, notebooksFound).build();
|
||||
}
|
||||
|
||||
|
||||
private void handleParagraphParams(String message, Note note, Paragraph paragraph)
|
||||
throws IOException {
|
||||
// handle params if presented
|
||||
if (!StringUtils.isEmpty(message)) {
|
||||
RunParagraphWithParametersRequest request = gson.fromJson(message,
|
||||
RunParagraphWithParametersRequest.class);
|
||||
Map<String, Object> paramsForUpdating = request.getParams();
|
||||
if (paramsForUpdating != null) {
|
||||
paragraph.settings.getParams().putAll(paramsForUpdating);
|
||||
note.persist();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue