/// <summary> /// Запись IP в БД /// </summary> private void WriteIpInDb(string ip, SpyContext spyDB) { try { spyDB.Users.Add(new Users { IP = ip, CreateDate = DateTime.Now }); spyDB.SaveChanges(); } catch (Exception ex) { SiteService.WriteError(ex.Message, ex.Source, ex.StackTrace); } }
/// <summary> /// Метод записывает факт прохождения теста и возвращает результаты для пользователя /// </summary> private List <string> TestResultsProcessing(string ip, Guid sessionId, int degreeSelect, int degreeRouteSelect, string organizationText, int innerRouteSelect) { string org = "None"; var result = new List <string>(); if (organizationText != "" && organizationText != "нет" && organizationText != null) { org = organizationText; } //сначала запишем в шпионскую базу данные и отдельно сам факт заполнения try { using (var spyDB = new SpyContext()) { spyDB.Tests.Add(new Tests { Date = DateTime.Now, Degree = degreeSelect, Direction = innerRouteSelect, Organization = org, Science = degreeRouteSelect, SessionId = sessionId, UserId = ip }); spyDB.FormFills.Add(new FormFills { FormName = "Test", UserId = ip, SessionId = sessionId, Date = DateTime.Now }); spyDB.SaveChanges(); } } catch (Exception ex) { SiteService.WriteError(ex.Message, ex.Source, ex.StackTrace); } //теперь создадим список результатов из базы сайта try { using (var siteDB = new SiteContext()) { var themes = siteDB.Themes.Where(x => x.DirectionId == innerRouteSelect).ToList(); foreach (var theme in themes) { //если тема подразумевает наличие организации и сама организация заполнена if (theme.Organization && org != "None") { result.Add(theme.Name + " *название вашей организациии*"); } else { result.Add(theme.Name); } } } } catch (Exception ex) { SiteService.WriteError(ex.Message, ex.Source, ex.StackTrace); } return(result); }
/// <summary> /// Запись события потери фокуса /// </summary> private void WriteFocusLostInDb(string page, string ip, Guid sessionId) { try { using (var spyDB = new SpyContext()) { spyDB.FocusLost.Add(new FocusLost { Page = page, SessionId = sessionId, UserId = ip, Date = DateTime.Now }); spyDB.SaveChanges(); } } catch (Exception ex) { SiteService.WriteError(ex.Message, ex.Source, ex.StackTrace); } }
/// <summary> /// Приватный метод записи геолокации в БД /// </summary> private void WriteGeoInDb(string geo, string ip, Guid sessionId) { try { using (var spyDB = new SpyContext()) { spyDB.Geolocations.Add(new Geolocations { Location = geo, UserId = ip, Date = DateTime.Now, SessionId = sessionId }); spyDB.SaveChanges(); } } catch (Exception ex) { SiteService.WriteError(ex.Message, ex.Source, ex.StackTrace); } }
/// <summary> /// Приватный метод записи браузера в базу /// </summary> private void WriteBrowserInDb(string browser, string ip, Guid sessionId) { try { using (var spyDB = new SpyContext()) { spyDB.Browsers.Add(new Browsers { Browser = browser, UserId = ip, Date = DateTime.Now, SessionId = sessionId }); spyDB.SaveChanges(); } } catch (Exception ex) { SiteService.WriteError(ex.Message, ex.Source, ex.StackTrace); } }
/// <summary> /// Записываем сам факт записи в форму /// </summary> private void WriteFormFillInDb(string ip, Guid sessionId, string formName) { try { using (var spyDB = new SpyContext()) { spyDB.FormFills.Add(new FormFills { UserId = ip, Date = DateTime.Now, SessionId = sessionId, FormName = formName }); spyDB.SaveChanges(); } } catch (Exception ex) { SiteService.WriteError(ex.Message, ex.Source, ex.StackTrace); } }
/// <summary> /// Запись содержимого "свободной" формы /// </summary> private void WriteFreeTextInDb(string ip, Guid sessionId, string freeText) { try { using (var spyDB = new SpyContext()) { spyDB.FreeTextForms.Add(new FreeTextForms { UserId = ip, Date = DateTime.Now, SessionId = sessionId, Text = freeText }); spyDB.SaveChanges(); } } catch (Exception ex) { SiteService.WriteError(ex.Message, ex.Source, ex.StackTrace); } }
/// <summary> /// Запись согласия на куки в базу /// </summary> /// <param name="ip"></param> /// <param name="sessionId"></param> private void WriteCookieAgreeInDb(string ip, Guid sessionId) { try { using (var spyDB = new SpyContext()) { spyDB.CookieAgree.Add(new CookieAgree { SessionId = sessionId, UserId = ip, Date = DateTime.Now }); spyDB.SaveChanges(); } } catch (Exception ex) { SiteService.WriteError(ex.Message, ex.Source, ex.StackTrace); } }
/// <summary> /// Запись времени загрузки страницы в БД /// </summary> private void WriteLoadInDb(int time, string page, string ip, Guid sessionId) { try { using (var spyDB = new SpyContext()) { spyDB.PageLoadTimeLog.Add(new PageLoadTimeLog { Page = page, UserId = ip, Date = DateTime.Now, Time = time, SessionId = sessionId }); spyDB.SaveChanges(); } } catch (Exception ex) { SiteService.WriteError(ex.Message, ex.Source, ex.StackTrace); } }
/// <summary> /// Метод возвращает список направлений для выбранной науки /// </summary> private List <Directions> GetInnerRoutesFromDb(int id) { var res = new List <Directions>(); try { using (var siteDB = new SiteContext()) { res = siteDB.Directions.Where(x => x.ScienceId == id).ToList(); } } catch (Exception ex) { SiteService.WriteError(ex.Message, ex.Source, ex.StackTrace); } return(res); }
/// <summary> /// Приватный метод проверки IP в БД /// </summary> private void CheckIpInDb(string ip) { try { using (var spyDB = new SpyContext()) { var user = spyDB.Users.Where(x => x.IP == ip).ToList(); if (user.Count() == 0) { WriteIpInDb(ip, spyDB); } } } catch (Exception ex) { SiteService.WriteError(ex.Message, ex.Source, ex.StackTrace); } }
/// <summary> /// Запись данных их формы с общими данными /// </summary> private void WriteCommonInDb(string ip, Guid sessionId, string yourName, string yourCity, int yourYear, int direction, int degreeSelect) { try { using (var spyDB = new SpyContext()) { spyDB.CommonForms.Add(new CommonForms { UserId = ip, Date = DateTime.Now, SessionId = sessionId, City = yourCity, DegreeSelect = degreeSelect, Direction = direction, Name = yourName, Year = yourYear }); spyDB.SaveChanges(); } } catch (Exception ex) { SiteService.WriteError(ex.Message, ex.Source, ex.StackTrace); } }
/// <summary> /// Запись клика по картинке в базу данных /// </summary> /// <param name="ip"></param> /// <param name="page"></param> /// <param name="source"></param> /// <param name="destination"></param> /// <param name="type"></param> /// <param name="sessionId"></param> private void WritePicsInDb(string ip, string name, Guid sessionId) { try { using (var spyDB = new SpyContext()) { spyDB.Pics.Add(new Pics { Name = name, SessionId = sessionId, UserId = ip, Date = DateTime.Now }); spyDB.SaveChanges(); } } catch (Exception ex) { SiteService.WriteError(ex.Message, ex.Source, ex.StackTrace); } }
/// <summary> /// Логгирование переходов по ссылкам в базе /// </summary> /// <param name="ip"></param> /// <param name="page"></param> /// <param name="source"></param> /// <param name="destination"></param> /// <param name="type"></param> /// <param name="sessionId"></param> private void WriteLinksInDb(string ip, string page, string source, string destination, int type, Guid sessionId) { try { using (var spyDB = new SpyContext()) { spyDB.Links.Add(new Links { Page = page, Source = source, Type = type, Destination = destination, SessionId = sessionId, UserId = ip, Date = DateTime.Now }); spyDB.SaveChanges(); } } catch (Exception ex) { SiteService.WriteError(ex.Message, ex.Source, ex.StackTrace); } }
/// <summary> /// Запись из формы о дизайне и user expirience /// </summary> private void WriteUiuxInDb(string ip, Guid sessionId, int averageUi, int correctWork, int trust, int modern, int pageLocations, int formPreference) { try { using (var spyDB = new SpyContext()) { spyDB.UiuxForms.Add(new UiuxForms { UserId = ip, Date = DateTime.Now, SessionId = sessionId, AverageUI = averageUi, CorrectWork = correctWork, Trust = trust, Modern = modern, PageLocation = pageLocations, FormPreference = formPreference }); spyDB.SaveChanges(); } } catch (Exception ex) { SiteService.WriteError(ex.Message, ex.Source, ex.StackTrace); } }
/// <summary> /// Запись данных из формы о функциональности сайта /// </summary> private void WriteFunctionalInDb(string ip, Guid sessionId, int average, int loadTime, int limitations, string oneThing, int somethingNew, int reccomend, int portrait, int trueData) { try { using (var spyDB = new SpyContext()) { spyDB.FunctionalForms.Add(new FunctionalForms { UserId = ip, Date = DateTime.Now, SessionId = sessionId, Average = average, Limitations = limitations, LoadTime = loadTime, OneThing = oneThing, Portrait = portrait, Reccomend = reccomend, SomethingNew = somethingNew, TrueData = trueData }); spyDB.SaveChanges(); } } catch (Exception ex) { SiteService.WriteError(ex.Message, ex.Source, ex.StackTrace); } }
/// <summary> /// Запись события покидания страницы в БД /// </summary> private void WriteExitInDb(int time, string page, string ip, Guid sessionId) { try { using (var spyDB = new SpyContext()) { decimal timeDec = time / 1000; time = Convert.ToInt32(Math.Round(timeDec)); spyDB.ExitLog.Add(new ExitLog { Page = page, UserId = ip, Date = DateTime.Now, Time = time, SessionId = sessionId }); spyDB.SaveChanges(); } } catch (Exception ex) { SiteService.WriteError(ex.Message, ex.Source, ex.StackTrace); } }
/// <summary> /// Записываем в базу, откуда пришел пользователь /// </summary> private void WriteRefererInDb(string referer, string ip, Guid sessionId) { try { var refererLink = ""; if (referer == null || referer == "") { refererLink = "Straight or other"; } using (var spyDB = new SpyContext()) { spyDB.Referers.Add(new Referers { UserId = ip, SessionId = sessionId, Referer = refererLink, Date = DateTime.Now }); spyDB.SaveChanges(); } } catch (Exception ex) { SiteService.WriteError(ex.Message, ex.Source, ex.StackTrace); } }
/// <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); }