public void AddEvent(int x, int y, int width)
        {
            PageEventDefinitionManager manager = (PageEventDefinitionManager)ServiceLocator.ServiceProvider.GetDefinitionManagerFactory().GetDefinitionManager <IPageEventDefinition>();

            CultureInfo eventCulture        = new CultureInfo("en");
            var         pageEventDefinition = manager.GetByAlias("Heatmap", eventCulture);

            if (pageEventDefinition == null)
            {
                // define
                Guid        pageEventId      = Guid.NewGuid();        // Page event ID
                CultureInfo pageEventCulture = new CultureInfo("en"); // Page event culture
                string      pageEventName    = "Heatmap";             // Page event name
                DateTime    creationDate     = DateTime.UtcNow;       // Page event creation date
                string      createdBy        = "sitecore\admin";      // Page event creator

                pageEventDefinition = new PageEventDefinition(pageEventId, "Heatmap", pageEventCulture, pageEventName, creationDate, createdBy);

                pageEventDefinition.ShowInXfileAsLatestEvent = true;
                pageEventDefinition.ShowInXfileEventsList    = true;
                pageEventDefinition.EngagementValuePoints    = 20;

                //save
                ServiceLocator.ServiceProvider.GetDefinitionManagerFactory().GetDefinitionManager <IPageEventDefinition>();

                manager.SaveAsync(pageEventDefinition, true);
            }


            //pageEventDefinition.
            //Sitecore.Analytics.Tracker.Current.CurrentPage.RegisterPageEvent(pageEventDefinition);


            //var goalId = "63B813A6-C209-4870-A4A8-7CB07BBAB266"; // ID of goal
            //var goalDefinition = Sitecore.Analytics.Tracker.MarketingDefinitions.Goals[goalId];
            //Sitecore.Analytics.Tracker.Current.CurrentPage.RegisterGoal(goalDefinition);

            PageEventData pageEvent = new PageEventData("Heatmap")
            {
                Text = "test",
                Data = "test data"
            };

            Sitecore.Analytics.Tracker.Current.CurrentPage.Register(pageEvent);



            var pageEventData = new PageEventData(pageEventDefinition.Alias, pageEventDefinition.Id)
            {
                Data = "xyw",
                Text = "Sitecore installation guide", // Not mandatory
            };

            Tracker.Current.CurrentPage.Register(pageEventData);



            //var ev = Sitecore.Analytics.Tracker.MarketingDefinitions.PageEvents[HeatmapEvent.HeatmapId];


            //if (ev != null)
            //{
            //    var pageData = new Sitecore.Analytics.Data.PageEventData(ev.Alias, ev.Id);

            //    pageData.CustomValues.Add("X", x);
            //    pageData.CustomValues.Add("Y", y);
            //    pageData.CustomValues.Add("Width", width);

            //    Sitecore.Analytics.Tracker.Current.CurrentPage.Register(pageData);
            //}
        }
        /// <summary>
        /// Sets the Goal Met
        /// </summary>
        /// <param name="currentItem"></param>
        /// <param name="linkedItem"></param>
        /// <param name="goalItem"></param>
        /// <param name="visitId"></param>
        /// <param name="visitorId"></param>
        /// <returns></returns>
        public bool SetGoalMet(Item currentItem, Item linkedItem, Item goalItem, Guid visitId, Guid visitorId)
        {
            try
            {
                using (AnalyticsDataContext AnalyticsDataContext = new AnalyticsDataContext(ConfigurationManager.ConnectionStrings["analytics"].ConnectionString))
                {
                    //check to see if page exists
                    Page currentPage = AnalyticsDataContext.Pages.Where(x => x.ItemId == currentItem.ID.Guid && x.VisitId == visitId).FirstOrDefault();
                    if (currentPage == null)
                    {
                        Logger.Error("Page Statistics Context - Could not retrieve page");
                        return(false);
                    }

                    PageEventDefinition pageEventDefinition = AnalyticsDataContext.PageEventDefinitions.Where(x => x.Name == goalItem.Name).FirstOrDefault();
                    if (pageEventDefinition == null)
                    {
                        Logger.Error("Page Statistics Context - Could not retrieve page event definition: " + goalItem.Name);
                        return(false);
                    }

                    //verify there is not already a page event
                    PageEvent existantPageEvent = AnalyticsDataContext.PageEvents.
                                                  Where(x => x.VisitId == visitId &&
                                                        x.PageId == currentPage.PageId &&
                                                        x.PageEventDefinitionId == pageEventDefinition.PageEventDefinitionId &&
                                                        x.ItemId == linkedItem.ID.Guid).FirstOrDefault();

                    if (existantPageEvent != null)
                    {
                        Logger.Warn("Page Statistics Context - Page event already exists");
                        return(false);
                    }

                    //insert page event
                    try
                    {
                        Guid pageEventId = Guid.NewGuid();

                        PageEvent pageEvent = new PageEvent();
                        pageEvent.PageEventId           = pageEventId;
                        pageEvent.VisitId               = visitId;
                        pageEvent.VisitorId             = visitorId;
                        pageEvent.PageEventDefinitionId = pageEventDefinition.PageEventDefinitionId;
                        pageEvent.PageEventDefinition   = pageEventDefinition;
                        pageEvent.PageId           = currentPage.PageId;
                        pageEvent.Page             = currentPage;
                        pageEvent.ItemId           = linkedItem.ID.Guid;
                        pageEvent.IntegrationId    = Guid.Empty;
                        pageEvent.DataKey          = linkedItem.Paths.FullPath;
                        pageEvent.DateTime         = DateTime.Now.ToUniversalTime();
                        pageEvent.DataCode         = 0;
                        pageEvent.CustomSorting    = 0;
                        pageEvent.IntegrationLabel = string.Empty;
                        pageEvent.Data             = string.Empty;
                        pageEvent.Timestamp        = 634891148665341607;
                        pageEvent.Text             = string.Empty;

                        AnalyticsDataContext.PageEvents.InsertOnSubmit(pageEvent);
                        AnalyticsDataContext.SubmitChanges();
                    }
                    catch (Exception ex)
                    {
                        Logger.Error("Page Statistics Context - Could not create page record");
                        Logger.Error(ex.Message);
                        Logger.Error(ex.InnerException);
                    }
                }
            }
            catch (Exception e)
            {
                Logger.Error("Page Statistics Context - Could not set goal met");
                Logger.Error(e.Message);
                Logger.Error(e.InnerException);
            }

            return(false);
        }