public VisitDTO ConvertItemToDto(Community_Visit item) { VisitDTO dto = new VisitDTO(); dto.id = item.id; dto.date = item.date; dto.visitor_id = item.visitor_id; dto.tab_id = item.tab_id; dto.country = item.country; dto.region = item.region; dto.city = item.city; dto.latitude = item.latitude; dto.longitude = item.longitude; dto.language = item.language; dto.domain = item.domain; dto.url = item.url; dto.user_agent = item.user_agent; dto.device_type = item.device_type; dto.device = item.device; dto.platform = item.platform; dto.browser = item.browser; dto.referrer_domain = item.referrer_domain; dto.referrer_url = item.referrer_url; dto.server = item.server; dto.campaign = item.campaign; dto.session_id = item.session_id; dto.request_id = item.request_id; dto.last_request_id = item.last_request_id; return(dto); }
public HttpResponseMessage Put(VisitDTO dto) { try { dto = SaveVisit(dto); return(Request.CreateResponse(HttpStatusCode.OK, dto)); } catch (Exception ex) { Exceptions.LogException(ex); return(Request.CreateResponse(HttpStatusCode.InternalServerError, ex)); } }
public VisitDTO SaveVisit(VisitDTO dto) { Community_Visit visit = dc.Community_Visits.Where(i => i.id == dto.id).SingleOrDefault(); if (visit == null) { visit = ConvertDtoToItem(null, dto); dc.Community_Visits.InsertOnSubmit(visit); } visit = ConvertDtoToItem(visit, dto); dc.SubmitChanges(); return(ConvertItemToDto(visit)); }
public Visit ConvertDtoToItem(Visit item, VisitDTO dto) { if (item == null) { item = new Visit(); } if (dto == null) { return(item); } item.id = dto.id; item.date = dto.date; item.visitor_id = dto.visitor_id; item.tab_id = dto.tab_id; item.ip = dto.ip; item.country = dto.country; item.region = dto.region; item.city = dto.city; item.latitude = dto.latitude; item.longitude = dto.longitude; item.language = dto.language; item.domain = dto.domain; item.url = dto.url; item.user_agent = dto.user_agent; item.device_type = dto.device_type; item.device = dto.device; item.platform = dto.platform; item.browser = dto.browser; item.referrer_domain = dto.referrer_domain; item.referrer_url = dto.referrer_url; item.server = dto.server; item.campaign = dto.campaign; item.session_id = dto.session_id; item.request_id = dto.request_id; item.last_request_id = dto.last_request_id; return(item); }
public HttpResponseMessage Get() { try { List <VisitDTO> dtos = new List <VisitDTO>(); var query = dc.Community_Visits.AsQueryable(); foreach (Community_Visit item in query) { VisitDTO dto = ConvertItemToDto(item); dtos.Add(dto); } return(Request.CreateResponse(HttpStatusCode.OK, dtos)); } catch (Exception ex) { Exceptions.LogException(ex); return(Request.CreateResponse(HttpStatusCode.InternalServerError, ex)); } }
public void OnEndRequest(object s, EventArgs e) { try { HttpContext Context = ((HttpApplication)s).Context; HttpRequest Request = Context.Request; HttpResponse Response = Context.Response; HttpCookie cookie_visitor = null; HttpCookie cookie_session = null; HttpCookie cookie_request = null; int visitor_id = 0; Nullable <int> user_id = null; Guid session_id = Guid.Empty; Guid request_id = Guid.Empty; Guid last_request_id = Guid.Empty; PortalSettings _portalSettings = (PortalSettings)Context.Items["PortalSettings"]; // get/set cookie if visitor tracking is enabled cookie_visitor = Request.Cookies["DNNVISITOR"]; if (cookie_visitor != null) { visitor_id = Convert.ToInt32(cookie_visitor.Value); } // update/create visitor var visitor = dc.Visitors.Where(i => i.id == visitor_id).SingleOrDefault(); if (visitor == null) { // create Visitor record visitor = new Visitor() { created_on_date = DateTime.Now }; dc.Visitors.InsertOnSubmit(visitor); } // get User if authenticated if (Request.IsAuthenticated) { UserInfo user = UserController.Instance.GetCurrentUserInfo(); if (user != null) { user_id = user.UserID; } } // update the user_id if not set yet if (!visitor.user_id.HasValue && user_id.GetValueOrDefault() > 0) { visitor.user_id = user_id; } dc.SubmitChanges(); // only process requests for content pages if (_portalSettings != null && Request.Url.LocalPath.ToLower().EndsWith("default.aspx")) { // filter web crawlers and other bots if (String.IsNullOrEmpty(Request.UserAgent) == false && UserAgentFilter.Match(Request.UserAgent).Success == false) { // get last request cookie value cookie_request = Request.Cookies["DNNREQUEST"]; if (cookie_request != null) { last_request_id = new Guid(cookie_request.Value); } // create new request cookie request_id = Guid.NewGuid(); cookie_request = new HttpCookie("DNNREQUEST"); cookie_request.Value = request_id.ToString(); Response.Cookies.Add(cookie_request); // get last session cookie value cookie_session = Request.Cookies["DNNSESSION"]; if (cookie_session != null) { session_id = new Guid(cookie_session.Value); } else { // create a new session id session_id = Guid.NewGuid(); cookie_session = new HttpCookie("DNNSESSION"); cookie_session.Value = session_id.ToString(); cookie_session.Expires = DateTime.Now.AddMinutes(30); Response.Cookies.Add(cookie_session); } // campaign string campaign = string.Empty; if (Request.QueryString["campaign"] != null) { campaign = Request.QueryString["campaign"]; } // create Visitor cookie cookie_visitor = new HttpCookie("DNNVISITOR"); cookie_visitor.Value = visitor.id.ToString(); cookie_visitor.Expires = DateTime.MaxValue; Response.Cookies.Add(cookie_visitor); string domain = Request.Url.Host + Request.ApplicationPath; if (domain.EndsWith("/")) { domain = domain.Substring(0, domain.Length - 1); } // get referrer URL string url_referrer = string.Empty; if (Request.UrlReferrer != null) { url_referrer = Request.UrlReferrer.ToString(); } string domain_referrer = string.Empty; if (!string.IsNullOrEmpty(url_referrer)) { Uri Uri = new Uri(url_referrer); domain_referrer = Uri.Host; } // get browser language string language = string.Empty; if (Request.UserLanguages != null) { if (Request.UserLanguages.Length != 0) { language = Request.UserLanguages[0].ToLowerInvariant().Trim(); } } // ip address string ip = Request.UserHostAddress; // url string url = Request.RawUrl; //user agenet string user_agent = Request.UserAgent; // create visit object VisitDTO visitDTO = new VisitDTO() { date = DateTime.Now, visitor_id = visitor.id, tab_id = _portalSettings.ActiveTab.TabID, ip = ip, country = "", region = "", city = "", latitude = "", longitude = "", language = language, domain = domain, url = url, user_agent = user_agent, device_type = "Desktop", device = "", platform = "", browser = "", referrer_domain = domain_referrer, referrer_url = url_referrer, server = "", activity = "click", campaign = campaign, session_id = session_id, request_id = request_id, last_request_id = last_request_id }; visitDTO = visitController.ProcessVisit(visitDTO); Visit visit = visitController.ConvertDtoToItem(null, visitDTO); dc.Visits.InsertOnSubmit(visit); dc.SubmitChanges(); } } } catch (Exception ex) { Exceptions.LogException(ex); } }
public VisitDTO ProcessVisit(VisitDTO visit) { // get server visit.server = Dns.GetHostName(); //visit.ip = "104.185.202.20"; // for testing on localhost, should resolve to Atlanta, GA... // get geo info based on IP if (!string.IsNullOrEmpty(visit.ip) && visit.ip != "127.0.0.1") { try { using (var objGeoIP2DB = new DatabaseReader(string.Concat(AppDomain.CurrentDomain.BaseDirectory, "App_Data\\GeoIP2-City.mmdb"))) { var objGeoIP2 = objGeoIP2DB.City(visit.ip); if (objGeoIP2.Country.Name != null && objGeoIP2.Country.Name != "N/A") { visit.country = objGeoIP2.Country.Name; } if (objGeoIP2.MostSpecificSubdivision.Name != null) { visit.region = objGeoIP2.MostSpecificSubdivision.Name; } if (objGeoIP2.City.Name != null) { visit.city = objGeoIP2.City.Name; } visit.latitude = objGeoIP2.Location.Latitude.ToString(); visit.longitude = objGeoIP2.Location.Longitude.ToString(); } } catch { // IP address cannot be resolved } } //get user agent properties using the 51Degrees database if (!string.IsNullOrEmpty(visit.user_agent)) { var device = WebProvider.ActiveProvider?.Match(visit.user_agent); if (device != null) { if (device["IsMobile"] != null && device["IsMobile"].ToString() == "True") { visit.device_type = "Mobile"; } if (device["HardwareVendor"] != null && device["HardwareVendor"].ToString() != "Unknown") { visit.device += device["HardwareVendor"].ToString(); // only available in Premium Data } if (device["HardwareModel"] != null && device["HardwareModel"].ToString() != "Unknown") { visit.device += device["HardwareModel"]; // only available in Premium Data } if (visit.device == "") { visit.device = "Unavailable"; } if (device["PlatformVendor"] != null && device["PlatformVendor"].ToString() != "Unknown") { visit.platform += device["PlatformVendor"] + " "; // only available in Premium Data } if (device["PlatformName"] != null && device["PlatformName"].ToString() != "Unknown") { visit.platform += device["PlatformName"] + " "; } if (device["PlatformVersion"] != null && device["PlatformVersion"].ToString() != "Unknown") { visit.platform += device["PlatformVersion"]; } if (visit.platform == "") { visit.platform = "Unavailable"; } if (device["BrowserVendor"] != null && device["BrowserVendor"].ToString() != "Unknown") { visit.browser += device["BrowserVendor"] + " "; // only available in Premium Data } if (device["BrowserName"] != null && device["BrowserName"].ToString() != "Unknown") { visit.browser += device["BrowserName"] + " "; } if (device["BrowserVersion"] != null && device["BrowserVersion"].ToString() != "Unknown") { visit.browser += device["BrowserVersion"]; } if (visit.browser == "") { visit.browser = "Unavailable"; } } } return(visit); }