Beispiel #1
0
        public IActionResult Index()
        {
            string ip    = "";
            var    model = new PortraitModel();

            //если нет ip, то ничего еще не готово
            if (HttpContext.Session.Keys.Contains("ipAddress"))
            {
                ip = HttpContext.Session.GetString("ipAddress");
                if (HttpContext.Session.Keys.Contains("sessionId"))
                {
                    var sessionId       = HttpContext.Session.GetString("sessionId");
                    var portraitService = new PortraitService();

                    model = portraitService.GetPortrait(ip, Guid.Parse(sessionId), model);
                    model.IsModelReady = true;
                }
                else
                {
                    model.IsModelReady = false;
                }
            }
            else
            {
                model.IsModelReady = false;
            }

            return(View(model));
        }
Beispiel #2
0
        /// <summary>
        /// Приватный метод, работающий над заполнением модели портрета пользователя
        /// </summary>
        private PortraitModel CreatePortrait(string ip, Guid sessionId, PortraitModel model)
        {
            try {
                //ip-адрес
                model.Ip = ip;

                using (var spyDB = new SpyContext()) {
                    //смотрим текущий браузер
                    try {
                        var browser = spyDB.Browsers.Where(x => x.UserId == ip)
                                      .OrderByDescending(x => x.Date)
                                      .ToList();

                        if (browser != null && browser.Count() != 0)
                        {
                            model.Browser = browser[0].Browser;
                        }
                    } catch (Exception ex) {
                        SiteService.WriteError(ex.Message, ex.Source, ex.StackTrace);
                    }


                    //предыдущие браузеры
                    try {
                        var previousBrowsers = spyDB.Browsers.Where(x => x.UserId == ip).ToList();
                        previousBrowsers.ForEach(x => model.PreviousBrowsers.Add(x.Browser));
                    } catch (Exception ex) {
                        SiteService.WriteError(ex.Message, ex.Source, ex.StackTrace);
                    }


                    //геолокация
                    try {
                        var currentGeolocation = spyDB.Geolocations.Where(x => x.UserId == ip).OrderByDescending(x => x.Date).ToList();
                        if (currentGeolocation != null && currentGeolocation.Count() != 0)
                        {
                            model.Geolocation = currentGeolocation[0].Location;
                        }
                    } catch (Exception ex) {
                        SiteService.WriteError(ex.Message, ex.Source, ex.StackTrace);
                    }

                    //время данного сеанса
                    try {
                        var thisSessionHistory = spyDB.ExitLog.Where(x => x.UserId == ip && x.SessionId == sessionId).ToList();

                        //и сразу историю сеанса
                        foreach (var page in thisSessionHistory)
                        {
                            model.SpendedTime += page.Time;
                            thisSessionHistory.OrderBy(x => x.Date);
                            model.History.Add(new HistoryClass {
                                Page = page.Page, Time = page.Time, Date = page.Date
                            });
                        }
                    } catch (Exception ex) {
                        SiteService.WriteError(ex.Message, ex.Source, ex.StackTrace);
                    }

                    //среднее время загрузки страниц
                    try {
                        var loads         = spyDB.PageLoadTimeLog.Where(x => x.UserId == ip && x.SessionId == sessionId).ToList();
                        int totalLoadTime = 0;

                        loads.ForEach(x => totalLoadTime += x.Time);
                        model.AverageLoadTime             = totalLoadTime / (loads.Count + 1);
                    } catch (Exception ex) {
                        SiteService.WriteError(ex.Message, ex.Source, ex.StackTrace);
                    }

                    //количество потерь фокуса
                    try {
                        var losts = spyDB.PageLoadTimeLog.Where(x => x.UserId == ip && x.SessionId == sessionId).ToList();

                        model.FocusLostCount = losts.Count - model.History.Count;
                    } catch (Exception ex) {
                        SiteService.WriteError(ex.Message, ex.Source, ex.StackTrace);
                    }

                    //количество просмотренных картинок
                    try {
                        var views = spyDB.Pics.Where(x => x.UserId == ip && x.SessionId == sessionId).ToList();

                        model.PicsViewed = views.Count;
                    } catch (Exception ex) {
                        SiteService.WriteError(ex.Message, ex.Source, ex.StackTrace);
                    }

                    //количество переходов по внешним ссылкам
                    try {
                        var externals = spyDB.Links.Where(x => x.UserId == ip && x.SessionId == sessionId
                                                          //тип ссылки 1 это внешняя ссылка, тип 2 это ссылка на источник в статье
                                                          && (x.Type == 1 || x.Type == 2)).ToList();

                        model.ExternalLinks = externals.Count;
                    } catch (Exception ex) {
                        SiteService.WriteError(ex.Message, ex.Source, ex.StackTrace);
                    }

                    //количество предыдущих сессий
                    try {
                        var previousSessions = spyDB.Sessions.Where(x => x.UserId == ip).ToList();

                        model.PreviousSessions = (previousSessions.Count) / 6;
                    } catch (Exception ex) {
                        SiteService.WriteError(ex.Message, ex.Source, ex.StackTrace);
                    }
                }
            } catch (Exception ex) {
                SiteService.WriteError(ex.Message, ex.Source, ex.StackTrace);
            }

            return(model);
        }
Beispiel #3
0
 /// <summary>
 /// Публичный метод, возвращающий портрет пользователя
 /// </summary>
 /// <param name="ip"></param>
 /// <param name="sessionId"></param>
 public PortraitModel GetPortrait(string ip, Guid sessionId, PortraitModel model)
 {
     return(CreatePortrait(ip, sessionId, model));
 }