Example #1
0
        public void PopulateWarmupSettings()
        {
            this.SiteSettings = new List <WarmupSiteSetting>();
            try
            {
                var warmupSettingsFolderItem = Sitecore.Context.Database.GetItem(SitecoreSystemSettingsWarmupWarmupSettings);
                foreach (var siteSettingItem in warmupSettingsFolderItem.GetChildren()
                         .Cast <Data.Items.Item>().ToArray())
                {
                    var siteSetting = new WarmupSiteSetting
                    {
                        Sitename = siteSettingItem.Fields[FieldName]?.Value.ToString(),
                        SitemapDownloadTimeout   = string.IsNullOrEmpty(siteSettingItem.Fields[SitemapDownloadTimeout]?.Value) ? 3600 : System.Convert.ToInt32(siteSettingItem.Fields[SitemapDownloadTimeout]?.Value),
                        PercentageOfSiteToWarmup = string.IsNullOrEmpty(siteSettingItem.Fields[PercentageOfSiteToWarmUp]?.Value) ? 100 : System.Convert.ToInt32(siteSettingItem.Fields[PercentageOfSiteToWarmUp]?.Value),
                        SitemapURL = siteSettingItem.Fields[SitemapUrl]?.Value.ToString(),
                        OnlyVisitUrlsContainsTheFollowingKeywords = siteSettingItem.Fields[OnlyVisitUrlsContainsTheFollowingKeywords]?.Value.ToString(),
                        VerboseLogging = ((Data.Fields.CheckboxField)siteSettingItem.Fields[VerboseLogging]).Checked
                    };

                    Data.Fields.MultilistField warmupItemsField = siteSettingItem.Fields[WarmupItems];
                    siteSetting.WarmupItems = warmupItemsField.GetItems().ToList();

                    this.SiteSettings.Add(siteSetting);
                }
            }
            catch (Exception e)
            {
                var message = WarmupThereWasAnErrorWhileRetrievingTheWarmupSettings + e.Message;
                Diagnostics.Log.Error(message, this);
            }
        }
Example #2
0
 private void LogMessage(string message, WarmupSiteSetting siteSetting)
 {
     //TODO : use setting from site
     if (siteSetting == null)
     {
         Diagnostics.Log.Info("Warmup : " + message, this);
     }
     else
     {
         Diagnostics.Log.Info($"Warmup {siteSetting.Sitename} : " + message, this);
     }
 }
Example #3
0
        private static bool CheckKeyword(WarmupSiteSetting siteSetting, string url)
        {
            if (string.IsNullOrEmpty(siteSetting.OnlyVisitUrlsContainsTheFollowingKeywords))
            {
                return(true);
            }

            var keywords = siteSetting?.OnlyVisitUrlsContainsTheFollowingKeywords?.Split(new char[] { '|' });

            var containsKeyword = keywords.Any(url.Contains);

            return(containsKeyword);
        }
Example #4
0
        private string StartWarmupSiteJob(WarmupSiteSetting siteSetting)
        {
            siteSetting.WarmingUp = true;
            siteSetting.WarmedUp  = false;

            var options = new DefaultJobOptions(JobName + " - " + siteSetting.Sitename,
                                                JobName,
                                                siteSetting.Sitename,
                                                this,
                                                "WarmupSiteStart",
                                                new object[] { siteSetting });

            JobManager.Start(options);
            return(JobName);
        }
Example #5
0
        private void WarmupSiteStart(WarmupSiteSetting siteSetting)
        {
            try
            {
                //Are we warming up any specific items
                if (siteSetting.WarmupItems.Any())
                {
                    var siteInfo = Sitecore.Configuration.Factory.GetSiteInfoList()
                                   .FirstOrDefault(x =>
                                                   string.Equals(x.Name, siteSetting.Sitename, StringComparison.CurrentCultureIgnoreCase));

                    if (siteInfo != null)
                    {
                        var siteContext = Sitecore.Configuration.Factory.GetSite(siteInfo.Name);

                        using (new SiteContextSwitcher(siteContext))
                        {
                            WarmupItems(siteSetting.WarmupItems, siteSetting);
                        }
                    }
                }

                /*
                 * Credit to Elena Mosoff for sitemap processing idea :)
                 */

                //Are we warming up by Site map
                if (!string.IsNullOrEmpty(siteSetting.SitemapURL))
                {
                    WarmupSitemap(siteSetting);
                }
            }
            catch (Exception e)
            {
                //TODO : If there is a error we mark the CD as warm, perhaps this should be an option
                LogMessage($"Could not finish warming job {e.Message}", siteSetting);
            }
            finally
            {
                siteSetting.WarmingUp = false;
                siteSetting.WarmedUp  = true;
                LogMessage($"Finished at {DateTime.Now}", siteSetting);
            }
        }
Example #6
0
        private void WarmupItems(IEnumerable <Item> items, WarmupSiteSetting siteSetting)
        {
            foreach (var item in items)
            {
                var probe = item.DisplayName;

                if (siteSetting.VerboseLogging)
                {
                    LogMessage($"Item {item.Paths.FullPath} retrieved", siteSetting);
                }

                if (!item.HasChildren)
                {
                    continue;
                }

                var childrenItems = item.GetChildren()
                                    .Cast <Item>().ToArray();

                WarmupItems(childrenItems, siteSetting);
            }
        }
Example #7
0
        private void WarmupSitemap(WarmupSiteSetting siteSetting)
        {
            var baseUrl = siteSetting.SitemapURL;
            var wc      = new LargeWebClient(siteSetting.SitemapDownloadTimeout)
            {
                Encoding = System.Text.Encoding.UTF8
            };

            LogMessage($"Download site map started at {DateTime.Now}", siteSetting);
            var reply = wc.DownloadString(baseUrl);

            LogMessage($"Download site map ended at {DateTime.Now}", siteSetting);

            var urlDoc = new XmlDocument();

            urlDoc.LoadXml(reply);

            var xnList = urlDoc.GetElementsByTagName("url");

            var totalNodes     = xnList.Count;
            var nodesToProcess = (totalNodes * siteSetting.PercentageOfSiteToWarmup) / 100;
            var nodesProcessed = 0;

            LogMessage($"Starting to warm up using site map, {siteSetting.PercentageOfSiteToWarmup}% of {totalNodes} nodes equals {nodesToProcess}, started at {DateTime.Now}", siteSetting);

            foreach (XmlNode node in xnList)
            {
                if (nodesProcessed >= nodesToProcess)
                {
                    break;
                }

                var client = new HttpClient();
                var url    = node["loc"]?.InnerText;

                if (!CheckKeyword(siteSetting, url))
                {
                    if (siteSetting.VerboseLogging)
                    {
                        LogMessage($"URL {url} does not contain any of the keywords, skipped", siteSetting);
                    }

                    continue;
                }

                if (siteSetting.VerboseLogging)
                {
                    LogMessage($"Visiting URL {url} started at {DateTime.Now}", siteSetting);
                }

                try
                {
                    var content = wc.DownloadString(url);
                }
                catch (Exception e)
                {
                    LogMessage($"Could not visit {url} error {e.Message}", siteSetting);
                }

                if (siteSetting.VerboseLogging)
                {
                    LogMessage($"Visiting URL {url} completed at {DateTime.Now}", siteSetting);
                }

                nodesProcessed++;
            }

            LogMessage($"Ending warm up using site map started at {DateTime.Now}", siteSetting);
        }