-
Notifications
You must be signed in to change notification settings - Fork 4
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix: exceptional max attribute length and page_referrer flag addition #59
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -8,6 +8,9 @@ var EVENT_NAME_MAX_LENGTH = 40; | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
var EVENT_ATTRIBUTE_KEY_MAX_LENGTH = 40; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
var EVENT_ATTRIBUTE_VAL_MAX_LENGTH = 100; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
var EVENT_ATTRIBUTE_MAX_NUMBER = 100; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
var PAGE_TITLE_MAX_LENGTH = 300; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
var PAGE_REFERRER_MAX_LENGTH = 420; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
var PAGE_LOCATION_MAX_LENGTH = 1000; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
var USER_ATTRIBUTE_KEY_MAX_LENGTH = 24; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
var USER_ATTRIBUTE_VALUE_MAX_LENGTH = 36; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -67,7 +70,29 @@ Common.prototype.truncateAttributes = function ( | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if (!isEmpty(attributes)) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Object.keys(attributes).forEach(function (attribute) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
var key = truncateString(attribute, keyLimit); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
var val = truncateString(attributes[attribute], valueLimit); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
var val; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
switch (key) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
case 'page_title': | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
val = truncateString( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
attributes[attribute], | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
PAGE_TITLE_MAX_LENGTH | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
break; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
case 'page_referrer': | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
val = truncateString( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
attributes[attribute], | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
PAGE_REFERRER_MAX_LENGTH | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
break; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
case 'page_location': | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
val = truncateString( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
attributes[attribute], | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
PAGE_LOCATION_MAX_LENGTH | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
break; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
default: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
val = truncateString(attributes[attribute], valueLimit); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. From a readability standpoint, I think it makes things more clear that you're overriding the value limit by just changing Then it becomes:
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
truncatedAttributes[key] = val; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Original file line number | Diff line number | Diff line change | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
|
@@ -69,13 +69,15 @@ EventHandler.prototype.logError = function () { | |||||||||
EventHandler.prototype.logPageView = function (event) { | ||||||||||
var TITLE = 'GA4.Title'; | ||||||||||
var LOCATION = 'GA4.Location'; | ||||||||||
var REFERRER = 'GA4.Referrer'; | ||||||||||
|
||||||||||
// These are being included for backwards compatibility from the legacy Google Analytics custom flags | ||||||||||
var LEGACY_GA_TITLE = 'Google.Title'; | ||||||||||
var LEGACY_GA_LOCATION = 'Google.Location'; | ||||||||||
|
||||||||||
var pageLocation = location.href, | ||||||||||
pageTitle = document.title; | ||||||||||
pageTitle = document.title, | ||||||||||
pageReferrer = document.referrer; | ||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. if this is accepted as a suggestion, update the |
||||||||||
|
||||||||||
if (event.CustomFlags) { | ||||||||||
if (event.CustomFlags.hasOwnProperty(TITLE)) { | ||||||||||
|
@@ -89,12 +91,17 @@ EventHandler.prototype.logPageView = function (event) { | |||||||||
} else if (event.CustomFlags.hasOwnProperty(LEGACY_GA_LOCATION)) { | ||||||||||
pageLocation = event.CustomFlags[LEGACY_GA_LOCATION]; | ||||||||||
} | ||||||||||
|
||||||||||
if (event.CustomFlags.hasOwnProperty(REFERRER)) { | ||||||||||
mmustafa-tse marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||
pageReferrer = event.CustomFlags[REFERRER]; | ||||||||||
} | ||||||||||
} | ||||||||||
|
||||||||||
var eventAttributes = this.common.mergeObjects( | ||||||||||
{ | ||||||||||
page_title: pageTitle, | ||||||||||
page_location: pageLocation, | ||||||||||
page_referrer: pageReferrer, | ||||||||||
}, | ||||||||||
event.EventAttributes | ||||||||||
); | ||||||||||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -1522,6 +1522,7 @@ describe('Google Analytics 4 Event', function () { | |
{ | ||
page_title: 'Mocha Tests', | ||
page_location: location.href, | ||
page_referrer: document.referrer, | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I see that you added some tests that include There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. so as mentioned the default for page_referrer per google docs is document.referrer and I included it just how we default page_title and page_location |
||
send_to: 'testMeasurementId', | ||
}, | ||
]; | ||
|
@@ -1541,6 +1542,7 @@ describe('Google Analytics 4 Event', function () { | |
CustomFlags: { | ||
'GA4.Title': 'Foo Page Title', | ||
'GA4.Location': '/foo', | ||
'GA4.Referrer': 'Foo Page Referrer' | ||
}, | ||
}); | ||
|
||
|
@@ -1550,6 +1552,7 @@ describe('Google Analytics 4 Event', function () { | |
{ | ||
page_title: 'Foo Page Title', | ||
page_location: '/foo', | ||
page_referrer: 'Foo Page Referrer', | ||
eventKey1: 'test1', | ||
eventKey2: 'test2', | ||
send_to: 'testMeasurementId', | ||
|
@@ -1644,6 +1647,7 @@ describe('Google Analytics 4 Event', function () { | |
{ | ||
page_title: 'Foo Page Title', | ||
page_location: '/foo', | ||
page_referrer: document.referrer, | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. any reason this is a reference to |
||
send_to: 'testMeasurementId', | ||
}, | ||
]; | ||
|
@@ -1660,6 +1664,7 @@ describe('Google Analytics 4 Event', function () { | |
CustomFlags: { | ||
'GA4.Title': 'Foo Page Title', | ||
'GA4.Location': '/foo', | ||
'GA4.Referrer': 'Foo Page Referrer' | ||
}, | ||
}); | ||
|
||
|
@@ -1669,6 +1674,7 @@ describe('Google Analytics 4 Event', function () { | |
{ | ||
page_title: 'Foo Page Title', | ||
page_location: '/foo', | ||
page_referrer: 'Foo Page Referrer', | ||
send_to: 'testMeasurementId', | ||
}, | ||
]; | ||
|
@@ -1677,6 +1683,42 @@ describe('Google Analytics 4 Event', function () { | |
done(); | ||
}); | ||
|
||
it('should log page view with truncated GA custom flags', function (done) { | ||
function generateValue(length) { | ||
var value = '' | ||
for (let i = 0; i < length; i++) { | ||
value += 'a' | ||
} | ||
return value | ||
} | ||
|
||
mParticle.forwarder.process({ | ||
EventDataType: MessageType.PageView, | ||
EventName: 'test name', | ||
EventAttributes: {}, | ||
CustomFlags: { | ||
'GA4.Title': generateValue(305), // Max page_title length is 300 for GA4 | ||
'GA4.Location': generateValue(1005), // Max page_location length is 1000 for GA4 | ||
'GA4.Referrer': generateValue(425) // Max page_referrer length is 420 for GA4 | ||
}, | ||
}); | ||
|
||
var result = [ | ||
'event', | ||
'page_view', | ||
{ | ||
page_title: generateValue(300), | ||
page_location: generateValue(1000), | ||
page_referrer: generateValue(420), | ||
send_to: 'testMeasurementId', | ||
}, | ||
]; | ||
|
||
window.dataLayer[0].should.eql(result); | ||
|
||
done(); | ||
}) | ||
|
||
describe('limit event attributes', function () { | ||
// 101 event attribute keys because the limit is 100 | ||
var eventAttributeKeys101 = [ | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would make each case a variable at the top of the page below the variables for max lengths