use of com.walmartlabs.concord.server.sdk.metrics.WithTimer in project concord by walmartlabs.
the class ProcessLogResourceV2 method append.
/**
* Appends a process' log.
*/
@POST
@Path("{id}/log/segment/{segmentId}/data")
@Consumes(MediaType.APPLICATION_OCTET_STREAM)
@WithTimer
public void append(@ApiParam @PathParam("id") UUID instanceId, @ApiParam @PathParam("segmentId") long segmentId, InputStream data) {
ProcessKey processKey = logAccessManager.assertLogAccess(instanceId);
try {
byte[] ab = IOUtils.toByteArray(data);
int upper = logManager.log(processKey, segmentId, ab);
int logSizeLimit = processCfg.getLogSizeLimit();
if (upper >= logSizeLimit) {
logManager.error(processKey, "Maximum log size reached: {}. Process cancelled.", logSizeLimit);
processManager.kill(processKey);
}
} catch (IOException e) {
throw new ConcordApplicationException("Error while appending a log: " + e.getMessage());
}
}
use of com.walmartlabs.concord.server.sdk.metrics.WithTimer in project concord by walmartlabs.
the class ProcessResource method start.
/**
* Starts a new process instance using the specified entry point and multipart request data.
*
* @param entryPoint
* @param input
* @param parentInstanceId
* @param sync
* @return
* @deprecated use {@link #start(MultipartInput, UUID, boolean, String[], HttpServletRequest)}
*/
@POST
@ApiOperation(value = "Start a new process using the specified entry point and multipart request data", hidden = true)
@javax.ws.rs.Path("/{entryPoint}")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.APPLICATION_JSON)
@WithTimer(suffix = "_with_entrypoint")
@Deprecated
public StartProcessResponse start(@PathParam("entryPoint") String entryPoint, MultipartInput input, @QueryParam("parentId") UUID parentInstanceId, @Deprecated @DefaultValue("false") @QueryParam("sync") boolean sync, @QueryParam("out") String[] out) {
if (sync) {
throw syncIsForbidden();
}
assertPartialKey(parentInstanceId);
PartialProcessKey processKey = PartialProcessKey.from(UUID.randomUUID());
UUID orgId = OrganizationManager.DEFAULT_ORG_ID;
EntryPoint ep = payloadManager.parseEntryPoint(processKey, orgId, entryPoint);
UserPrincipal userPrincipal = UserPrincipal.assertCurrent();
Payload payload;
try {
payload = payloadManager.createPayload(processKey, parentInstanceId, userPrincipal.getId(), userPrincipal.getUsername(), ep, input, out);
} catch (IOException e) {
log.error("start ['{}'] -> error creating a payload: {}", entryPoint, e);
throw new ConcordApplicationException("Error creating a payload", e);
}
return toResponse(processManager.start(payload));
}
use of com.walmartlabs.concord.server.sdk.metrics.WithTimer in project concord by walmartlabs.
the class ProcessResource method setWaitCondition.
/**
* Set the process' wait condition.
*/
@POST
@ApiOperation(value = "Set the process' wait condition")
@javax.ws.rs.Path("{id}/wait")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@WithTimer
public Response setWaitCondition(@ApiParam @PathParam("id") UUID instanceId, @ApiParam Map<String, Object> waitCondition) {
ProcessKey processKey = assertProcessKey(instanceId);
AbstractWaitCondition condition = objectMapper.convertValue(waitCondition, AbstractWaitCondition.class);
processWaitManager.addWait(processKey, condition);
return Response.ok().build();
}
use of com.walmartlabs.concord.server.sdk.metrics.WithTimer in project concord by walmartlabs.
the class ProcessResource method fork.
/**
* Starts a new child process by forking the start of the specified parent process.
*
* @param parentInstanceId
* @param req
* @param sync
* @return
*/
@POST
@ApiOperation("Fork a process")
@javax.ws.rs.Path("/{id}/fork")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@WithTimer
public StartProcessResponse fork(@ApiParam @PathParam("id") UUID parentInstanceId, @ApiParam Map<String, Object> req, @ApiParam @Deprecated @DefaultValue("false") @QueryParam("sync") boolean sync, @ApiParam @QueryParam("out") String[] out) {
if (sync) {
throw syncIsForbidden();
}
ProcessEntry parent = processQueueManager.get(PartialProcessKey.from(parentInstanceId));
if (parent == null) {
throw new ValidationErrorsException("Unknown parent instance ID: " + parentInstanceId);
}
PartialProcessKey processKey = PartialProcessKey.from(UUID.randomUUID());
ProcessKey parentProcessKey = new ProcessKey(parent.instanceId(), parent.createdAt());
UUID projectId = parent.projectId();
UserPrincipal userPrincipal = UserPrincipal.assertCurrent();
Set<String> handlers = parent.handlers();
Imports imports = queueDao.getImports(parentProcessKey);
Payload payload;
try {
payload = payloadManager.createFork(processKey, parentProcessKey, ProcessKind.DEFAULT, userPrincipal.getId(), userPrincipal.getUsername(), projectId, req, out, handlers, imports);
} catch (IOException e) {
log.error("fork ['{}', '{}'] -> error creating a payload: {}", processKey, parentProcessKey, e);
throw new ConcordApplicationException("Error creating a payload", e);
}
return toResponse(processManager.startFork(payload));
}
use of com.walmartlabs.concord.server.sdk.metrics.WithTimer in project concord by walmartlabs.
the class ProcessResource method decrypt.
/**
* Decrypt a base64 string previosly encrypted with the process' project key.
*
* @param instanceId
* @param data
* @return
*/
@POST
@javax.ws.rs.Path("{id}/decrypt")
@Consumes(MediaType.APPLICATION_OCTET_STREAM)
@Produces(MediaType.APPLICATION_OCTET_STREAM)
@WithTimer
public Response decrypt(@PathParam("id") UUID instanceId, InputStream data) {
ProcessEntry entry = assertProcess(PartialProcessKey.from(instanceId));
if (entry.projectId() == null) {
throw new ConcordApplicationException("Project is required", Status.BAD_REQUEST);
}
ByteArrayOutputStream baos = new ByteArrayOutputStream(1024);
try {
int read;
byte[] buf = new byte[1024];
while ((read = data.read(buf)) > 0) {
baos.write(buf, 0, read);
if (baos.size() > secretStoreCfg.getMaxEncryptedStringLength()) {
throw new ConcordApplicationException("Value too big, limit: " + secretStoreCfg.getMaxEncryptedStringLength(), Status.BAD_REQUEST);
}
}
} catch (IOException e) {
throw new ConcordApplicationException("Error while reading encrypted data: " + e.getMessage(), e);
}
try {
UUID projectId = entry.projectId();
byte[] result = encryptedValueManager.decrypt(projectId, baos.toByteArray());
return Response.ok((StreamingOutput) output -> output.write(result)).build();
} catch (SecurityException e) {
throw new ConcordApplicationException(e.getMessage(), Status.BAD_REQUEST);
} catch (Exception e) {
throw new ConcordApplicationException("Decrypt error: " + e.getMessage());
}
}
Aggregations