Exemplo n.º 1
0
        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));
        }
Exemplo n.º 2
0
 private HttpResponseMessage RemoveJob <TJob>(string jobName, IJobsManager <TJob> jobsManager) where TJob : JobBase, new()
 {
     jobsManager.DeleteJobAsync(jobName);
     return(Request.CreateResponse(HttpStatusCode.OK));
 }