Modules (188)



Utilities functions related to Health Data logging



Public API


Clears all the health data recorded till now

    function clearHealthData() {
        PreferencesManager.setViewState(HEALTH_DATA_STATE_KEY, {});
        //clear the performance related health data also
Public API


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

filePath String
The path of the file to be registered
addedToWorkingSet boolean
set to true if extensions of files added to the working set needs to be logged
    function fileOpened(filePath, addedToWorkingSet, encoding) {
        if (!shouldLogHealthData()) {
        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;
        if (encoding) {
            var fileEncCountMap = healthData.fileStats.openedFileEncoding;
            if (!fileEncCountMap) {
                healthData.fileStats.openedFileEncoding = {};
                fileEncCountMap = healthData.fileStats.openedFileEncoding;
            if (!fileEncCountMap[encoding]) {
                fileEncCountMap[encoding] = 0;
Public API


Return the aggregate of all health data logged till now from all sources

Returns: Object
Health Data aggregated till now
    function getAggregatedHealthData() {
        var healthData = getStoredHealthData();
        $.extend(healthData, PerfUtils.getHealthReport());
        $.extend(healthData, FindUtils.getHealthReport());
        return healthData;
Public API


Returns health data logged for the given key

Returns: Object
Health Data object for the key or undefined if no health data stored
    function getHealthDataLog(key) {
        var healthData = getStoredHealthData();
        return healthData[key];


Return all health data logged till now stored in the state prefs

Returns: Object
Health Data aggregated till now
    function getStoredHealthData() {
        var storedData = PreferencesManager.getViewState(HEALTH_DATA_STATE_KEY) || {};
        return storedData;
Public API


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

eventParams Event Data to be sent to Analytics Server
    function notifyHealthManagerToSendData(eventParams) {
        exports.trigger("SendAnalyticsData", eventParams);
Public API


Increments health log count for a particular kind of search done

searchType string
The kind of search type that needs to be logged- should be a js var compatible string
    function searchDone(searchType) {
        var searchDetails = getHealthDataLog("searchDetails");
        if (!searchDetails) {
            searchDetails = {};
        if (!searchDetails[searchType]) {
            searchDetails[searchType] = 0;
        setHealthDataLog("searchDetails", searchDetails);
Public API


Send Analytics Data

eventCategory string
The kind of Event Category that needs to be logged- should be a js var compatible string
eventSubCategory string
The kind of Event Sub Category that needs to be logged- should be a js var compatible string
eventType string
The kind of Event Type that needs to be logged- should be a js var compatible string
eventSubType string
The kind of Event Sub Type that needs to be logged- should be a js var compatible string
    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 || ""

    // 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

dataObject Object
The object to be stored as health data
    function setHealthData(dataObject) {
        if (!shouldLogHealthData()) {
        PreferencesManager.setViewState(HEALTH_DATA_STATE_KEY, dataObject);
Public API


Sets the health data for the given key

dataObject Object
The object to be stored as health data for the key
    function setHealthDataLog(key, dataObject) {
        var healthData = getStoredHealthData();
        healthData[key] = dataObject;
Public API


Enable or disable health data logs

enabled boolean
true to enable health logs
    function setHealthLogsEnabled(enabled) {
        logHealthData = enabled;
        if (!enabled) {
Public API


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.

projectName string
The name of the project
numFiles number
The number of file in the project
cacheSize number
The node file cache memory consumed by the project
    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);
Public API


All the logging functions should be disabled if this returns false

Returns: boolean
true if health data can be logged
    function shouldLogHealthData() {
        return logHealthData;