Utilities functions related to Health Data logging
Clears all the health data recorded till now
function clearHealthData() {
PreferencesManager.setViewState(HEALTH_DATA_STATE_KEY, {});
//clear the performance related health data also
PerfUtils.clear();
}
Whenever a file is opened call this function. The function will record the number of times the standard file types have been opened. We only log the standard filetypes
function fileOpened(filePath, addedToWorkingSet, encoding) {
if (!shouldLogHealthData()) {
return;
}
var fileExtension = FileUtils.getFileExtension(filePath),
language = LanguageManager.getLanguageForPath(filePath),
healthData = getStoredHealthData(),
fileExtCountMap = [];
healthData.fileStats = healthData.fileStats || {
openedFileExt : {},
workingSetFileExt : {},
openedFileEncoding: {}
};
if (language.getId() !== "unknown") {
fileExtCountMap = addedToWorkingSet ? healthData.fileStats.workingSetFileExt : healthData.fileStats.openedFileExt;
if (!fileExtCountMap[fileExtension]) {
fileExtCountMap[fileExtension] = 0;
}
fileExtCountMap[fileExtension]++;
setHealthData(healthData);
}
if (encoding) {
var fileEncCountMap = healthData.fileStats.openedFileEncoding;
if (!fileEncCountMap) {
healthData.fileStats.openedFileEncoding = {};
fileEncCountMap = healthData.fileStats.openedFileEncoding;
}
if (!fileEncCountMap[encoding]) {
fileEncCountMap[encoding] = 0;
}
fileEncCountMap[encoding]++;
setHealthData(healthData);
}
}
Return the aggregate of all health data logged till now from all sources
function getAggregatedHealthData() {
var healthData = getStoredHealthData();
$.extend(healthData, PerfUtils.getHealthReport());
$.extend(healthData, FindUtils.getHealthReport());
return healthData;
}
Returns health data logged for the given key
function getHealthDataLog(key) {
var healthData = getStoredHealthData();
return healthData[key];
}
Return all health data logged till now stored in the state prefs
function getStoredHealthData() {
var storedData = PreferencesManager.getViewState(HEALTH_DATA_STATE_KEY) || {};
return storedData;
}
Init: creates the health log preference keys in the state.json file
function init() {
PreferencesManager.stateManager.definePreference(HEALTH_DATA_STATE_KEY, "object", {});
}
Notifies the HealthData extension to send Analytics Data to server
function notifyHealthManagerToSendData(eventParams) {
exports.trigger("SendAnalyticsData", eventParams);
}
Increments health log count for a particular kind of search done
function searchDone(searchType) {
var searchDetails = getHealthDataLog("searchDetails");
if (!searchDetails) {
searchDetails = {};
}
if (!searchDetails[searchType]) {
searchDetails[searchType] = 0;
}
searchDetails[searchType]++;
setHealthDataLog("searchDetails", searchDetails);
}
Send Analytics Data
function sendAnalyticsData(eventName, eventCategory, eventSubCategory, eventType, eventSubType) {
var isEventDataAlreadySent = PreferencesManager.getViewState(eventName),
isHDTracking = PreferencesManager.getExtensionPrefs("healthData").get("healthDataTracking"),
eventParams = {};
if (isHDTracking && !isEventDataAlreadySent && eventName && eventCategory) {
eventParams = {
eventName: eventName,
eventCategory: eventCategory,
eventSubCategory: eventSubCategory || "",
eventType: eventType || "",
eventSubType: eventSubType || ""
};
notifyHealthManagerToSendData(eventParams);
}
}
// Define public API
exports.getHealthDataLog = getHealthDataLog;
exports.setHealthDataLog = setHealthDataLog;
exports.getAggregatedHealthData = getAggregatedHealthData;
exports.clearHealthData = clearHealthData;
exports.fileOpened = fileOpened;
exports.setProjectDetail = setProjectDetail;
exports.searchDone = searchDone;
exports.setHealthLogsEnabled = setHealthLogsEnabled;
exports.shouldLogHealthData = shouldLogHealthData;
exports.init = init;
// constants
// searchType for searchDone()
exports.SEARCH_INSTANT = "searchInstant";
exports.SEARCH_ON_RETURN_KEY = "searchOnReturnKey";
exports.SEARCH_REPLACE_ALL = "searchReplaceAll";
exports.SEARCH_NEXT_PAGE = "searchNextPage";
exports.SEARCH_PREV_PAGE = "searchPrevPage";
exports.SEARCH_LAST_PAGE = "searchLastPage";
exports.SEARCH_FIRST_PAGE = "searchFirstPage";
exports.SEARCH_REGEXP = "searchRegExp";
exports.SEARCH_CASE_SENSITIVE = "searchCaseSensitive";
// A new search context on search bar up-Gives an idea of number of times user did a discrete search
exports.SEARCH_NEW = "searchNew";
exports.sendAnalyticsData = sendAnalyticsData;
});
Sets the health data
function setHealthData(dataObject) {
if (!shouldLogHealthData()) {
return;
}
PreferencesManager.setViewState(HEALTH_DATA_STATE_KEY, dataObject);
}
Sets the health data for the given key
function setHealthDataLog(key, dataObject) {
var healthData = getStoredHealthData();
healthData[key] = dataObject;
setHealthData(healthData);
}
Enable or disable health data logs
function setHealthLogsEnabled(enabled) {
logHealthData = enabled;
if (!enabled) {
clearHealthData();
}
}
Sets the project details(a probably unique prjID, number of files in the project and the node cache size) in the health log The name of the project is never saved into the health data log, only the hash(name) is for privacy requirements.
function setProjectDetail(projectName, numFiles, cacheSize) {
var projectNameHash = StringUtils.hashCode(projectName),
FIFLog = getHealthDataLog("ProjectDetails");
if (!FIFLog) {
FIFLog = {};
}
FIFLog["prj" + projectNameHash] = {
numFiles : numFiles,
cacheSize : cacheSize
};
setHealthDataLog("ProjectDetails", FIFLog);
}