private async Task <HttpResponseMessage> CreateJob <TJob>(string jobName, IJobsManager <TJob> jobsManager) where TJob : JobBase, new() { TJob job = null; string errorMessage = null; HttpStatusCode errorStatusCode; // Get the script file name from the content disposition header string scriptFileName = null; HttpContent content = Request.Content; if (content.Headers != null && content.Headers.ContentDisposition != null) { scriptFileName = content.Headers.ContentDisposition.FileName; } if (String.IsNullOrEmpty(scriptFileName)) { return(CreateErrorResponse(HttpStatusCode.BadRequest, Resources.Error_MissingContentDispositionHeader)); } // Clean the file name from quotes and directories scriptFileName = scriptFileName.Trim('"'); scriptFileName = Path.GetFileName(scriptFileName); Stream fileStream = await content.ReadAsStreamAsync(); try { // Upload as a zip if content type is of a zipped file if (content.Headers.ContentType != null && String.Equals(content.Headers.ContentType.MediaType, "application/zip", StringComparison.OrdinalIgnoreCase)) { job = jobsManager.CreateOrReplaceJobFromZipStream(fileStream, jobName); } else { job = jobsManager.CreateOrReplaceJobFromFileStream(fileStream, jobName, scriptFileName); } errorMessage = job.Error; errorStatusCode = HttpStatusCode.BadRequest; } catch (ConflictException) { return(CreateErrorResponse(HttpStatusCode.Conflict, Resources.Error_WebJobAlreadyExists)); } catch (Exception ex) { errorMessage = ex.Message; errorStatusCode = HttpStatusCode.InternalServerError; _tracer.TraceError(ex); } // On error, delete job (if exists) if (errorMessage != null) { await jobsManager.DeleteJobAsync(jobName); return(CreateErrorResponse(errorStatusCode, errorMessage)); } return(Request.CreateResponse(job)); }
private HttpResponseMessage RemoveJob <TJob>(string jobName, IJobsManager <TJob> jobsManager) where TJob : JobBase, new() { jobsManager.DeleteJobAsync(jobName); return(Request.CreateResponse(HttpStatusCode.OK)); }