use of co.cask.cdap.proto.RunRecord in project cdap by caskdata.
the class LogHandlerTestRun method testNextRunId.
private void testNextRunId(String appId, String entityType, String entityId, String namespace, String format, List<String> suppress) throws Exception {
ProgramId programId = new NamespaceId(namespace).app(appId).program(ProgramType.valueOfCategoryName(entityType), entityId);
RunRecord runRecord = mockLogReader.getRunRecord(programId);
int expectedEvents = 20;
if (runRecord.getStatus() == ProgramRunStatus.RUNNING || runRecord.getStatus() == ProgramRunStatus.SUSPENDED) {
expectedEvents = 30;
}
String nextNoFromUrl;
if (suppress.isEmpty()) {
nextNoFromUrl = String.format("apps/%s/%s/%s/runs/%s/logs/next?format=%s&max=100", appId, entityType, entityId, runRecord.getPid(), format);
} else {
String fieldsToSuppress = getSuppressStr(suppress);
nextNoFromUrl = String.format("apps/%s/%s/%s/runs/%s/logs/next?format=%s&max=100&suppress=%s", appId, entityType, entityId, runRecord.getPid(), format, fieldsToSuppress);
}
HttpResponse response = doGet(getVersionedAPIPath(nextNoFromUrl, namespace));
verifyLogs(response, entityId, format, true, false, true, expectedEvents, 20, suppress);
}
use of co.cask.cdap.proto.RunRecord in project cdap by caskdata.
the class LogHandlerTestRun method testWorkflowRunLogs.
@Test
public void testWorkflowRunLogs() throws Exception {
ProgramId workflowId = MockLogReader.SOME_WORKFLOW_APP.workflow(MockLogReader.SOME_WORKFLOW);
RunRecord runRecord = mockLogReader.getRunRecord(workflowId);
List<LogLine> logLines = getLogs(MockLogReader.TEST_NAMESPACE, MockLogReader.SOME_WORKFLOW_APP.getApplication(), "workflows", MockLogReader.SOME_WORKFLOW, runRecord.getPid(), "next");
Assert.assertEquals(320, logLines.size());
// First 80 lines correspond to the Workflow
String log = logLines.get(5).getLog();
Assert.assertTrue(log.contains(MockLogReader.SOME_WORKFLOW));
Assert.assertFalse(log.contains(MockLogReader.SOME_MAPREDUCE));
Assert.assertFalse(log.contains(MockLogReader.SOME_SPARK));
// Lines 81-160 corresponds to MapReduce
log = logLines.get(85).getLog();
Assert.assertFalse(log.contains(MockLogReader.SOME_WORKFLOW));
Assert.assertTrue(log.contains(MockLogReader.SOME_MAPREDUCE));
Assert.assertFalse(log.contains(MockLogReader.SOME_SPARK));
// Lines 161-240 corresponds to Spark
log = logLines.get(165).getLog();
Assert.assertFalse(log.contains(MockLogReader.SOME_WORKFLOW));
Assert.assertFalse(log.contains(MockLogReader.SOME_MAPREDUCE));
Assert.assertTrue(log.contains(MockLogReader.SOME_SPARK));
ProgramId mapReduceId = MockLogReader.SOME_WORKFLOW_APP.mr(MockLogReader.SOME_MAPREDUCE);
runRecord = mockLogReader.getRunRecord(mapReduceId);
logLines = getLogs(MockLogReader.TEST_NAMESPACE, MockLogReader.SOME_WORKFLOW_APP.getApplication(), "mapreduce", MockLogReader.SOME_MAPREDUCE, runRecord.getPid(), "next");
// Only 80 lines should correspond to MapReduce
Assert.assertEquals(80, logLines.size());
log = logLines.get(10).getLog();
Assert.assertFalse(log.contains(MockLogReader.SOME_WORKFLOW));
Assert.assertTrue(log.contains(MockLogReader.SOME_MAPREDUCE));
Assert.assertFalse(log.contains(MockLogReader.SOME_SPARK));
ProgramId sparkId = MockLogReader.SOME_WORKFLOW_APP.spark(MockLogReader.SOME_SPARK);
runRecord = mockLogReader.getRunRecord(sparkId);
logLines = getLogs(MockLogReader.TEST_NAMESPACE, MockLogReader.SOME_WORKFLOW_APP.getApplication(), "spark", MockLogReader.SOME_SPARK, runRecord.getPid(), "next");
// Only 80 lines should correspond to Spark
Assert.assertEquals(80, logLines.size());
log = logLines.get(15).getLog();
Assert.assertFalse(log.contains(MockLogReader.SOME_WORKFLOW));
Assert.assertFalse(log.contains(MockLogReader.SOME_MAPREDUCE));
Assert.assertTrue(log.contains(MockLogReader.SOME_SPARK));
}
use of co.cask.cdap.proto.RunRecord in project cdap by caskdata.
the class LogHandlerTestRun method testLogsRunId.
private void testLogsRunId(String appId, String entityType, String entityId, String namespace, String format, List<String> suppress) throws Exception {
ProgramId programId = new NamespaceId(namespace).app(appId).program(ProgramType.valueOfCategoryName(entityType), entityId);
RunRecord runRecord = mockLogReader.getRunRecord(programId);
int expectedEvents = 20;
if (runRecord.getStatus() == ProgramRunStatus.RUNNING || runRecord.getStatus() == ProgramRunStatus.SUSPENDED) {
expectedEvents = 30;
}
long startTime = MockLogReader.getMockTimeSecs(0);
long stopTime = MockLogReader.getMockTimeSecs(100);
String nextNoFromUrl;
if (suppress.isEmpty()) {
nextNoFromUrl = String.format("apps/%s/%s/%s/runs/%s/logs?format=%s&start=%s&stop=%s", appId, entityType, entityId, runRecord.getPid(), format, startTime, stopTime);
} else {
String fieldsToSuppress = getSuppressStr(suppress);
nextNoFromUrl = String.format("apps/%s/%s/%s/runs/%s/logs?format=%s&start=%s&stop=%s&suppress=%s", appId, entityType, entityId, runRecord.getPid(), format, startTime, stopTime, fieldsToSuppress);
}
HttpResponse response = doGet(getVersionedAPIPath(nextNoFromUrl, namespace));
verifyLogs(response, entityId, format, true, true, true, expectedEvents, 20, suppress);
}
use of co.cask.cdap.proto.RunRecord in project cdap by caskdata.
the class ProgramClient method getProgramRuns.
/**
* Gets the run records of a program.
*
* @param program the program
* @param state - filter by status of the program
* @return the run records of the program
* @throws IOException if a network error occurred
* @throws NotFoundException if the application or program could not be found
* @throws UnauthenticatedException if the request is not authorized successfully in the gateway server
*/
public List<RunRecord> getProgramRuns(ProgramId program, String state, long startTime, long endTime, int limit) throws IOException, NotFoundException, UnauthenticatedException, UnauthorizedException {
String queryParams = String.format("%s=%s&%s=%d&%s=%d&%s=%d", Constants.AppFabric.QUERY_PARAM_STATUS, state, Constants.AppFabric.QUERY_PARAM_START_TIME, startTime, Constants.AppFabric.QUERY_PARAM_END_TIME, endTime, Constants.AppFabric.QUERY_PARAM_LIMIT, limit);
String path = String.format("apps/%s/versions/%s/%s/%s/runs?%s", program.getApplication(), program.getVersion(), program.getType().getCategoryName(), program.getProgram(), queryParams);
URL url = config.resolveNamespacedURLV3(program.getNamespaceId(), path);
HttpResponse response = restClient.execute(HttpMethod.GET, url, config.getAccessToken(), HttpURLConnection.HTTP_NOT_FOUND);
if (response.getResponseCode() == HttpURLConnection.HTTP_NOT_FOUND) {
throw new NotFoundException(program);
}
return ObjectResponse.fromJsonBody(response, new TypeToken<List<RunRecord>>() {
}).getResponseObject();
}
use of co.cask.cdap.proto.RunRecord in project cdap by caskdata.
the class WorkflowHttpHandlerTest method testWorkflowToken.
@Test
@SuppressWarnings("ConstantConditions")
public void testWorkflowToken() throws Exception {
Assert.assertEquals(200, deploy(AppWithWorkflow.class).getStatusLine().getStatusCode());
Id.Application appId = Id.Application.from(Id.Namespace.DEFAULT, AppWithWorkflow.NAME);
final Id.Workflow workflowId = Id.Workflow.from(appId, AppWithWorkflow.SampleWorkflow.NAME);
String outputPath = new File(tmpFolder.newFolder(), "output").getAbsolutePath();
startProgram(workflowId, ImmutableMap.of("inputPath", createInput("input"), "outputPath", outputPath));
Tasks.waitFor(1, new Callable<Integer>() {
@Override
public Integer call() throws Exception {
return getProgramRuns(workflowId, ProgramRunStatus.COMPLETED.name()).size();
}
}, 60, TimeUnit.SECONDS);
List<RunRecord> programRuns = getProgramRuns(workflowId, ProgramRunStatus.COMPLETED.name());
Assert.assertEquals(1, programRuns.size());
RunRecord runRecord = programRuns.get(0);
String pid = runRecord.getPid();
// Verify entire worfklow token
WorkflowTokenDetail workflowTokenDetail = getWorkflowToken(workflowId, pid, null, null);
List<WorkflowTokenDetail.NodeValueDetail> nodeValueDetails = workflowTokenDetail.getTokenData().get(AppWithWorkflow.DummyAction.TOKEN_KEY);
Assert.assertEquals(2, nodeValueDetails.size());
Assert.assertEquals(AppWithWorkflow.SampleWorkflow.FIRST_ACTION, nodeValueDetails.get(0).getNode());
Assert.assertEquals(AppWithWorkflow.SampleWorkflow.SECOND_ACTION, nodeValueDetails.get(1).getNode());
Assert.assertEquals(AppWithWorkflow.DummyAction.TOKEN_VALUE, nodeValueDetails.get(0).getValue());
Assert.assertEquals(AppWithWorkflow.DummyAction.TOKEN_VALUE, nodeValueDetails.get(1).getValue());
// Verify entire workflow token by passing in the scope and key in the request
workflowTokenDetail = getWorkflowToken(workflowId, pid, WorkflowToken.Scope.USER, AppWithWorkflow.DummyAction.TOKEN_KEY);
nodeValueDetails = workflowTokenDetail.getTokenData().get(AppWithWorkflow.DummyAction.TOKEN_KEY);
Assert.assertEquals(2, nodeValueDetails.size());
Assert.assertEquals(AppWithWorkflow.SampleWorkflow.FIRST_ACTION, nodeValueDetails.get(0).getNode());
Assert.assertEquals(AppWithWorkflow.SampleWorkflow.SECOND_ACTION, nodeValueDetails.get(1).getNode());
Assert.assertEquals(AppWithWorkflow.DummyAction.TOKEN_VALUE, nodeValueDetails.get(0).getValue());
Assert.assertEquals(AppWithWorkflow.DummyAction.TOKEN_VALUE, nodeValueDetails.get(1).getValue());
// Get workflow level tokens
WorkflowTokenNodeDetail nodeDetail = getWorkflowToken(workflowId, pid, AppWithWorkflow.SampleWorkflow.NAME, WorkflowToken.Scope.USER, null);
Map<String, String> tokenData = nodeDetail.getTokenDataAtNode();
Assert.assertEquals(2, tokenData.size());
Assert.assertEquals(AppWithWorkflow.SampleWorkflow.INITIALIZE_TOKEN_VALUE, tokenData.get(AppWithWorkflow.SampleWorkflow.INITIALIZE_TOKEN_KEY));
Assert.assertEquals(AppWithWorkflow.SampleWorkflow.DESTROY_TOKEN_SUCCESS_VALUE, tokenData.get(AppWithWorkflow.SampleWorkflow.DESTROY_TOKEN_KEY));
// Verify workflow token at a given node
WorkflowTokenNodeDetail tokenAtNode = getWorkflowToken(workflowId, pid, AppWithWorkflow.SampleWorkflow.FIRST_ACTION, null, null);
Map<String, String> tokenDataAtNode = tokenAtNode.getTokenDataAtNode();
Assert.assertEquals(1, tokenDataAtNode.size());
Assert.assertEquals(AppWithWorkflow.DummyAction.TOKEN_VALUE, tokenDataAtNode.get(AppWithWorkflow.DummyAction.TOKEN_KEY));
// Verify workflow token at a given node by passing in a scope and a key
tokenAtNode = getWorkflowToken(workflowId, pid, AppWithWorkflow.SampleWorkflow.FIRST_ACTION, WorkflowToken.Scope.USER, AppWithWorkflow.DummyAction.TOKEN_KEY);
tokenDataAtNode = tokenAtNode.getTokenDataAtNode();
Assert.assertEquals(1, tokenDataAtNode.size());
Assert.assertEquals(AppWithWorkflow.DummyAction.TOKEN_VALUE, tokenDataAtNode.get(AppWithWorkflow.DummyAction.TOKEN_KEY));
}
Aggregations