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);
        }