response.send("error", encode(errorMessage("data query parameter is required", BAD_REQUEST))).end(); return; query = JsonHelper.readSafe(data.get(0), StreamQuery.class); } catch (IOException e) { response.send("error", encode(errorMessage("JSON couldn't parsed: " + e.getMessage(), BAD_REQUEST))); return; response.send("error", HttpResponseStatus.FORBIDDEN.reasonPhrase()).end(); return;
private void handleServerSentQueryExecutionInternal(RakamHttpRequest.StreamResponse response, QueryExecution query, boolean killOnConnectionClose, Consumer<QueryResult> exceptionMapper) { if (query == null) { LOGGER.error("Query execution is null"); response.send("result", encode(jsonObject() .put("success", false) .put("error", "Not running"))).end(); return; if (ex != null) { LOGGER.error(ex, "Error while executing query"); response.send("result", encode(jsonObject() .put("success", false) .put("error", ex.getCause() instanceof RakamException ? ex.getCause().getMessage() : "Internal error"))).end(); } else if (result.isFailed()) { if (!response.isClosed()) { exceptionMapper.accept(result); response.send("result", encode(jsonObject() .put("success", false) .putPOJO("error", result.getError()) .putPOJO("properties", result.getProperties()) )).end(); } else { List<? extends SchemaField> metadata = result.getMetadata(); .putPOJO("result", result.getResult()) .putPOJO("metadata", metadata)); response.send("result", encode).end();
@Path("/listen") @GET @ApiImplicitParams({ @ApiImplicitParam(name = "project", dataType = "string", paramType = "query"), }) @ApiOperation(value = "Listen all mailboxes", consumes = "text/event-stream", produces = "text/event-stream", authorizations = @Authorization(value = "read_key") ) @IgnoreApi public void listenMails(RakamHttpRequest request) { RakamHttpRequest.StreamResponse response = request.streamResponse(); List<String> apiKey = request.params().get("api_key"); if (apiKey == null || apiKey.isEmpty()) { response.send("result", encode(HttpServer.errorMessage("api_key query parameter is required", HttpResponseStatus.BAD_REQUEST))).end(); return; } List<String> api_key = request.params().get("read_key"); String project = apiKeyService.getProjectOfApiKey(api_key.get(0), ApiKeyService.AccessKeyType.READ_KEY); UserMailboxStorage.MessageListener update = storage.listenAllUsers(project, data -> response.send("update", data.serialize())); response.listenClose(() -> update.shutdown()); }
public StreamResponse streamResponse(HttpResponse response) { ctx.writeAndFlush(response); return new StreamResponse(ctx); }
data = request.params().get("data"); } catch (Exception e) { response.send("result", encode(errorMessage("enable to parse data parameter: " + e.getMessage(), BAD_REQUEST))).end(); return; response.send("result", encode(errorMessage("data query parameter is required", BAD_REQUEST))).end(); return; query = JsonHelper.readSafe(data.get(0), clazz); } catch (Exception e) { response.send("result", encode(errorMessage("JSON couldn't parsed: " + e.getMessage(), BAD_REQUEST))).end(); return; String message = keyType.getKey() + " query parameter is required"; LogUtil.logException(request, new RakamException(message, BAD_REQUEST)); response.send("result", encode(errorMessage(message, BAD_REQUEST))).end(); return; } catch (RakamException e) { if (e.getStatusCode() == FORBIDDEN) { response.send("result", encode(errorMessage(e.getMessage(), FORBIDDEN))).end(); } else { response.send("result", encode(errorMessage(e.getMessage(), e.getStatusCode()))).end(); } catch (RakamException e) { LogUtil.logException(request, e); response.send("result", encode(errorMessage("Couldn't execute query: " + e.getMessage(), BAD_REQUEST))).end(); return; } catch (Exception e) {
@Override public void run() { boolean finished = query.isFinished(); if (response.isClosed() && !finished && killOnConnectionClose) { query.kill(); } else if (!finished) { if (!response.isClosed()) { QueryStats stats = query.currentStats(); response.send("stats", encode(stats)); if (stats.state == QueryStats.State.FINISHED) { return; } } eventLoopGroup.schedule(this, 500, TimeUnit.MILLISECONDS); } } }, 500, TimeUnit.MILLISECONDS);
@Override public void run() { if (response.isClosed()) { subscribe.shutdown(); } else { try { subscribe.sync(); } catch (Throwable e) { LOGGER.error(e); subscribe.shutdown(); } eventLoopGroup.schedule(this, 3, TimeUnit.SECONDS); } } }, 3, TimeUnit.SECONDS);
@Override public boolean isClosed() { return response.isClosed(); }
@Override public void end() { response.end(); } }
@Override public StreamResponse send(String event, String data) { response.send(event, data); return this; }