Skip to content

Commit 41b03d8

Browse files
devvaannshabose
authored andcommitted
feat: add metrics to track snippets usage
1 parent 3f273ec commit 41b03d8

File tree

5 files changed

+50
-0
lines changed

5 files changed

+50
-0
lines changed

src/extensionsIntegrated/CustomSnippets/codeHintIntegration.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
define(function (require, exports, module) {
2222
const CodeHintManager = require("editor/CodeHintManager");
2323
const EditorManager = require("editor/EditorManager");
24+
const Metrics = require("utils/Metrics");
2425

2526
const Global = require("./global");
2627
const Driver = require("./driver");
@@ -118,6 +119,10 @@ define(function (require, exports, module) {
118119
const editor = EditorManager.getFocusedEditor();
119120

120121
if (editor) {
122+
// to track the usage metrics
123+
const fileCategory = Helper.categorizeFileExtensionForMetrics(matchedSnippet.fileExtension);
124+
Metrics.countEvent(Metrics.EVENT_TYPE.EDITOR, "snipt", `use.${fileCategory}`);
125+
121126
// replace the typed abbreviation with the template text using cursor manager
122127
const wordInfo = Driver.getWordBeforeCursor();
123128
const start = { line: wordInfo.line, ch: wordInfo.ch + 1 };

src/extensionsIntegrated/CustomSnippets/driver.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
/* global logger */
2222
define(function (require, exports, module) {
2323
const EditorManager = require("editor/EditorManager");
24+
const Metrics = require("utils/Metrics");
2425

2526
const Global = require("./global");
2627
const Helper = require("./helper");
@@ -47,6 +48,10 @@ define(function (require, exports, module) {
4748
Helper.clearAllInputFields();
4849
Helper.toggleSaveButtonDisability();
4950

51+
// snippet creating metrics
52+
const fileCategory = Helper.categorizeFileExtensionForMetrics(snippetData.fileExtension);
53+
Metrics.countEvent(Metrics.EVENT_TYPE.EDITOR, "snipt", `add.${fileCategory}`);
54+
5055
// save to file storage
5156
SnippetsState.saveSnippetsToState()
5257
.catch(function (error) {

src/extensionsIntegrated/CustomSnippets/helper.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -813,6 +813,29 @@ define(function (require, exports, module) {
813813
}
814814
}
815815

816+
/**
817+
* Categorize file extension for metrics tracking
818+
* @param {string} fileExtension - The file extension from snippet
819+
* @returns {string} - Categorized extension for metrics
820+
*/
821+
function categorizeFileExtensionForMetrics(fileExtension) {
822+
if (!fileExtension || fileExtension === "all") {
823+
return "all";
824+
}
825+
826+
const ext = fileExtension.toLowerCase();
827+
if (ext.includes(".js") || ext.includes(".ts")) {
828+
return "js";
829+
}
830+
if (ext.includes("html") || ext.includes("htm")) {
831+
return "html";
832+
}
833+
if (ext.includes("css") || ext.includes("less") || ext.includes("scss") || ext.includes("sass")) {
834+
return "css";
835+
}
836+
return "other";
837+
}
838+
816839
exports.toggleSaveButtonDisability = toggleSaveButtonDisability;
817840
exports.createHintItem = createHintItem;
818841
exports.clearAllInputFields = clearAllInputFields;
@@ -832,6 +855,7 @@ define(function (require, exports, module) {
832855
exports.populateEditForm = populateEditForm;
833856
exports.getEditSnippetData = getEditSnippetData;
834857
exports.toggleEditSaveButtonDisability = toggleEditSaveButtonDisability;
858+
exports.categorizeFileExtensionForMetrics = categorizeFileExtensionForMetrics;
835859
exports.clearEditInputFields = clearEditInputFields;
836860
exports.handleTextareaTabKey = handleTextareaTabKey;
837861
exports.validateAbbrInput = validateAbbrInput;

src/extensionsIntegrated/CustomSnippets/main.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ define(function (require, exports, module) {
2828
const WorkspaceManager = require("view/WorkspaceManager");
2929
const Strings = require("strings");
3030
const Mustache = require("thirdparty/mustache/mustache");
31+
const Metrics = require("utils/Metrics");
3132

3233
const Driver = require("./driver");
3334
const SnippetsList = require("./snippetsList");
@@ -36,6 +37,7 @@ define(function (require, exports, module) {
3637
const UIHelper = require("./UIHelper");
3738
const SnippetsState = require("./snippetsState");
3839
const SnippetCursorManager = require("./snippetCursorManager");
40+
const Global = require("./global");
3941

4042
const snippetsPanelTpl = require("text!./htmlContent/snippets-panel.html");
4143
// the html content of the panel will be stored in this variable
@@ -266,6 +268,14 @@ define(function (require, exports, module) {
266268

267269
// load snippets from file storage
268270
SnippetsState.loadSnippetsFromState()
271+
.then(function () {
272+
// track boot-time snippet count (only if user has snippets)
273+
const snippetCount = Global.SnippetHintsList.length;
274+
if (snippetCount > 0) {
275+
const countRange = Metrics.getRangeName(snippetCount);
276+
Metrics.countEvent(Metrics.EVENT_TYPE.EDITOR, "snipt", `boot.${countRange}`);
277+
}
278+
})
269279
.catch(function (error) {
270280
console.error("failed to load custom snippets:", error);
271281
logger.reportError(error, "Custom Snippets: didn't load on app init");

src/extensionsIntegrated/CustomSnippets/snippetsList.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525

2626
/* eslint-disable no-invalid-this */
2727
define(function (require, exports, module) {
28+
const Metrics = require("utils/Metrics");
29+
2830
const Global = require("./global");
2931
const SnippetsState = require("./snippetsState");
3032
const UIHelper = require("./UIHelper");
@@ -163,6 +165,10 @@ define(function (require, exports, module) {
163165
const index = Global.SnippetHintsList.findIndex((s) => s.abbreviation === snippetItem.abbreviation);
164166

165167
if (index !== -1) {
168+
// track the snippet deletion metrics before removing
169+
const fileCategory = Helper.categorizeFileExtensionForMetrics(snippetItem.fileExtension);
170+
Metrics.countEvent(Metrics.EVENT_TYPE.EDITOR, "snipt", `del.${fileCategory}`);
171+
166172
Global.SnippetHintsList.splice(index, 1); // removes it from the actual array
167173

168174
// save to file storage

0 commit comments

Comments
 (0)