Add analytics

This commit is contained in:
Sidharth Vinod
2021-05-23 21:21:06 +05:30
parent 3d777b4487
commit cfb21bee16
8 changed files with 117 additions and 4 deletions
+2
View File
@@ -41,7 +41,9 @@
},
"type": "module",
"dependencies": {
"@analytics/google-analytics": "^0.5.2",
"@macfja/svelte-persistent-store": "^1.1.0",
"analytics": "^0.7.5",
"js-base64": "^3.6.1",
"mermaid": "^8.10.1",
"moment": "^2.29.1",
+1
View File
@@ -53,6 +53,7 @@
crossorigin="anonymous"
referrerpolicy="no-referrer"
></script>
%svelte.head%
</head>
<body>
+8 -1
View File
@@ -1,5 +1,12 @@
<script lang="ts">
<script context="module">
import { version } from 'mermaid/package.json';
import { analytics } from '$lib/util/stats';
analytics?.track('version', {
mermaidVersion: version
});
</script>
<script lang="ts">
interface Link {
title: string;
href: string;
+2
View File
@@ -2,6 +2,7 @@ import { writable, get, derived } from 'svelte/store';
import { toBase64, fromBase64 } from 'js-base64';
import { persist, localStorage } from '@macfja/svelte-persistent-store';
import type { State } from '$lib/types';
import { saveStatistcs } from './stats';
const defaultState: State = {
code: `graph TD
@@ -55,6 +56,7 @@ export const updateCodeStore = (newState: State): void => {
let prompted = false;
export const updateCode = (code: string, updateEditor: boolean, updateDiagram = false): void => {
saveStatistcs(code);
const lines = (code.match(/\n/g) || '').length + 1;
if (lines > 50 && !prompted && get(codeStore).autoSync) {
+45
View File
@@ -0,0 +1,45 @@
import { browser } from '$app/env';
export let analytics;
export const initAnalytics = async (): Promise<void> => {
if (browser && !analytics) {
try {
const { Analytics } = await import('analytics');
const googleAnalytics = await import('@analytics/google-analytics');
analytics = Analytics({
app: 'mermaid-live-editor',
plugins: [
googleAnalytics.init({
trackingId: 'UA-153180559-1'
})
]
});
} catch {
console.info('Analytics blocked ;)');
}
}
};
const detectType = (text: string): string => {
return text
.replace(/^\s*%%.*\n/g, '\n')
.trimStart()
.split(' ')[0];
};
// manual debounce
let timeout;
export const saveStatistcs = (graph: string): void => {
if (analytics) {
clearTimeout(timeout);
// Only save statistcs after a 5 sec delay
timeout = setTimeout(function () {
const graphType = detectType(graph);
console.debug('ga:', 'send', 'event', 'render', graphType);
analytics.track('render', {
graphType
});
}, 5000);
}
};
+5 -1
View File
@@ -1,4 +1,6 @@
import type { State } from '$lib/types';
import { initURLSubscription, loadState, updateCodeStore } from './state';
import { analytics, initAnalytics } from './stats';
export const loadStateFromURL = (): void => {
loadState(window.location.hash.slice(1));
@@ -10,8 +12,10 @@ export const syncDiagram = (): void => {
} as State);
};
export const initHandler = (): void => {
export const initHandler = async (): Promise<void> => {
loadStateFromURL();
syncDiagram();
initURLSubscription();
await initAnalytics();
analytics?.page();
};
+2 -1
View File
@@ -35,6 +35,8 @@
}
}
}
onMount(initHandler);
const tabSelectHandler = (message: CustomEvent<Tab>) => {
$codeStore.updateEditor = true;
selectedMode = message.detail.id;
@@ -95,7 +97,6 @@
const viewDiagram = async () => {
await goto(`/view#${$base64State}`, { replaceState: true });
};
onMount(initHandler);
</script>
<div class="h-full flex flex-col overflow-hidden bg-gray-100">
+52 -1
View File
@@ -2,6 +2,32 @@
# yarn lockfile v1
"@analytics/cookie-utils@^0.2.3":
version "0.2.3"
resolved "https://registry.yarnpkg.com/@analytics/cookie-utils/-/cookie-utils-0.2.3.tgz#e6ab923f88d89f7b02da0cfab585ff193977052f"
integrity sha512-RiMAVpSluRbWb2hlT9wMJ0r2l+MUZzScYjY+w2iWRzjOr9Zzzs4tYzJT6Sd94PDz3LzCuf4aGOwS6pkKXTEBLw==
"@analytics/core@^0.10.5":
version "0.10.5"
resolved "https://registry.yarnpkg.com/@analytics/core/-/core-0.10.5.tgz#655f62a77e2290750439cfcd76a840e13ca3c480"
integrity sha512-R2W8ybinHXVnWeVLsvI/+ukHzgCWSRT7EoIi6afbWcAsotneFE6vwLwGAKbWIdnGITl1ZaYU6i6wquF6nfF9sQ==
dependencies:
analytics-utils "^0.4.4"
"@analytics/google-analytics@^0.5.2":
version "0.5.2"
resolved "https://registry.yarnpkg.com/@analytics/google-analytics/-/google-analytics-0.5.2.tgz#e94501ae23284ebdccb3453cf9158984b7443388"
integrity sha512-6jviLzo6s7MLvsfPLCSppGgoHb9piShCk/n66s75yR8XN+Pz8ADk1Rh28jRErbLSJToJcCMOwDXikCF7U4exMQ==
dependencies:
universal-analytics "^0.4.20"
"@analytics/storage-utils@^0.2.5":
version "0.2.5"
resolved "https://registry.yarnpkg.com/@analytics/storage-utils/-/storage-utils-0.2.5.tgz#bc82a1b5dea8e47ae18718aae687c3408ae7c504"
integrity sha512-RJdKjR4O86eB5fIfApFfhN8Be/Q709DQiRA7UyS0Ymo6w+usnPPxpm6GaKHVop5CIn3vtlMuUxRA4qZhhBrfMw==
dependencies:
"@analytics/cookie-utils" "^0.2.3"
"@babel/code-frame@7.12.11":
version "7.12.11"
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f"
@@ -1005,6 +1031,22 @@ am-i-a-dependency@1.1.2:
resolved "https://registry.yarnpkg.com/am-i-a-dependency/-/am-i-a-dependency-1.1.2.tgz#f9d3422304d6f642f821e4c407565035f6167f1f"
integrity sha1-+dNCIwTW9kL4IeTEB1ZQNfYWfx8=
analytics-utils@^0.4.4:
version "0.4.4"
resolved "https://registry.yarnpkg.com/analytics-utils/-/analytics-utils-0.4.4.tgz#0fc032c8d3dd8a37f6275ea47f678958204d5bf3"
integrity sha512-MJ6sT28L9RdLIxf/rrcfoDmnfWNxmDlF32q5SKbsce+KRPUPu+BuAp4IUUMgM+nYKWZAsxjI/piFXWqOv97awQ==
dependencies:
"@analytics/storage-utils" "^0.2.5"
dlv "^1.1.3"
analytics@^0.7.5:
version "0.7.5"
resolved "https://registry.yarnpkg.com/analytics/-/analytics-0.7.5.tgz#c65deb0605e6db840415c5f371f894d3dc627919"
integrity sha512-qOQuczBCux574jxfksdVMhD0in9iw8L7PEEjZ/h/OEolbY2UBpFXqydOSyNRG+oF28bBlSPaDQDc3g8f2CwhKA==
dependencies:
"@analytics/core" "^0.10.5"
"@analytics/storage-utils" "^0.2.5"
ansi-colors@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348"
@@ -6837,6 +6879,15 @@ uniqs@^2.0.0:
resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02"
integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI=
universal-analytics@^0.4.20:
version "0.4.23"
resolved "https://registry.yarnpkg.com/universal-analytics/-/universal-analytics-0.4.23.tgz#d915e676850c25c4156762471bdd7cf2eaaca8ac"
integrity sha512-lgMIH7XBI6OgYn1woDEmxhGdj8yDefMKg7GkWdeATAlQZFrMrNyxSkpDzY57iY0/6fdlzTbBV03OawvvzG+q7A==
dependencies:
debug "^4.1.1"
request "^2.88.2"
uuid "^3.0.0"
universalify@^0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
@@ -6895,7 +6946,7 @@ util-deprecate@^1.0.2, util-deprecate@~1.0.1:
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
uuid@^3.3.2:
uuid@^3.0.0, uuid@^3.3.2:
version "3.4.0"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==