public async Task <AsyncJobState> CreateAsyncJobState(AsyncJob job) { AsyncJobState state = new AsyncJobState() { success = false, wait = job.wait }; if (state.wait <= 0) { state.wait = 5; } switch (job.type.ToLower()) { case "athena": { state.type = "Athena"; string sql = job.query; state.id = await awsAthenaAPI.StartQuery(sql); Console.WriteLine($"Athena Query:\n" + sql); } break; case "batch": { state.type = "Batch"; string json = job.query; BatchPayload payload = JsonConvert.DeserializeObject <BatchPayload>(json); state.id = await awsBatchAPI.SubmitJobAndGetID(payload.name, payload.job, payload.queue, payload.parameters); Console.WriteLine($"Batch Job(Name -> {payload.name}, Job -> {payload.job}, Queue -> {payload.queue}\n" + JsonConvert.SerializeObject(payload.parameters)); } break; } return(state); }
public async Task <AsyncJobState> CheckAsyncJobState(AsyncJobState state) { Console.WriteLine($"CheckAsyncJob: {state.type}"); switch (state.type.ToLower()) { case "athena": { var client = awsAthenaAPI.AthenaClient; var response = await client.GetQueryExecutionAsync(new GetQueryExecutionRequest() { QueryExecutionId = state.id }); var executionState = response.QueryExecution.Status.State; state.state = response.QueryExecution.Status.State.Value; state.error = response.QueryExecution.Status.StateChangeReason; if (executionState == QueryExecutionState.SUCCEEDED) { state.success = true; var queryResult = await client.GetQueryResultsAsync(new GetQueryResultsRequest() { QueryExecutionId = state.id, MaxResults = 2 }); if (queryResult.ResultSet.Rows.Count > 1) { var cell = queryResult.ResultSet.Rows[1].Data[0].VarCharValue; long intValue = 0L; if (long.TryParse(cell, out intValue)) { state.intValue = intValue; } if (!string.IsNullOrWhiteSpace(cell)) { string boolValue = cell.ToLower(); state.boolValue = (boolValue != "false"); } state.strValue = cell; Console.WriteLine($"Query: {response.QueryExecution.Query}"); Console.WriteLine($"intValue: {state.intValue}, boolValue: {state.boolValue}, strValue: {state.strValue}"); } } } break; case "batch": { var client = awsBatchAPI.BatchClient; var response = await client.DescribeJobsAsync(new DescribeJobsRequest() { Jobs = new List <string>() { state.id } }); var jobDetail = response.Jobs[0]; state.error = jobDetail.StatusReason; state.state = jobDetail.Status.Value; switch (state.state) { case "SUCCEEDED": state.success = true; break; case "FAILED": state.success = false; break; case "SUBMITTED": case "PENDING": case "RUNNABLE": case "RUNNING": state.state = "RUNNING"; state.success = false; break; } } break; } Console.WriteLine($"StatusReason: {state.error}"); Console.WriteLine($"State: {state.state}"); return(state); }