internal IPassthroughAction CreateJobHistoryAction(Uri requestUri, DataAccess.Context.ClusterContainer container,
                                                           string subscriptionId)
        {
            Contract.AssertArgNotNull(requestUri, "requestUri");
            Contract.AssertArgNotNull(requestUri.Segments, "requestUri.Segments");

            var lastSegs =
                requestUri.Segments.SkipWhile(i => i.ToLowerInvariant().Trim('/') != JobSubmissionConstants.ResourceExtentionName)
                .ToList();

            Contract.AssertArgNotNull(lastSegs, "lastSegs");

            //If there is one segment, then we know that no JobId was passed, and we should list job history.
            if (lastSegs.Count() == 1)
            {
                return(new ListJobsPassthroughAction(container, subscriptionId));
            }

            //If there are two segments, then an jobId was passed, and we should get job details.
            if (lastSegs.Count() == 2)
            {
                return(new JobDetailsPassthroughAction(lastSegs.Last().Trim('/'), container, subscriptionId));
            }

            //If zero or more then two segments are present, then the request is invalid, and an action cannot be found to support it.
            throw new PassthroughActionProcessingException(string.Format(JobSubmissionConstants.JobHistoryRequestActionNotFound, container.DnsName, requestUri));
        }
        /// <summary>
        /// Method that get the correct passthrough action based on the given request.
        /// </summary>
        /// <param name="resourceExtension">The resource extention that was requested (ie. "/jobs").</param>
        /// <param name="request">The actual http request.</param>
        /// <param name="container">The container that action should be preformed on.</param>
        /// <param name="subscriptionId">The subscription Id that made the request.</param>
        /// <returns></returns>
        public IPassthroughAction GetPassthroughAction(string resourceExtension, HttpRequestMessage request,
                                                       DataAccess.Context.ClusterContainer container, string subscriptionId)
        {
            Contract.AssertArgNotNull(request, "request");
            Contract.AssertArgNotNull(request.RequestUri, "request.RequestUri");

            switch (resourceExtension.ToLowerInvariant())
            {
            case "jobs":
                switch (request.Method.ToString().ToLowerInvariant())
                {
                case "put":
                    var requestPayload = GetRequestPayload(request);

                    var jobRequest = jobRequestFactory.CreateJobRequest(requestPayload);
                    if (jobRequest == null)
                    {
                        throw new PassthroughActionProcessingException(string.Format(JobSubmissionConstants.InvalidJobRequestLogMessage, requestPayload));
                    }
                    return(CreateJobRequestAction(jobRequest, container, subscriptionId));

                case "get":
                    return(CreateJobHistoryAction(request.RequestUri, container, subscriptionId));
                }
                break;
            }
            throw new PassthroughActionProcessingException(string.Format(JobSubmissionConstants.PassThroughActionCreationFailedLogMessage, resourceExtension, request.Method));
        }
 internal IPassthroughAction CreateJobRequestAction(JobRequest reqeust, DataAccess.Context.ClusterContainer container, string subscriptionId)
 {
     if (reqeust is MapReduceJobRequest)
     {
         return(CreateMapReduceJobRequestAction(reqeust as MapReduceJobRequest, container, subscriptionId));
     }
     if (reqeust is HiveJobRequest)
     {
         return(CreateHiveJobRequestAction(reqeust as HiveJobRequest, container, subscriptionId));
     }
     throw new PassthroughActionProcessingException(string.Format(JobSubmissionConstants.JobRequestActionNotFound, container.DnsName, UtilsHelper.SerializeToJson(reqeust)));
 }
        internal string CreateJobFolder(DataAccess.Context.ClusterContainer container)
        {
            Contract.AssertArgNotNull(container, "container");
            Contract.AssertArgNotNull(container.Deployment, "container.Deployment");
            Contract.AssertArgNotNull(container.Deployment.ASVAccounts, "container.Deployment.ASVAccounts");

            var asvAccount = container.Deployment.ASVAccounts.FirstOrDefault();

            Contract.AssertArgNotNull(asvAccount, "asvAccount");

            var jobFolder = Guid.NewGuid().ToString();

            return(string.Format(JobSubmissionConstants.AsvFormatString, JobSubmissionConstants.DefaultJobsContainer,
                                 asvAccount.AccountName, jobFolder));
        }
        /// <inheritdocs/>
        public IClusterJobServiceProxy CreateClusterJobServiceProxy(DataAccess.Context.ClusterContainer container)
        {
            Contract.AssertArgNotNull(container, "container");
            Contract.AssertArgNotNull(container.Deployment, "container.Deployment");

            var clusterAddress =
                string.Format(
                    "https://{0}:{1}",
                    container.CNameMapping ?? string.Format(Constants.CNameMappingFormatString, container.DnsName),
                    WebHCatResources.WebHCatDefaultPort);

            if (!string.IsNullOrEmpty(container.CNameMapping))
            {
                Log.LogResourceExtensionEvent(container.SubscriptionId, JobSubmissionConstants.ResourceExtentionName,
                                              container.DnsName,
                                              string.Format(
                                                  JobSubmissionConstants.BypassServerCertValidationLogMessage,
                                                  clusterAddress), TraceEventType.Information);
            }

            return(new ClusterJobServiceProxy(clusterAddress, container.Deployment.ClusterUsername, container.Deployment.GetClearTextClusterPassword(), !string.IsNullOrEmpty(container.CNameMapping)));
        }
Exemplo n.º 6
0
 /// <summary>
 /// Ctor.
 /// </summary>
 public ListJobsPassthroughAction(DataAccess.Context.ClusterContainer container, string subscriptionId)
     : base(container, subscriptionId)
 {
 }
        /// <summary>
        /// Ctor.
        /// </summary>
        protected JobRequestPassthroughAction(DataAccess.Context.ClusterContainer container, string subscriptionId) : base(subscriptionId)
        {
            Contract.AssertArgNotNull(container, "container");

            Container = container;
        }
 /// <summary>
 /// Ctor.
 /// </summary>
 public HiveJobRequestPassthroughAction(DataAccess.Context.ClusterContainer container, string subscriptionId)
     : base(container, subscriptionId)
 {
 }
 /// <summary>
 /// Ctor.
 /// </summary>
 public JobDetailsPassthroughAction(string jobId, DataAccess.Context.ClusterContainer container, string subscriptionId)
     : base(container, subscriptionId)
 {
     Contract.AssertArgNotNullOrEmpty(jobId, "jobId");
     this.jobId = jobId;
 }
 internal HiveJobRequestPassthroughAction CreateHiveJobRequestAction(HiveJobRequest request, DataAccess.Context.ClusterContainer container, string subscriptionId)
 {
     //TODO: Create/generate the job folder.
     //This is ok for now. When we start listing jobs we'll need to fix this.
     return(new HiveJobRequestPassthroughAction(container, subscriptionId)
     {
         Query = request.Query,
         Parameters = request.Parameters,
         Resources = request.Resources
     });
 }
 internal MapReduceJobRequestPassthroughAction CreateMapReduceJobRequestAction(MapReduceJobRequest request, DataAccess.Context.ClusterContainer container, string subscriptionId)
 {
     //TODO: Create/generate the job folder.
     //This is ok for now. When we start listing jobs we'll need to fix this.
     return(new MapReduceJobRequestPassthroughAction(container, subscriptionId)
     {
         Arguments = request.Arguments,
         ClassName = request.ApplicationName,
         JarFile = request.JarFile,
         Parameters = request.Parameters,
         Resources = request.Resources
     });
 }