示例#1
0
        internal RenderRequest[] PrepareDataForRG_(FrameData result)
        {
            logger_.Verbose("enter");
            ConcurrentDictionary <string, RGridResource> allBlobs = new ConcurrentDictionary <string, RGridResource>();
            HashSet <string> resourceUrls = new HashSet <string>();

            ParseScriptResult_(result, allBlobs, resourceUrls);

            logger_.Verbose("fetching {0} resources...", resourceUrls.Count);

            //Fetch all resources
            FetchAllResources_(allBlobs, resourceUrls);

            logger_.Verbose("done fetching resources.");

            List <RGridResource> written = AddBlobsToCache_(allBlobs);

            logger_.Verbose("written {0} blobs to cache.", written.Count);

            //Create RenderingRequest

            //Parse allBlobs to mapping
            ConcurrentDictionary <string, RGridResource> resourceMapping = new ConcurrentDictionary <string, RGridResource>();

            foreach (KeyValuePair <string, RGridResource> kvp in allBlobs)
            {
                string               urlStr         = SanitizeUrl_(kvp.Key);
                ResourceFuture       resourceFuture = fetchedCacheMap_[urlStr];
                Task <RGridResource> resourceTask   = resourceFuture.Get(TimeSpan.FromSeconds(60));
                RGridResource        resource       = resourceTask.Result;
                resourceMapping.TryAdd(urlStr, resource); // TODO - ITAI
            }

            BuildAllRGDoms_(resourceMapping, result);

            logger_.Verbose("resources count: {0}", resourceMapping.Count);
            logger_.Verbose("cached resources count: {0}", cachedResourceMapping_.Count);

            AppendAllCachedResources_(resourceMapping);

            // Sort mapped resources by their URL for constant, testable results.
            SortedDictionary <string, RGridResource> sortedResourceMapping = new SortedDictionary <string, RGridResource>(resourceMapping);
            List <RenderRequest> allRequestsForRG = BuildRenderRequests_(result, sortedResourceMapping);

            RenderRequest[] asArray = allRequestsForRG.ToArray();

            logger_.Verbose("exit - returning renderRequest array of length: {0}", asArray.Length);
            return(asArray);
        }
示例#2
0
        private ResourceFuture DownloadResourceFuture_(string url)
        {
            logger_.Verbose("Downloading data from {0}", url);
            // If resource is not being fetched yet (limited guarantee)
            IEyesConnector eyesConnector = taskList_?[0].EyesConnector;
            HttpWebRequest request       = WebRequest.CreateHttp(url);

            request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
            request.Proxy     = eyesConnector?.Proxy;
            request.UserAgent = userAgent_.OriginalUserAgentString;
            Task <WebResponse> task   = request.GetResponseAsync();
            ResourceFuture     future = new ResourceFuture(task, new Uri(url), logger_);

            return(future);
        }
示例#3
0
        private List <RGridResource> AddBlobsToCache_(ConcurrentDictionary <string, RGridResource> allBlobs)
        {
            logger_.Verbose("trying to add {0} blobs to cache", allBlobs.Count);
            logger_.Verbose("current fetchedCacheMap size: {0}", fetchedCacheMap_.Count);
            List <RGridResource> unparsedResources = new List <RGridResource>();

            foreach (RGridResource blob in allBlobs.Values)
            {
                Uri            url            = blob.Url;
                ResourceFuture resourceFuture = new ResourceFuture(blob, logger_);
                string         sanitizedUrl   = SanitizeUrl_(url.OriginalString);
                if (fetchedCacheMap_.TryAdd(sanitizedUrl, resourceFuture))
                {
                    logger_.Verbose("Cache write for url - {0} hash:({1})", url, resourceFuture.GetHashCode());
                    unparsedResources.Add(blob);
                }
                else
                {
                    logger_.Verbose("Already cached: url - {0} hash:({1})", url, resourceFuture.GetHashCode());
                }
            }
            return(unparsedResources);
        }