Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 65 additions & 3 deletions pkg/dashboard/static/analytics.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
const xhr = new XMLHttpRequest();


xhr.onload = function () {

if (xhr.readyState === XMLHttpRequest.DONE) {
const status = JSON.parse(xhr.responseText);
const version = status.CurVer
if (status.Analytics) {
enableDD(version)
enableHeap(version, status.ClusterMode)
enableSegmentBackend(version, status.ClusterMode)
} else {
console.log("Analytics is disabled in this session")
}
Expand Down Expand Up @@ -60,12 +64,70 @@ function enableHeap(version, inCluster) {
heap.load("4249623943");
window.heap.addEventProperties({
'version': version,
'installationMode': inCluster?"cluster":"local"
'installationMode': inCluster ? "cluster" : "local"
});
}

function sendStats(name, prop){
function sendStats(name, prop) {
if (window.heap) {
window.heap.track(name, prop);
}
}
}

function enableSegmentBackend(version, ClusterMode) {
sendToSegmentThroughAPI("helm dashboard loaded", {version, 'installationMode': ClusterMode ? "cluster" : "local"})
}

function sendToSegmentThroughAPI(eventName, properties) {
if (window.heap) {
const userId = getUserId();
try {
sendData(properties, "track", userId, eventName);
} catch (e) {
console.log("failed sending data to segment", e);
}
}
}

function sendData(data, eventType, userId, eventName) {
const body = createBody(eventType, userId, data, eventName);
ANALYTICS_ADMIN_USER_EMAIL = "[email protected]"
const auth_skipper = ANALYTICS_ADMIN_USER_EMAIL;
return fetch(`https://api.komodor.com/analytics/segment/${eventType}`, {
method: "POST",
mode: "cors",
cache: "no-cache",
//credentials: "include",
headers: {
"Content-Type": "application/json",
"api-key": auth_skipper,
},
redirect: "follow",
referrerPolicy: "no-referrer",
body: JSON.stringify(body),
});
}

function createBody(segmentCallType, userId, params, eventName) {
const data = {userId: userId};
if (segmentCallType === "identify") {
data["traits"] = params;
} else if (segmentCallType === "track") {
if (!eventName) {
throw new Error("no eventName parameter on segment track call");
}
data["properties"] = params;
data["eventName"] = eventName;
}
return data;
}

const getUserId = (() => {
let userId = null;
return () => {
if (!userId) {
userId = crypto.randomUUID();
}
return userId;
};
})();