protected async Task <HttpResponseMessage> ExecuteAsync(int timeoutMs) { var log = new DefaultLogService(); string input = await Request.Content.ReadAsStringAsync(); try { JobsRunner.JobResult result = JobsRunner.Job.RunToCompletion(Path.Combine(basePath, executableName), input, timeoutMs); if (result.Errors.Length > 0) { var contents = new LogContents(null, result.Errors); faultLogger.Add(DateTime.Now, typeof(JobController).Assembly.GetName().Version.ToString(), input, contents); } return(HttpResponses.Json(Request, result.Content)); } catch (System.TimeoutException ex) { RegisterException(faultLogger, log, input, ex); return(HttpResponses.PlainText(Request, "Timeout while waiting for the execution to complete", HttpStatusCode.NoContent)); // status 204 if timeout } catch (Exception ex) { RegisterException(faultLogger, log, input, ex); throw ex; } }
private void RegisterException(IFailureLogger faultLogger, DefaultLogService log, string input, System.Exception ex) { log.LogError(ex.ToString()); var version = typeof(JobController).Assembly.GetName().Version; faultLogger.Add(DateTime.Now, version.ToString(), input, log); }
public SimulationOutput Post([FromBody] SimulationInput input) { var log = new DefaultLogService(); var output = Utilities.RunWithTimeLimit(() => Simulation.Simulate(input), Utilities.GetTimeLimitFromConfig()); if (output.ErrorMessages != null && output.ErrorMessages.Length > 0) { var contents = new LogContents(output.DebugMessages, output.ErrorMessages); faultLogger.Add(DateTime.Now, typeof(JobController).Assembly.GetName().Version.ToString(), input, contents); } return(output); }