improve performance by reducing database calls in initial client request scenarios

This commit is contained in:
Shaun Walker 2022-02-11 15:42:34 -05:00
parent 02e86a940b
commit e8425ba03a

View File

@ -230,10 +230,10 @@ namespace Oqtane.Pages
// filter // filter
string filter = Constants.DefaultVisitorFilter; string filter = Constants.DefaultVisitorFilter;
var setting = _settings.GetSetting(EntityNames.Site, SiteId, "VisitorFilter"); var settings = _settings.GetSettings(EntityNames.Site, SiteId);
if (setting != null) if (settings.Any(item => item.SettingName == "VisitorFilter"))
{ {
filter = setting.SettingValue; filter = settings.First(item => item.SettingName == "VisitorFilter").SettingValue;
} }
foreach (string term in filter.ToLower().Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(sValue => sValue.Trim()).ToArray()) foreach (string term in filter.ToLower().Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(sValue => sValue.Trim()).ToArray())
{ {
@ -243,6 +243,7 @@ namespace Oqtane.Pages
} }
} }
// get other request attributes
string url = Request.GetEncodedUrl(); string url = Request.GetEncodedUrl();
string referrer = (Request.Headers[HeaderNames.Referer] != StringValues.Empty) ? Request.Headers[HeaderNames.Referer] : ""; string referrer = (Request.Headers[HeaderNames.Referer] != StringValues.Empty) ? Request.Headers[HeaderNames.Referer] : "";
int? userid = null; int? userid = null;
@ -251,39 +252,34 @@ namespace Oqtane.Pages
userid = int.Parse(User.Claims.First(item => item.Type == ClaimTypes.PrimarySid).Value); userid = int.Parse(User.Claims.First(item => item.Type == ClaimTypes.PrimarySid).Value);
} }
// check if cookie already exists
Visitor visitor = null;
bool addcookie = false;
var VisitorCookie = "APP_VISITOR_" + SiteId.ToString(); var VisitorCookie = "APP_VISITOR_" + SiteId.ToString();
if (!int.TryParse(Request.Cookies[VisitorCookie], out VisitorId)) if (!int.TryParse(Request.Cookies[VisitorCookie], out VisitorId))
{ {
// if enabled use IP Address correlation
VisitorId = -1; VisitorId = -1;
bool correlate = true; bool correlate = true;
setting = _settings.GetSetting(EntityNames.Site, SiteId, "VisitorCorrelation"); if (settings.Any(item => item.SettingName == "VisitorCorrelation"))
if (setting != null)
{ {
correlate = bool.Parse(setting.SettingValue); correlate = bool.Parse(settings.First(item => item.SettingName == "VisitorCorrelation").SettingValue);
} }
if (correlate) if (correlate)
{ {
var visitor = _visitors.GetVisitor(SiteId, RemoteIPAddress); visitor = _visitors.GetVisitor(SiteId, RemoteIPAddress);
if (visitor != null) if (visitor != null)
{ {
VisitorId = visitor.VisitorId; VisitorId = visitor.VisitorId;
addcookie = true;
Response.Cookies.Append(
VisitorCookie,
VisitorId.ToString(),
new CookieOptions()
{
Expires = DateTimeOffset.UtcNow.AddYears(1),
IsEssential = true
}
);
} }
} }
} }
if (VisitorId == -1) if (VisitorId == -1)
{ {
var visitor = new Visitor(); // create new visitor
visitor = new Visitor();
visitor.SiteId = SiteId; visitor.SiteId = SiteId;
visitor.IPAddress = RemoteIPAddress; visitor.IPAddress = RemoteIPAddress;
visitor.UserAgent = useragent; visitor.UserAgent = useragent;
@ -295,22 +291,19 @@ namespace Oqtane.Pages
visitor.CreatedOn = DateTime.UtcNow; visitor.CreatedOn = DateTime.UtcNow;
visitor.VisitedOn = DateTime.UtcNow; visitor.VisitedOn = DateTime.UtcNow;
visitor = _visitors.AddVisitor(visitor); visitor = _visitors.AddVisitor(visitor);
VisitorId = visitor.VisitorId;
Response.Cookies.Append( addcookie = true;
VisitorCookie,
visitor.VisitorId.ToString(),
new CookieOptions()
{
Expires = DateTimeOffset.UtcNow.AddYears(1),
IsEssential = true
}
);
} }
else else
{ {
var visitor = _visitors.GetVisitor(VisitorId); if (visitor == null)
{
// get visitor if it was not previously loaded
visitor = _visitors.GetVisitor(VisitorId);
}
if (visitor != null) if (visitor != null)
{ {
// update visitor
visitor.IPAddress = RemoteIPAddress; visitor.IPAddress = RemoteIPAddress;
visitor.UserAgent = useragent; visitor.UserAgent = useragent;
visitor.Language = language; visitor.Language = language;
@ -329,9 +322,24 @@ namespace Oqtane.Pages
} }
else else
{ {
// remove cookie if VisitorId does not exist
Response.Cookies.Delete(VisitorCookie); Response.Cookies.Delete(VisitorCookie);
} }
} }
// append cookie
if (addcookie)
{
Response.Cookies.Append(
VisitorCookie,
VisitorId.ToString(),
new CookieOptions()
{
Expires = DateTimeOffset.UtcNow.AddYears(1),
IsEssential = true
}
);
}
} }
catch (Exception ex) catch (Exception ex)
{ {